PM / Domains: enable domain idle state accounting
Subsystems (6)
PATCH v3 1/1 PM / Domains: enable domain idle state accounting
To enable better debug of PM domains, let's keep a track of the success and rejections in entering each domain idle state.
This statistics is exported in debugfs when reading the idle_states node, associated with each PM domain.
---
Changes in v3:
- Rebased on top of mainline
--- drivers/base/power/domain.c | 10 +++++++--- include/linux/pm_domain.h | 2 ++ 2 files changed, 9 insertions(+), 3 deletions(-)
drivers/base/power/domain.c +7 -3
@@ -559,12 +559,15 @@ static int genpd_power_off(struct generic_pm_domain *genpd, bool one_dev_on,* happen very often). */ ret =_genpd_power_off (genpd, true); -if (ret) +if (ret) { + genpd->states[genpd->state_idx].rejected++;return ret; + } } genpd->status =GPD_STATE_POWER_OFF ;genpd_update_accounting (genpd); + genpd->states[genpd->state_idx].usage++;list_for_each_entry (link, &genpd->child_links, child_node) {genpd_sd_counter_dec (link->parent);
@@ -2932,7 +2935,7 @@ static int idle_states_show(struct seq_file *s, void *data)if (ret)return -ERESTARTSYS ; -seq_puts (s,"State Time Spent(ms)\n" ); +seq_puts (s,"State Time Spent(ms) Usage Rejected\n" );for (i =0 ; i < genpd->state_count; i++) {ktime_t delta =0 ;
@@ -2944,7 +2947,8 @@ static int idle_states_show(struct seq_file *s, void *data) msecs =ktime_to_ms (ktime_add (genpd->states[i].idle_time, delta)); -seq_printf (s,"S%-13i %lld\n" , i, msecs); +seq_printf (s,"S%-13i %-14lld %-14llu %llu\n" , i, msecs, + genpd->states[i].usage, genpd->states[i].rejected); }genpd_unlock (genpd);
include/linux/pm_domain.h +2 -0
@@ -82,6 +82,8 @@ struct genpd_power_state {s64 power_off_latency_ns;s64 power_on_latency_ns;s64 residency_ns; +u64 usage; +u64 rejected;struct fwnode_handle *fwnode;ktime_t idle_time;void *data;
Signature · 2 lines
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project
Rafael J. Wysocki
maintainerQuoted 11 lines · Lina Iyer
To enable better debug of PM domains, let's keep a track of the success and rejections in entering each domain idle state.
This statistics is exported in debugfs when reading the
idle_statesnode, associated with each PM domain.Signed-off-by Lina Iyer <[email protected]>---
Changes in v3:
- Rebased on top of mainline
I still needed to rebase it to apply it to my tree, so please double check the result in the bleeding-edge branch.
Thanks!
Quoted 62 lines
--- drivers/base/power/domain.c | 10 +++++++--- include/linux/pm_domain.h | 2 ++ 2 files changed, 9 insertions(+), 3 deletions(-)drivers/base/power/domain.c +7
-3@@ -559,12 +559,15 @@ static int genpd_power_off(struct generic_pm_domain *genpd, bool one_dev_on,* happen very often). */ ret =_genpd_power_off (genpd, true); -if (ret) +if (ret) { + genpd->states[genpd->state_idx].rejected++;return ret; + } } genpd->status =GPD_STATE_POWER_OFF ;genpd_update_accounting (genpd); + genpd->states[genpd->state_idx].usage++;list_for_each_entry (link, &genpd->child_links, child_node) {genpd_sd_counter_dec (link->parent);@@ -2932,7 +2935,7 @@ static int idle_states_show(struct seq_file *s, void *data)if (ret)return -ERESTARTSYS ; -seq_puts (s,"State Time Spent(ms)\n" ); +seq_puts (s,"State Time Spent(ms) Usage Rejected\n" );for (i =0 ; i < genpd->state_count; i++) {ktime_t delta =0 ;@@ -2944,7 +2947,8 @@ static int idle_states_show(struct seq_file *s, void *data) msecs =ktime_to_ms (ktime_add (genpd->states[i].idle_time, delta)); -seq_printf (s,"S%-13i %lld\n" , i, msecs); +seq_printf (s,"S%-13i %-14lld %-14llu %llu\n" , i, msecs, + genpd->states[i].usage, genpd->states[i].rejected); }genpd_unlock (genpd);include/linux/pm_domain.h +2
-1@@ -82,6 +82,8 @@ struct genpd_power_state {s64 power_off_latency_ns;s64 power_on_latency_ns;s64 residency_ns; +u64 usage; +u64 rejected;struct fwnode_handle *fwnode;ktime_t idle_time;void *data; --The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project
Quoted 8 lines · Rafael J. Wysocki
Quoted 7 lines · Lina Iyer
To enable better debug of PM domains, let's keep a track of the success and rejections in entering each domain idle state.
This statistics is exported in debugfs when reading the
idle_statesnode, associated with each PM domain.
Quoted 8 lines
Quoted 4 lines
Signed-off-by Lina Iyer <[email protected]>---
Changes in v3:
- Rebased on top of mainlineI still needed to rebase it to apply it to my tree, so please double check the result in the bleeding-edge branch.
Okay, will rebase on that branch and post shortly. Thanks Rafael.
Quoted 64 lines
Thanks!
Quoted 62 lines
--- drivers/base/power/domain.c | 10 +++++++--- include/linux/pm_domain.h | 2 ++ 2 files changed, 9 insertions(+), 3 deletions(-)drivers/base/power/domain.c +7
-3@@ -559,12 +559,15 @@ static int genpd_power_off(struct generic_pm_domain *genpd, bool one_dev_on,* happen very often). */ ret =_genpd_power_off (genpd, true); -if (ret) +if (ret) { + genpd->states[genpd->state_idx].rejected++;return ret; + } } genpd->status =GPD_STATE_POWER_OFF ;genpd_update_accounting (genpd); + genpd->states[genpd->state_idx].usage++;list_for_each_entry (link, &genpd->child_links, child_node) {genpd_sd_counter_dec (link->parent);@@ -2932,7 +2935,7 @@ static int idle_states_show(struct seq_file *s, void *data)if (ret)return -ERESTARTSYS ; -seq_puts (s,"State Time Spent(ms)\n" ); +seq_puts (s,"State Time Spent(ms) Usage Rejected\n" );for (i =0 ; i < genpd->state_count; i++) {ktime_t delta =0 ;@@ -2944,7 +2947,8 @@ static int idle_states_show(struct seq_file *s, void *data) msecs =ktime_to_ms (ktime_add (genpd->states[i].idle_time, delta)); -seq_printf (s,"S%-13i %lld\n" , i, msecs); +seq_printf (s,"S%-13i %-14lld %-14llu %llu\n" , i, msecs, + genpd->states[i].usage, genpd->states[i].rejected); }genpd_unlock (genpd);include/linux/pm_domain.h +2
-1@@ -82,6 +82,8 @@ struct genpd_power_state {s64 power_off_latency_ns;s64 power_on_latency_ns;s64 residency_ns; +u64 usage; +u64 rejected;struct fwnode_handle *fwnode;ktime_t idle_time;void *data; --The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project
Rafael J. Wysocki
maintainerQuoted 15 lines · Lina Iyer
Quoted 13 lines · Rafael J. Wysocki
Quoted 11 lines · Lina Iyer
To enable better debug of PM domains, let's keep a track of the success and rejections in entering each domain idle state.
This statistics is exported in debugfs when reading the
idle_statesnode, associated with each PM domain.Signed-off-by Lina Iyer <[email protected]>---
Changes in v3:
- Rebased on top of mainline
Quoted 4 lines
Quoted 3 lines
I still needed to rebase it to apply it to my tree, so please double check the result in the bleeding-edge branch.
Okay, will rebase on that branch and post shortly.
No need, it's been applied already, just please check the result in bleeding-edge.
Thanks!
Quoted 16 lines · Rafael J. Wysocki
Quoted 15 lines · Lina Iyer
Quoted 13 lines · Rafael J. Wysocki
Quoted 11 lines · Lina Iyer
To enable better debug of PM domains, let's keep a track of the success and rejections in entering each domain idle state.
This statistics is exported in debugfs when reading the
idle_statesnode, associated with each PM domain.Signed-off-by Lina Iyer <[email protected]>---
Changes in v3:
- Rebased on top of mainline
Quoted 8 lines
Quoted 4 lines
Quoted 3 lines
I still needed to rebase it to apply it to my tree, so please double check the result in the bleeding-edge branch.
Okay, will rebase on that branch and post shortly.
No need, it's been applied already, just please check the result in bleeding-edge.
I think I may have the wrong bleeding-edge branch. Is it not https://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm.git/log/?h=bleeding-edge
Apologize for the confusion.
--Lina
Rafael J. Wysocki
maintainerQuoted 23 lines · Lina Iyer
Quoted 21 lines · Rafael J. Wysocki
Quoted 19 lines · Lina Iyer
Quoted 8 lines · Rafael J. Wysocki
Quoted 7 lines · Lina Iyer
To enable better debug of PM domains, let's keep a track of the success and rejections in entering each domain idle state.
This statistics is exported in debugfs when reading the
idle_statesnode, associated with each PM domain.Quoted 8 lines
Quoted 4 lines
Signed-off-by Lina Iyer <[email protected]>---
Changes in v3:
- Rebased on top of mainlineI still needed to rebase it to apply it to my tree, so please double check the result in the bleeding-edge branch.
Okay, will rebase on that branch and post shortly.
Quoted 7 lines
Quoted 3 lines
No need, it's been applied already, just please check the result in bleeding-edge.
I think I may have the wrong bleeding-edge branch. Is it not
https://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm.git/log/?h=bleeding-edgeApologize for the confusion.
Yes, it is now. :-)
It was not pushed out before, sorry.
Quoted 27 lines · Rafael J. Wysocki
Quoted 26 lines · Lina Iyer
Quoted 24 lines · Rafael J. Wysocki
Quoted 15 lines · Lina Iyer
Quoted 13 lines · Rafael J. Wysocki
Quoted 11 lines · Lina Iyer
To enable better debug of PM domains, let's keep a track of the success and rejections in entering each domain idle state.
This statistics is exported in debugfs when reading the
idle_statesnode, associated with each PM domain.Signed-off-by Lina Iyer <[email protected]>---
Changes in v3:
- Rebased on top of mainlineQuoted 4 lines
Quoted 3 lines
I still needed to rebase it to apply it to my tree, so please double check the result in the bleeding-edge branch.
Okay, will rebase on that branch and post shortly.
No need, it's been applied already, just please check the result in bleeding-edge.
Quoted 8 lines
Quoted 4 lines
I think I may have the wrong bleeding-edge branch. Is it not
https://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm.git/log/?h=bleeding-edgeApologize for the confusion.
Yes, it is now. :-)
It was not pushed out before, sorry.
Thanks, now I see it and looks good to me.
--Lina