From: Guenter Roeck <linux@roeck-us.net>
To: "Huang Rui" <ray.huang@amd.com>, "Borislav Petkov" <bp@suse.de>,
"Jean Delvare" <jdelvare@suse.de>,
"Andy Lutomirski" <luto@amacapital.net>,
"Andreas Herrmann" <herrmann.der.user@gmail.com>,
"Thomas Gleixner" <tglx@linutronix.de>,
"Peter Zijlstra" <peterz@infradead.org>,
"Ingo Molnar" <mingo@kernel.org>,
"Rafael J. Wysocki" <rjw@rjwysocki.net>,
"Len Brown" <lenb@kernel.org>,
"John Stultz" <john.stultz@linaro.org>,
"Frédéric Weisbecker" <fweisbec@gmail.com>
Cc: lm-sensors@lm-sensors.org, linux-kernel@vger.kernel.org,
x86@kernel.org,
Andreas Herrmann <herrmann.der.user@googlemail.com>,
Aravind Gopalakrishnan <Aravind.Gopalakrishnan@amd.com>,
Borislav Petkov <bp@alien8.de>,
Fengguang Wu <fengguang.wu@intel.com>,
Aaron Lu <aaron.lu@intel.com>, Tony Li <tony.li@amd.com>
Subject: Re: [lm-sensors] [PATCH 03/15] hwmon, fam15h_power: refactor attributes for dynamically added
Date: Thu, 27 Aug 2015 14:46:18 +0000 [thread overview]
Message-ID: <55DF22BA.7080306@roeck-us.net> (raw)
In-Reply-To: <1440662866-28716-4-git-send-email-ray.huang@amd.com>
On 08/27/2015 01:07 AM, Huang Rui wrote:
> Attributes depend on the CPU model the driver gets loaded on.
> Therefore, add those attributes dynamically at init time. This is more
> flexible to control the different attributes on different platforms.
>
> Signed-off-by: Huang Rui <ray.huang@amd.com>
> ---
> drivers/hwmon/fam15h_power.c | 49 +++++++++++++++++++++++++++-----------------
> 1 file changed, 30 insertions(+), 19 deletions(-)
>
> diff --git a/drivers/hwmon/fam15h_power.c b/drivers/hwmon/fam15h_power.c
> index 820adf1..65ffb06 100644
> --- a/drivers/hwmon/fam15h_power.c
> +++ b/drivers/hwmon/fam15h_power.c
> @@ -41,6 +41,8 @@ MODULE_LICENSE("GPL");
> #define REG_TDP_RUNNING_AVERAGE 0xe0
> #define REG_TDP_LIMIT3 0xe8
>
> +#define FAM15H_MIN_POWER_GROUPS 2
This should be something like FAM15H_MIN_NUM_ATTRS.
There is only one group with a variable number of attributes.
> +
> struct fam15h_power_data {
> struct pci_dev *pdev;
> unsigned int tdp_to_watts;
> @@ -93,29 +95,35 @@ static ssize_t show_power_crit(struct device *dev,
> }
> static DEVICE_ATTR(power1_crit, S_IRUGO, show_power_crit, NULL);
>
> -static umode_t fam15h_power_is_visible(struct kobject *kobj,
> - struct attribute *attr,
> - int index)
> +static struct attribute_group fam15h_power_group;
> +__ATTRIBUTE_GROUPS(fam15h_power);
> +
> +static int fam15h_power_init_attrs(struct pci_dev *pdev)
> {
> - /* power1_input is only reported for Fam15h, Models 00h-0fh */
> - if (attr = &dev_attr_power1_input.attr &&
> - (boot_cpu_data.x86 != 0x15 || boot_cpu_data.x86_model > 0xf))
> - return 0;
> + int n = FAM15H_MIN_POWER_GROUPS;
> + struct attribute **fam15h_power_attrs;
>
> - return attr->mode;
> -}
> + if (boot_cpu_data.x86 = 0x15 && boot_cpu_data.x86_model <= 0xf)
> + n += 1;
>
> -static struct attribute *fam15h_power_attrs[] = {
> - &dev_attr_power1_input.attr,
> - &dev_attr_power1_crit.attr,
> - NULL
> -};
> + fam15h_power_attrs = devm_kcalloc(&pdev->dev, n,
> + sizeof(*fam15h_power_attrs),
> + GFP_KERNEL);
>
> -static const struct attribute_group fam15h_power_group = {
> - .attrs = fam15h_power_attrs,
> - .is_visible = fam15h_power_is_visible,
> -};
> -__ATTRIBUTE_GROUPS(fam15h_power);
> + if (!fam15h_power_attrs) {
> + dev_err(&pdev->dev, "failed to alloc fam15h_power_attrs\n");
The infrastructure already dumps a message for memory allocation errors.
No need for another one.
> + return -ENOMEM;
> + }
> +
> + n = 0;
> + fam15h_power_attrs[n++] = &dev_attr_power1_crit.attr;
> + if (boot_cpu_data.x86 = 0x15 && boot_cpu_data.x86_model <= 0xf)
> + fam15h_power_attrs[n++] = &dev_attr_power1_input.attr;
> +
> + fam15h_power_group.attrs = fam15h_power_attrs;
> +
Assuming this will be called for each CPU in a multi-CPU system,
this will be overwritten each time a new CPU comes online.
fam15h_power_group and fam15h_power_groups probably need to be moved
into fam15h_power_data to avoid that. In essence, there should only
be read-only static variables. Everything else should be allocated.
> + return 0;
> +}
>
> static bool should_load_on_this_node(struct pci_dev *f4)
> {
> @@ -221,6 +229,9 @@ static int fam15h_power_probe(struct pci_dev *pdev,
> if (!data)
> return -ENOMEM;
>
> + if (fam15h_power_init_attrs(pdev))
> + return -ENOMEM;
This should return the error code from fam15h_power_init_attrs().
> +
> fam15h_power_init_data(pdev, data);
> data->pdev = pdev;
>
>
_______________________________________________
lm-sensors mailing list
lm-sensors@lm-sensors.org
http://lists.lm-sensors.org/mailman/listinfo/lm-sensors
WARNING: multiple messages have this Message-ID (diff)
From: Guenter Roeck <linux@roeck-us.net>
To: "Huang Rui" <ray.huang@amd.com>, "Borislav Petkov" <bp@suse.de>,
"Jean Delvare" <jdelvare@suse.de>,
"Andy Lutomirski" <luto@amacapital.net>,
"Andreas Herrmann" <herrmann.der.user@gmail.com>,
"Thomas Gleixner" <tglx@linutronix.de>,
"Peter Zijlstra" <peterz@infradead.org>,
"Ingo Molnar" <mingo@kernel.org>,
"Rafael J. Wysocki" <rjw@rjwysocki.net>,
"Len Brown" <lenb@kernel.org>,
"John Stultz" <john.stultz@linaro.org>,
"Frédéric Weisbecker" <fweisbec@gmail.com>
Cc: lm-sensors@lm-sensors.org, linux-kernel@vger.kernel.org,
x86@kernel.org,
Andreas Herrmann <herrmann.der.user@googlemail.com>,
Aravind Gopalakrishnan <Aravind.Gopalakrishnan@amd.com>,
Borislav Petkov <bp@alien8.de>,
Fengguang Wu <fengguang.wu@intel.com>,
Aaron Lu <aaron.lu@intel.com>, Tony Li <tony.li@amd.com>
Subject: Re: [PATCH 03/15] hwmon, fam15h_power: refactor attributes for dynamically added
Date: Thu, 27 Aug 2015 07:46:18 -0700 [thread overview]
Message-ID: <55DF22BA.7080306@roeck-us.net> (raw)
In-Reply-To: <1440662866-28716-4-git-send-email-ray.huang@amd.com>
On 08/27/2015 01:07 AM, Huang Rui wrote:
> Attributes depend on the CPU model the driver gets loaded on.
> Therefore, add those attributes dynamically at init time. This is more
> flexible to control the different attributes on different platforms.
>
> Signed-off-by: Huang Rui <ray.huang@amd.com>
> ---
> drivers/hwmon/fam15h_power.c | 49 +++++++++++++++++++++++++++-----------------
> 1 file changed, 30 insertions(+), 19 deletions(-)
>
> diff --git a/drivers/hwmon/fam15h_power.c b/drivers/hwmon/fam15h_power.c
> index 820adf1..65ffb06 100644
> --- a/drivers/hwmon/fam15h_power.c
> +++ b/drivers/hwmon/fam15h_power.c
> @@ -41,6 +41,8 @@ MODULE_LICENSE("GPL");
> #define REG_TDP_RUNNING_AVERAGE 0xe0
> #define REG_TDP_LIMIT3 0xe8
>
> +#define FAM15H_MIN_POWER_GROUPS 2
This should be something like FAM15H_MIN_NUM_ATTRS.
There is only one group with a variable number of attributes.
> +
> struct fam15h_power_data {
> struct pci_dev *pdev;
> unsigned int tdp_to_watts;
> @@ -93,29 +95,35 @@ static ssize_t show_power_crit(struct device *dev,
> }
> static DEVICE_ATTR(power1_crit, S_IRUGO, show_power_crit, NULL);
>
> -static umode_t fam15h_power_is_visible(struct kobject *kobj,
> - struct attribute *attr,
> - int index)
> +static struct attribute_group fam15h_power_group;
> +__ATTRIBUTE_GROUPS(fam15h_power);
> +
> +static int fam15h_power_init_attrs(struct pci_dev *pdev)
> {
> - /* power1_input is only reported for Fam15h, Models 00h-0fh */
> - if (attr == &dev_attr_power1_input.attr &&
> - (boot_cpu_data.x86 != 0x15 || boot_cpu_data.x86_model > 0xf))
> - return 0;
> + int n = FAM15H_MIN_POWER_GROUPS;
> + struct attribute **fam15h_power_attrs;
>
> - return attr->mode;
> -}
> + if (boot_cpu_data.x86 == 0x15 && boot_cpu_data.x86_model <= 0xf)
> + n += 1;
>
> -static struct attribute *fam15h_power_attrs[] = {
> - &dev_attr_power1_input.attr,
> - &dev_attr_power1_crit.attr,
> - NULL
> -};
> + fam15h_power_attrs = devm_kcalloc(&pdev->dev, n,
> + sizeof(*fam15h_power_attrs),
> + GFP_KERNEL);
>
> -static const struct attribute_group fam15h_power_group = {
> - .attrs = fam15h_power_attrs,
> - .is_visible = fam15h_power_is_visible,
> -};
> -__ATTRIBUTE_GROUPS(fam15h_power);
> + if (!fam15h_power_attrs) {
> + dev_err(&pdev->dev, "failed to alloc fam15h_power_attrs\n");
The infrastructure already dumps a message for memory allocation errors.
No need for another one.
> + return -ENOMEM;
> + }
> +
> + n = 0;
> + fam15h_power_attrs[n++] = &dev_attr_power1_crit.attr;
> + if (boot_cpu_data.x86 == 0x15 && boot_cpu_data.x86_model <= 0xf)
> + fam15h_power_attrs[n++] = &dev_attr_power1_input.attr;
> +
> + fam15h_power_group.attrs = fam15h_power_attrs;
> +
Assuming this will be called for each CPU in a multi-CPU system,
this will be overwritten each time a new CPU comes online.
fam15h_power_group and fam15h_power_groups probably need to be moved
into fam15h_power_data to avoid that. In essence, there should only
be read-only static variables. Everything else should be allocated.
> + return 0;
> +}
>
> static bool should_load_on_this_node(struct pci_dev *f4)
> {
> @@ -221,6 +229,9 @@ static int fam15h_power_probe(struct pci_dev *pdev,
> if (!data)
> return -ENOMEM;
>
> + if (fam15h_power_init_attrs(pdev))
> + return -ENOMEM;
This should return the error code from fam15h_power_init_attrs().
> +
> fam15h_power_init_data(pdev, data);
> data->pdev = pdev;
>
>
next prev parent reply other threads:[~2015-08-27 14:46 UTC|newest]
Thread overview: 118+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-08-27 8:07 [lm-sensors] [PATCH 00/15] hwmon, fam15h_power: introduce an accumulated power reporting algorithm Huang Rui
2015-08-27 8:07 ` Huang Rui
2015-08-27 8:07 ` [lm-sensors] [PATCH 01/15] hwmon, fam15h_power: add support for AMD Carrizo Huang Rui
2015-08-27 8:07 ` Huang Rui
2015-08-27 14:35 ` [lm-sensors] " Guenter Roeck
2015-08-27 14:35 ` Guenter Roeck
2015-08-27 8:07 ` [lm-sensors] [PATCH 02/15] hwmon, fam15h_power: rename fam15h_power_is_internal_node0 function Huang Rui
2015-08-27 8:07 ` Huang Rui
2015-08-27 14:35 ` [lm-sensors] " Guenter Roeck
2015-08-27 14:35 ` Guenter Roeck
2015-08-27 8:07 ` [lm-sensors] [PATCH 03/15] hwmon, fam15h_power: refactor attributes for dynamically added Huang Rui
2015-08-27 8:07 ` Huang Rui
2015-08-27 14:46 ` Guenter Roeck [this message]
2015-08-27 14:46 ` Guenter Roeck
2015-08-28 10:05 ` [lm-sensors] " Huang Rui
2015-08-28 10:05 ` Huang Rui
2015-08-27 8:07 ` [lm-sensors] [PATCH 04/15] hwmon, fam15h_power: update running_avg_capture bit field to 28 Huang Rui
2015-08-27 8:07 ` Huang Rui
2015-08-27 14:48 ` [lm-sensors] " Guenter Roeck
2015-08-27 14:48 ` Guenter Roeck
2015-08-27 8:07 ` [lm-sensors] [PATCH 05/15] hwmon, fam15h_power: enable power1_input on AMD Carrizo Huang Rui
2015-08-27 8:07 ` Huang Rui
2015-08-27 14:50 ` [lm-sensors] " Guenter Roeck
2015-08-27 14:50 ` Guenter Roeck
2015-08-27 8:07 ` [lm-sensors] [PATCH 06/15] hwmon, fam15h_power: add documentation for new processors support Huang Rui
2015-08-27 8:07 ` Huang Rui
2015-08-27 14:51 ` [lm-sensors] " Guenter Roeck
2015-08-27 14:51 ` Guenter Roeck
2015-08-27 8:07 ` [lm-sensors] [PATCH 07/15] hwmon, fam15h_power: add ratio of Tsample to the PTSC period Huang Rui
2015-08-27 8:07 ` Huang Rui
2015-08-27 14:54 ` [lm-sensors] " Guenter Roeck
2015-08-27 14:54 ` Guenter Roeck
2015-08-27 8:07 ` [lm-sensors] [PATCH 08/15] hwmon, fam15h_power: add max compute unit accumulated power Huang Rui
2015-08-27 8:07 ` Huang Rui
2015-08-27 14:56 ` [lm-sensors] " Guenter Roeck
2015-08-27 14:56 ` Guenter Roeck
2015-08-27 8:07 ` [lm-sensors] [PATCH 09/15] x86, amd: add accessor for number of cores per compute unit Huang Rui
2015-08-27 8:07 ` Huang Rui
2015-08-27 17:27 ` [lm-sensors] " Guenter Roeck
2015-08-27 17:27 ` Guenter Roeck
2015-08-28 10:28 ` [lm-sensors] " Huang Rui
2015-08-28 10:28 ` Huang Rui
2015-08-28 6:48 ` [lm-sensors] " Borislav Petkov
2015-08-28 6:48 ` Borislav Petkov
2015-08-28 8:00 ` [lm-sensors] " Guenter Roeck
2015-08-28 8:00 ` Guenter Roeck
2015-08-28 8:04 ` [lm-sensors] " Ingo Molnar
2015-08-28 8:04 ` Ingo Molnar
2015-08-28 8:56 ` [lm-sensors] " Borislav Petkov
2015-08-28 8:56 ` Borislav Petkov
2015-08-28 10:18 ` [lm-sensors] " Huang Rui
2015-08-28 10:18 ` Huang Rui
2015-08-29 9:19 ` [lm-sensors] " Ingo Molnar
2015-08-29 9:19 ` Ingo Molnar
2015-08-30 15:53 ` [lm-sensors] " Borislav Petkov
2015-08-30 15:53 ` Borislav Petkov
2015-08-31 8:38 ` [lm-sensors] " Peter Zijlstra
2015-08-31 8:38 ` Peter Zijlstra
2015-08-31 13:26 ` [lm-sensors] " Guenter Roeck
2015-08-31 13:26 ` Guenter Roeck
2015-08-31 13:38 ` [lm-sensors] " Peter Zijlstra
2015-08-31 13:38 ` Peter Zijlstra
2015-08-31 13:53 ` [lm-sensors] " Guenter Roeck
2015-08-31 13:53 ` Guenter Roeck
2015-08-31 14:57 ` [lm-sensors] " Peter Zijlstra
2015-08-31 14:57 ` Peter Zijlstra
2015-08-31 15:11 ` [lm-sensors] " Guenter Roeck
2015-08-31 15:11 ` Guenter Roeck
2015-08-31 16:06 ` [lm-sensors] " Borislav Petkov
2015-08-31 16:06 ` Borislav Petkov
2015-08-31 16:19 ` [lm-sensors] " Guenter Roeck
2015-08-31 16:19 ` Guenter Roeck
2015-08-31 20:44 ` [lm-sensors] " Peter Zijlstra
2015-08-31 20:44 ` Peter Zijlstra
2015-08-31 21:24 ` [lm-sensors] " Guenter Roeck
2015-08-31 21:24 ` Guenter Roeck
2015-09-01 15:56 ` [lm-sensors] " Borislav Petkov
2015-09-01 15:56 ` Borislav Petkov
2015-09-01 16:06 ` [lm-sensors] " Guenter Roeck
2015-09-01 16:06 ` Guenter Roeck
2015-08-27 8:07 ` [lm-sensors] [PATCH 10/15] hwmon, fam15h_power: add compute unit accumulated power Huang Rui
2015-08-27 8:07 ` Huang Rui
2015-08-28 8:03 ` [lm-sensors] " Ingo Molnar
2015-08-28 8:03 ` Ingo Molnar
2015-08-28 10:42 ` [lm-sensors] " Huang Rui
2015-08-28 10:42 ` Huang Rui
2015-08-27 8:07 ` [lm-sensors] [PATCH 11/15] hwmon, fam15h_power: add ptsc counter value for " Huang Rui
2015-08-27 8:07 ` Huang Rui
2015-08-27 8:07 ` [lm-sensors] [PATCH 12/15] hwmon, fam15h_power: introduce a cpu accumulated power reporting algorith Huang Rui
2015-08-27 8:07 ` [PATCH 12/15] hwmon, fam15h_power: introduce a cpu accumulated power reporting algorithm Huang Rui
2015-08-27 17:30 ` [lm-sensors] [PATCH 12/15] hwmon, fam15h_power: introduce a cpu accumulated power reporting algo Guenter Roeck
2015-08-27 17:30 ` [PATCH 12/15] hwmon, fam15h_power: introduce a cpu accumulated power reporting algorithm Guenter Roeck
2015-08-28 10:45 ` [lm-sensors] [PATCH 12/15] hwmon, fam15h_power: introduce a cpu accumulated power reporting algo Huang Rui
2015-08-28 10:45 ` [PATCH 12/15] hwmon, fam15h_power: introduce a cpu accumulated power reporting algorithm Huang Rui
2015-08-28 14:05 ` [lm-sensors] [PATCH 12/15] hwmon, fam15h_power: introduce a cpu accumulated power reporting algo Guenter Roeck
2015-08-28 14:05 ` [PATCH 12/15] hwmon, fam15h_power: introduce a cpu accumulated power reporting algorithm Guenter Roeck
2015-08-31 4:16 ` [lm-sensors] [PATCH 12/15] hwmon, fam15h_power: introduce a cpu accumulated power reporting algo Huang Rui
2015-08-31 4:16 ` [PATCH 12/15] hwmon, fam15h_power: introduce a cpu accumulated power reporting algorithm Huang Rui
2015-08-31 4:30 ` [lm-sensors] [PATCH 12/15] hwmon, fam15h_power: introduce a cpu accumulated power reporting algo Guenter Roeck
2015-08-31 4:30 ` [PATCH 12/15] hwmon, fam15h_power: introduce a cpu accumulated power reporting algorithm Guenter Roeck
2015-08-31 13:11 ` [lm-sensors] [PATCH 12/15] hwmon, fam15h_power: introduce a cpu accumulated power reporting algo Huang Rui
2015-08-31 13:11 ` [PATCH 12/15] hwmon, fam15h_power: introduce a cpu accumulated power reporting algorithm Huang Rui
2015-08-31 13:25 ` [lm-sensors] [PATCH 12/15] hwmon, fam15h_power: introduce a cpu accumulated power reporting algo Peter Zijlstra
2015-08-31 13:25 ` [PATCH 12/15] hwmon, fam15h_power: introduce a cpu accumulated power reporting algorithm Peter Zijlstra
2015-08-31 14:59 ` [lm-sensors] [PATCH 12/15] hwmon, fam15h_power: introduce a cpu accumulated power reporting algo Peter Zijlstra
2015-08-31 14:59 ` [PATCH 12/15] hwmon, fam15h_power: introduce a cpu accumulated power reporting algorithm Peter Zijlstra
2015-08-27 8:07 ` [lm-sensors] [PATCH 13/15] hwmon, fam15h_power: add documentation for previous TDP reporting Huang Rui
2015-08-27 8:07 ` Huang Rui
2015-08-27 8:07 ` [lm-sensors] [PATCH 14/15] hwmon, fam15h_power: add documentation for accumulated power algorithm Huang Rui
2015-08-27 8:07 ` Huang Rui
2015-08-27 8:07 ` [lm-sensors] [PATCH 15/15] MAINTAINERS: change the maintainer of fam15h_power driver Huang Rui
2015-08-27 8:07 ` Huang Rui
2015-08-29 16:33 ` [lm-sensors] [15/15] " Guenter Roeck
2015-08-29 16:33 ` Guenter Roeck
2015-08-31 1:11 ` [lm-sensors] " Huang Rui
2015-08-31 1:11 ` Huang Rui
2015-08-31 15:19 ` [lm-sensors] " Andreas Herrmann
2015-08-31 15:19 ` Andreas Herrmann
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=55DF22BA.7080306@roeck-us.net \
--to=linux@roeck-us.net \
--cc=Aravind.Gopalakrishnan@amd.com \
--cc=aaron.lu@intel.com \
--cc=bp@alien8.de \
--cc=bp@suse.de \
--cc=fengguang.wu@intel.com \
--cc=fweisbec@gmail.com \
--cc=herrmann.der.user@gmail.com \
--cc=herrmann.der.user@googlemail.com \
--cc=jdelvare@suse.de \
--cc=john.stultz@linaro.org \
--cc=lenb@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=lm-sensors@lm-sensors.org \
--cc=luto@amacapital.net \
--cc=mingo@kernel.org \
--cc=peterz@infradead.org \
--cc=ray.huang@amd.com \
--cc=rjw@rjwysocki.net \
--cc=tglx@linutronix.de \
--cc=tony.li@amd.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 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.