From: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
To: "Sun, XinX" <xinx.sun@intel.com>,
"rjw@rjwysocki.net" <rjw@rjwysocki.net>,
"jacob.jun.pan@linux.intel.com" <jacob.jun.pan@linux.intel.com>
Cc: "Han, Zhen" <zhen.han@intel.com>,
"Wang, ChaoX M" <chaox.m.wang@intel.com>,
"linux-pm@vger.kernel.org" <linux-pm@vger.kernel.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH] powercap: add suspend and resume mechanism for SOC power limit
Date: Tue, 09 Jan 2018 22:21:09 -0800 [thread overview]
Message-ID: <1515565269.585.30.camel@linux.intel.com> (raw)
In-Reply-To: <29BA90D9533CD34EA40DF8A796ED93C30409C1B1@CDSMSX104.ccr.corp.intel.com>
On Wed, 2018-01-10 at 01:53 +0000, Sun, XinX wrote:
> According to Rafael's comment.
> >
> > There is a formal issue here.
> > We need a Signed-off-by: tag from Zhen Han too.
> I changed Signed-off in commit message.
>
This is not the correct procedure to do such things after sending the
patch.
Basically you can change prefix to "[PATCH]" to "[Update][PATCH]".
Then after "---" add change history.
E.g.
Signed-off-by: Zhen Han <zhen.han@intel.com>> > ---
---
Change:
Fixed the signed-off tag.
Thanks,
Srinivas
> Thanks & BR,
> Sun Xin
>
> -----Original Message-----
> From: Srinivas Pandruvada [mailto:srinivas.pandruvada@linux.intel.com
> ]
> Sent: Wednesday, January 10, 2018 9:47 AM
> To: Sun, XinX <xinx.sun@intel.com>; rjw@rjwysocki.net; jacob.jun.pan@
> linux.intel.com
> Cc: Han, Zhen <zhen.han@intel.com>; Wang, ChaoX M <chaox.m.wang@intel
> .com>; linux-pm@vger.kernel.org; linux-kernel@vger.kernel.org
> Subject: Re: [PATCH] powercap: add suspend and resume mechanism for
> SOC power limit
>
> On Wed, 2018-01-10 at 08:38 +0800, xinx.sun@intel.com wrote:
> >
> > From: Zhen Han <zhen.han@intel.com>
> >
> > PL1 and PL2 could be throlled or de-throttled by Thermal management
> > to
> > control SOC temperature.
> > However, currently, their value will be reset to default value
> > after
> > once system suspend and resume.
> > Add pm_notifier to save PL1, PL2 before system suspect and restore
> > PL1, PL2 after system resume.
> >
> Why are you posting this patch again?
> If there any change from your prior post?
>
> Thanks,
> Srinivas
>
> >
> > Signed-off-by: Zhen Han <zhen.han@intel.com>
> > ---
> > drivers/powercap/intel_rapl.c | 97
> > +++++++++++++++++++++++++++++++++++++++++++
> > 1 file changed, 97 insertions(+)
> >
> > diff --git a/drivers/powercap/intel_rapl.c
> > b/drivers/powercap/intel_rapl.c index d1694f1..0188cff 100644
> > --- a/drivers/powercap/intel_rapl.c
> > +++ b/drivers/powercap/intel_rapl.c
> > @@ -29,6 +29,7 @@
> > #include <linux/sysfs.h>
> > #include <linux/cpu.h>
> > #include <linux/powercap.h>
> > +#include <linux/suspend.h>
> > #include <asm/iosf_mbi.h>
> >
> > #include <asm/processor.h>
> > @@ -155,6 +156,7 @@ struct rapl_power_limit {
> > int prim_id; /* primitive ID used to enable */
> > struct rapl_domain *domain;
> > const char *name;
> > + u64 last_power_limit;
> > };
> >
> > static const char pl1_name[] = "long_term"; @@ -1533,6 +1535,92
> > @@
> > static int rapl_cpu_down_prep(unsigned int
> > cpu)
> >
> > static enum cpuhp_state pcap_rapl_online;
> >
> > +static void power_limit_state_save(void) {
> > + struct rapl_package *rp;
> > + struct rapl_domain *rd;
> > + int nr_pl, ret, i;
> > +
> > + get_online_cpus();
> > + list_for_each_entry(rp, &rapl_packages, plist) {
> > + if (!rp->power_zone)
> > + continue;
> > + rd = power_zone_to_rapl_domain(rp->power_zone);
> > + nr_pl = find_nr_power_limit(rd);
> > + for (i = 0; i < nr_pl; i++) {
> > + switch (rd->rpl[i].prim_id) {
> > + case PL1_ENABLE:
> > + ret = rapl_read_data_raw(rd,
> > + POWER_LIMIT1,
> > + true,
> > + &rd-
> > >
> > > rpl[i].last_power_limit);
> > + if (ret)
> > + rd-
> > >rpl[i].last_power_limit
> > = 0;
> > + break;
> > + case PL2_ENABLE:
> > + ret = rapl_read_data_raw(rd,
> > + POWER_LIMIT2,
> > + true,
> > + &rd-
> > >
> > > rpl[i].last_power_limit);
> > + if (ret)
> > + rd-
> > >rpl[i].last_power_limit
> > = 0;
> > + break;
> > + }
> > + }
> > + }
> > + put_online_cpus();
> > +}
> > +
> > +static void power_limit_state_restore(void) {
> > + struct rapl_package *rp;
> > + struct rapl_domain *rd;
> > + int nr_pl, i;
> > +
> > + get_online_cpus();
> > + list_for_each_entry(rp, &rapl_packages, plist) {
> > + if (!rp->power_zone)
> > + continue;
> > + rd = power_zone_to_rapl_domain(rp->power_zone);
> > + nr_pl = find_nr_power_limit(rd);
> > + for (i = 0; i < nr_pl; i++) {
> > + switch (rd->rpl[i].prim_id) {
> > + case PL1_ENABLE:
> > + if (rd->rpl[i].last_power_limit)
> > + rapl_write_data_raw(rd,
> > + POWER_LIMIT1,
> > + rd-
> > >
> > > rpl[i].last_power_limit);
> > + break;
> > + case PL2_ENABLE:
> > + if (rd->rpl[i].last_power_limit)
> > + rapl_write_data_raw(rd,
> > + POWER_LIMIT2,
> > + rd-
> > >
> > > rpl[i].last_power_limit);
> > + break;
> > + }
> > + }
> > + }
> > + put_online_cpus();
> > +}
> > +
> > +static int rapl_pm_callback(struct notifier_block *nb,
> > + unsigned long mode, void *_unused)
> > +{
> > + switch (mode) {
> > + case PM_SUSPEND_PREPARE:
> > + power_limit_state_save();
> > + break;
> > + case PM_POST_SUSPEND:
> > + power_limit_state_restore();
> > + break;
> > + }
> > + return NOTIFY_OK;
> > +}
> > +
> > +static struct notifier_block rapl_pm_notifier = {
> > + .notifier_call = rapl_pm_callback,
> > +};
> > +
> > static int __init rapl_init(void)
> > {
> > const struct x86_cpu_id *id;
> > @@ -1560,8 +1648,16 @@ static int __init rapl_init(void)
> >
> > /* Don't bail out if PSys is not supported */
> > rapl_register_psys();
> > +
> > + ret = register_pm_notifier(&rapl_pm_notifier);
> > + if (ret)
> > + goto err_unreg_all;
> > +
> > return 0;
> >
> > +err_unreg_all:
> > + cpuhp_remove_state(pcap_rapl_online);
> > +
> > err_unreg:
> > rapl_unregister_powercap();
> > return ret;
> > @@ -1569,6 +1665,7 @@ static int __init rapl_init(void)
> >
> > static void __exit rapl_exit(void)
> > {
> > + unregister_pm_notifier(&rapl_pm_notifier);
> > cpuhp_remove_state(pcap_rapl_online);
> > rapl_unregister_powercap();
> > }
next prev parent reply other threads:[~2018-01-10 6:21 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-01-10 0:38 [PATCH] powercap: add suspend and resume mechanism for SOC power limit xinx.sun
2018-01-10 1:47 ` Srinivas Pandruvada
2018-01-10 1:53 ` Sun, XinX
2018-01-10 6:21 ` Srinivas Pandruvada [this message]
2018-01-10 7:00 ` Sun, XinX
-- strict thread matches above, loose matches on Subject: below --
2018-01-09 8:25 xinx.sun
2018-01-09 11:39 ` Rafael J. Wysocki
2018-01-09 19:00 ` Srinivas Pandruvada
2018-01-10 0:21 ` Rafael J. Wysocki
2018-01-10 0:23 ` Sun, XinX
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1515565269.585.30.camel@linux.intel.com \
--to=srinivas.pandruvada@linux.intel.com \
--cc=chaox.m.wang@intel.com \
--cc=jacob.jun.pan@linux.intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=rjw@rjwysocki.net \
--cc=xinx.sun@intel.com \
--cc=zhen.han@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.