From: Thomas Gleixner <tglx@linutronix.de>
To: LKML <linux-kernel@vger.kernel.org>
Cc: Rafael Wysocki <rjw@sisk.pl>,
x86@kernel.org, Peter Zijlstra <peterz@infradead.org>,
linux-pm@vger.kernel.org,
Srinivas Pandruvada <srinivas.pandruvada@intel.com>,
Jacob Pan <jacob.jun.pan@linux.intel.com>
Subject: [patch 1/5] powercap/intel_rapl: Add missing domain data update on hotplug
Date: Tue, 22 Nov 2016 21:15:58 -0000 [thread overview]
Message-ID: <20161122211438.432984735@linutronix.de> (raw)
In-Reply-To: 20161122210518.079483154@linutronix.de
[-- Attachment #1: powercapintel_rapl_Add_missing_domain_data_update_on_hotplug.patch --]
[-- Type: text/plain, Size: 3602 bytes --]
The domain data of packages is only updated at init time, but new packages
created by hotplug miss that treatment.
Add it there and remove the global update at init time, because it's now
obsolete.
The more interesting question is why rapl_update_domain_data() exists at
all as nothing ever uses that data.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
drivers/powercap/intel_rapl.c | 42 ++++++++++++++++++------------------------
1 file changed, 18 insertions(+), 24 deletions(-)
--- a/drivers/powercap/intel_rapl.c
+++ b/drivers/powercap/intel_rapl.c
@@ -1164,24 +1164,20 @@ static const struct x86_cpu_id rapl_ids[
};
MODULE_DEVICE_TABLE(x86cpu, rapl_ids);
-/* read once for all raw primitive data for all packages, domains */
-static void rapl_update_domain_data(void)
+/* Read once for all raw primitive data for domains */
+static void rapl_update_domain_data(struct rapl_package *rp)
{
int dmn, prim;
u64 val;
- struct rapl_package *rp;
- list_for_each_entry(rp, &rapl_packages, plist) {
- for (dmn = 0; dmn < rp->nr_domains; dmn++) {
- pr_debug("update package %d domain %s data\n", rp->id,
- rp->domains[dmn].name);
- /* exclude non-raw primitives */
- for (prim = 0; prim < NR_RAW_PRIMITIVES; prim++)
- if (!rapl_read_data_raw(&rp->domains[dmn], prim,
- rpi[prim].unit,
- &val))
- rp->domains[dmn].rdd.primitives[prim] =
- val;
+ for (dmn = 0; dmn < rp->nr_domains; dmn++) {
+ pr_debug("update package %d domain %s data\n", rp->id,
+ rp->domains[dmn].name);
+ /* exclude non-raw primitives */
+ for (prim = 0; prim < NR_RAW_PRIMITIVES; prim++) {
+ if (!rapl_read_data_raw(&rp->domains[dmn], prim,
+ rpi[prim].unit, &val))
+ rp->domains[dmn].rdd.primitives[prim] = val;
}
}
@@ -1234,10 +1230,12 @@ static int rapl_unregister_powercap(void
static int rapl_package_register_powercap(struct rapl_package *rp)
{
struct rapl_domain *rd;
- int ret = 0;
char dev_name[17]; /* max domain name = 7 + 1 + 8 for int + 1 for null*/
struct powercap_zone *power_zone = NULL;
- int nr_pl;
+ int nr_pl, ret;;
+
+ /* Update the domain data of the new package */
+ rapl_update_domain_data(rp);
/* first we register package domain as the parent zone*/
for (rd = rp->domains; rd < rp->domains + rp->nr_domains; rd++) {
@@ -1257,8 +1255,7 @@ static int rapl_package_register_powerca
if (IS_ERR(power_zone)) {
pr_debug("failed to register package, %d\n",
rp->id);
- ret = PTR_ERR(power_zone);
- goto exit_package;
+ return PTR_ERR(power_zone);
}
/* track parent zone in per package/socket data */
rp->power_zone = power_zone;
@@ -1268,8 +1265,7 @@ static int rapl_package_register_powerca
}
if (!power_zone) {
pr_err("no package domain found, unknown topology!\n");
- ret = -ENODEV;
- goto exit_package;
+ return -ENODEV;
}
/* now register domains as children of the socket/package*/
for (rd = rp->domains; rd < rp->domains + rp->nr_domains; rd++) {
@@ -1290,9 +1286,8 @@ static int rapl_package_register_powerca
goto err_cleanup;
}
}
+ return 0;
-exit_package:
- return ret;
err_cleanup:
/* clean up previously initialized domains within the package if we
* failed after the first domain setup.
@@ -1357,8 +1352,7 @@ static int rapl_register_powercap(void)
pr_debug("failed to register powercap control_type.\n");
return PTR_ERR(control_type);
}
- /* read the initial data */
- rapl_update_domain_data();
+
list_for_each_entry(rp, &rapl_packages, plist)
if (rapl_package_register_powercap(rp))
goto err_cleanup_package;
next prev parent reply other threads:[~2016-11-22 21:18 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-11-22 21:15 [patch 0/5] powercap/intel_rapl: Fixes, hotplug conversion and simplifcation Thomas Gleixner
2016-11-22 21:15 ` Thomas Gleixner [this message]
2016-11-23 1:22 ` [patch 1/5] powercap/intel_rapl: Add missing domain data update on hotplug Jacob Pan
2016-11-22 21:15 ` [patch 2/5] powercap/intel_rapl: Propagate error code when registration fails Thomas Gleixner
2016-11-22 21:16 ` [patch 3/5] powercap/intel rapl: Convert to hotplug state machine Thomas Gleixner
2016-11-22 21:16 ` [patch 4/5] powercap/intel_rapl: Cleanup duplicated init code Thomas Gleixner
2016-11-22 21:16 ` [patch 5/5] powercap/intel_rapl: Track active CPUs internally Thomas Gleixner
2016-11-23 19:06 ` [patch 0/5] powercap/intel_rapl: Fixes, hotplug conversion and simplifcation Jacob Pan
2016-11-23 21:12 ` Rafael J. Wysocki
2016-11-24 8:33 ` Thomas Gleixner
2016-11-24 21:04 ` Rafael J. Wysocki
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=20161122211438.432984735@linutronix.de \
--to=tglx@linutronix.de \
--cc=jacob.jun.pan@linux.intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=peterz@infradead.org \
--cc=rjw@sisk.pl \
--cc=srinivas.pandruvada@intel.com \
--cc=x86@kernel.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).