Message ID | 20241105153316.378-12-mario.limonciello@amd.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | Add support for binding ACPI platform profile to multiple drivers | expand |
Hi Mario, kernel test robot noticed the following build warnings: [auto build test WARNING on d68cb6023356af3bd3193983ad4ec03954a0b3e2] url: https://github.com/intel-lab-lkp/linux/commits/Mario-Limonciello/ACPI-platform-profile-Add-a-name-member-to-handlers/20241105-233922 base: d68cb6023356af3bd3193983ad4ec03954a0b3e2 patch link: https://lore.kernel.org/r/20241105153316.378-12-mario.limonciello%40amd.com patch subject: [PATCH v4 11/20] ACPI: platform_profile: Add choices attribute for class interface config: x86_64-rhel-8.3 (https://download.01.org/0day-ci/archive/20241106/202411060835.GlMKVSsy-lkp@intel.com/config) compiler: gcc-12 (Debian 12.2.0-14) 12.2.0 reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20241106/202411060835.GlMKVSsy-lkp@intel.com/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <lkp@intel.com> | Closes: https://lore.kernel.org/oe-kbuild-all/202411060835.GlMKVSsy-lkp@intel.com/ All warnings (new ones prefixed by >>): >> drivers/acpi/platform_profile.c:55: warning: Function parameter or struct member 'choices' not described in '_get_class_choices' vim +55 drivers/acpi/platform_profile.c 48 49 /** 50 * _get_class_choices - Get the available profile choices for a class device 51 * @dev: The class device 52 * Return: The available profile choices 53 */ 54 static int _get_class_choices(struct device *dev, unsigned long *choices) > 55 { 56 struct platform_profile_handler *handler; 57 int i; 58 59 scoped_cond_guard(mutex_intr, return -ERESTARTSYS, &profile_lock) { 60 handler = dev_get_drvdata(dev); 61 for_each_set_bit(i, handler->choices, PLATFORM_PROFILE_LAST) 62 *choices |= BIT(i); 63 } 64 65 return 0; 66 } 67
Am 05.11.24 um 16:33 schrieb Mario Limonciello: > The `choices` file will show all possible choices that a given platform > profile handler can support. > > Signed-off-by: Mario Limonciello <mario.limonciello@amd.com> > --- > drivers/acpi/platform_profile.c | 63 +++++++++++++++++++++++++++++++++ > 1 file changed, 63 insertions(+) > > diff --git a/drivers/acpi/platform_profile.c b/drivers/acpi/platform_profile.c > index 986bd636be226..e1b6569c4ee70 100644 > --- a/drivers/acpi/platform_profile.c > +++ b/drivers/acpi/platform_profile.c > @@ -25,6 +25,47 @@ static_assert(ARRAY_SIZE(profile_names) == PLATFORM_PROFILE_LAST); > > static DEFINE_IDR(platform_profile_minor_idr); > > +/** > + * _commmon_choices_show - Show the available profile choices > + * @choices: The available profile choices > + * @buf: The buffer to write to > + * Return: The number of bytes written > + */ > +static ssize_t _commmon_choices_show(unsigned long choices, char *buf) > +{ > + int i, len = 0; > + > + for_each_set_bit(i, &choices, PLATFORM_PROFILE_LAST) { > + if (len == 0) > + len += sysfs_emit_at(buf, len, "%s", profile_names[i]); > + else > + len += sysfs_emit_at(buf, len, " %s", profile_names[i]); > + } > + len += sysfs_emit_at(buf, len, "\n"); > + > + return len; > +} > + > +/** > + * _get_class_choices - Get the available profile choices for a class device > + * @dev: The class device > + * Return: The available profile choices > + */ > +static int _get_class_choices(struct device *dev, unsigned long *choices) > +{ > + struct platform_profile_handler *handler; > + int i; > + > + scoped_cond_guard(mutex_intr, return -ERESTARTSYS, &profile_lock) { > + handler = dev_get_drvdata(dev); > + for_each_set_bit(i, handler->choices, PLATFORM_PROFILE_LAST) > + *choices |= BIT(i); > + } > + > + return 0; > +} > + > + Please don't use multiple blank lines. Other than that: Reviewed-by: Armin Wolf <W_Armin@gmx.de> > /** > * name_show - Show the name of the profile handler > * @dev: The device > @@ -41,10 +82,32 @@ static ssize_t name_show(struct device *dev, > return sysfs_emit(buf, "%s\n", handler->name); > } > > +/** > + * choices_show - Show the available profile choices > + * @dev: The device > + * @attr: The attribute > + * @buf: The buffer to write to > + */ > +static ssize_t choices_show(struct device *dev, > + struct device_attribute *attr, > + char *buf) > +{ > + unsigned long choices = 0; > + int err; > + > + err = _get_class_choices(dev, &choices); > + if (err) > + return err; > + > + return _commmon_choices_show(choices, buf); > +} > + > > static DEVICE_ATTR_RO(name); > +static DEVICE_ATTR_RO(choices); > static struct attribute *profile_attrs[] = { > &dev_attr_name.attr, > + &dev_attr_choices.attr, > NULL > }; > ATTRIBUTE_GROUPS(profile);
diff --git a/drivers/acpi/platform_profile.c b/drivers/acpi/platform_profile.c index 986bd636be226..e1b6569c4ee70 100644 --- a/drivers/acpi/platform_profile.c +++ b/drivers/acpi/platform_profile.c @@ -25,6 +25,47 @@ static_assert(ARRAY_SIZE(profile_names) == PLATFORM_PROFILE_LAST); static DEFINE_IDR(platform_profile_minor_idr); +/** + * _commmon_choices_show - Show the available profile choices + * @choices: The available profile choices + * @buf: The buffer to write to + * Return: The number of bytes written + */ +static ssize_t _commmon_choices_show(unsigned long choices, char *buf) +{ + int i, len = 0; + + for_each_set_bit(i, &choices, PLATFORM_PROFILE_LAST) { + if (len == 0) + len += sysfs_emit_at(buf, len, "%s", profile_names[i]); + else + len += sysfs_emit_at(buf, len, " %s", profile_names[i]); + } + len += sysfs_emit_at(buf, len, "\n"); + + return len; +} + +/** + * _get_class_choices - Get the available profile choices for a class device + * @dev: The class device + * Return: The available profile choices + */ +static int _get_class_choices(struct device *dev, unsigned long *choices) +{ + struct platform_profile_handler *handler; + int i; + + scoped_cond_guard(mutex_intr, return -ERESTARTSYS, &profile_lock) { + handler = dev_get_drvdata(dev); + for_each_set_bit(i, handler->choices, PLATFORM_PROFILE_LAST) + *choices |= BIT(i); + } + + return 0; +} + + /** * name_show - Show the name of the profile handler * @dev: The device @@ -41,10 +82,32 @@ static ssize_t name_show(struct device *dev, return sysfs_emit(buf, "%s\n", handler->name); } +/** + * choices_show - Show the available profile choices + * @dev: The device + * @attr: The attribute + * @buf: The buffer to write to + */ +static ssize_t choices_show(struct device *dev, + struct device_attribute *attr, + char *buf) +{ + unsigned long choices = 0; + int err; + + err = _get_class_choices(dev, &choices); + if (err) + return err; + + return _commmon_choices_show(choices, buf); +} + static DEVICE_ATTR_RO(name); +static DEVICE_ATTR_RO(choices); static struct attribute *profile_attrs[] = { &dev_attr_name.attr, + &dev_attr_choices.attr, NULL }; ATTRIBUTE_GROUPS(profile);
The `choices` file will show all possible choices that a given platform profile handler can support. Signed-off-by: Mario Limonciello <mario.limonciello@amd.com> --- drivers/acpi/platform_profile.c | 63 +++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+)