This is a note to let you know that I've just added the patch titled interconnect: Do not skip aggregation for disabled paths to the 5.4-stable tree which can be found at: http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary The filename of the patch is: interconnect-do-not-skip-aggregation-for-disabled-paths.patch and it can be found in the queue-5.4 subdirectory. If you, or anyone else, feels it should not be added to the stable tree, please let <stable@xxxxxxxxxxxxxxx> know about it. >From 91b44981a2316e7b00574d32dec4fae356444dcf Mon Sep 17 00:00:00 2001 From: Georgi Djakov <georgi.djakov@xxxxxxxxxx> Date: Thu, 23 Jul 2020 11:37:34 +0300 Subject: interconnect: Do not skip aggregation for disabled paths From: Georgi Djakov <georgi.djakov@xxxxxxxxxx> commit 91b44981a2316e7b00574d32dec4fae356444dcf upstream. When an interconnect path is being disabled, currently we don't aggregate the requests for it afterwards. But the re-aggregation step shouldn't be skipped, as it may leave the nodes with outdated bandwidth data. This outdated data may actually keep the path still enabled and prevent the device from going into lower power states. Reported-by: Atul Dhudase <adhudase@xxxxxxxxxxxxxx> Fixes: 7d374b209083 ("interconnect: Add helpers for enabling/disabling a path") Reviewed-by: Sibi Sankar <sibis@xxxxxxxxxxxxxx> Tested-by: Atul Dhudase <adhudase@xxxxxxxxxxxxxx> Reviewed-by: Atul Dhudase <adhudase@xxxxxxxxxxxxxx> Link: https://lore.kernel.org/r/20200721120740.3436-1-georgi.djakov@xxxxxxxxxx Signed-off-by: Georgi Djakov <georgi.djakov@xxxxxxxxxx> Link: https://lore.kernel.org/r/20200723083735.5616-2-georgi.djakov@xxxxxxxxxx Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> --- drivers/interconnect/core.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) --- a/drivers/interconnect/core.c +++ b/drivers/interconnect/core.c @@ -176,6 +176,7 @@ static int aggregate_requests(struct icc { struct icc_provider *p = node->provider; struct icc_req *r; + u32 avg_bw, peak_bw; node->avg_bw = 0; node->peak_bw = 0; @@ -184,9 +185,14 @@ static int aggregate_requests(struct icc p->pre_aggregate(node); hlist_for_each_entry(r, &node->req_list, req_node) { - if (!r->enabled) - continue; - p->aggregate(node, r->tag, r->avg_bw, r->peak_bw, + if (r->enabled) { + avg_bw = r->avg_bw; + peak_bw = r->peak_bw; + } else { + avg_bw = 0; + peak_bw = 0; + } + p->aggregate(node, r->tag, avg_bw, peak_bw, &node->avg_bw, &node->peak_bw); } Patches currently in stable-queue which might be from georgi.djakov@xxxxxxxxxx are queue-5.4/interconnect-move-internal-structs-into-a-separate-f.patch queue-5.4/interconnect-do-not-skip-aggregation-for-disabled-paths.patch queue-5.4/interconnect-add-helpers-for-enabling-disabling-a-pa.patch