interconnect: Skip call into provider if initial bw is zero
authorVivek Aknurwar <quic_viveka@quicinc.com>
Fri, 13 Jan 2023 22:07:59 +0000 (14:07 -0800)
committerGeorgi Djakov <djakov@kernel.org>
Mon, 20 Mar 2023 14:42:26 +0000 (16:42 +0200)
Currently framework sets bw even when init bw requirements are zero during
provider registration, thus resulting bulk of set bw to hw.
Avoid this behaviour by skipping provider set bw calls if init bw is zero.

Signed-off-by: Vivek Aknurwar <quic_viveka@quicinc.com>
Link: https://lore.kernel.org/r/1673647679-15216-1-git-send-email-quic_viveka@quicinc.com
Signed-off-by: Georgi Djakov <djakov@kernel.org>
drivers/interconnect/core.c

index 7a24c1444ace3c50e4727dd757c123c74fc05b17..446c9d1fb486601e06daf4d6fc07c3d199a33ace 100644 (file)
@@ -981,14 +981,17 @@ void icc_node_add(struct icc_node *node, struct icc_provider *provider)
        node->avg_bw = node->init_avg;
        node->peak_bw = node->init_peak;
 
-       if (provider->pre_aggregate)
-               provider->pre_aggregate(node);
-
-       if (provider->aggregate)
-               provider->aggregate(node, 0, node->init_avg, node->init_peak,
-                                   &node->avg_bw, &node->peak_bw);
+       if (node->avg_bw || node->peak_bw) {
+               if (provider->pre_aggregate)
+                       provider->pre_aggregate(node);
+
+               if (provider->aggregate)
+                       provider->aggregate(node, 0, node->init_avg, node->init_peak,
+                                           &node->avg_bw, &node->peak_bw);
+               if (provider->set)
+                       provider->set(node, node);
+       }
 
-       provider->set(node, node);
        node->avg_bw = 0;
        node->peak_bw = 0;