From: Mario Limonciello <mario.limonciello@amd.com>
To: "Armin Wolf" <W_Armin@gmx.de>,
"Hans de Goede" <hdegoede@redhat.com>,
"Ilpo Järvinen" <ilpo.jarvinen@linux.intel.com>
Cc: "Rafael J . Wysocki" <rafael@kernel.org>,
"Len Brown" <lenb@kernel.org>,
"Maximilian Luz" <luzmaximilian@gmail.com>,
"Lee Chun-Yi" <jlee@suse.com>,
"Shyam Sundar S K" <Shyam-sundar.S-k@amd.com>,
"Corentin Chary" <corentin.chary@gmail.com>,
"Luke D . Jones" <luke@ljones.dev>,
"Ike Panhc" <ike.pan@canonical.com>,
"Henrique de Moraes Holschuh" <hmh@hmh.eng.br>,
"Alexis Belmonte" <alexbelm48@gmail.com>,
"Uwe Kleine-König" <u.kleine-koenig@pengutronix.de>,
"Ai Chao" <aichao@kylinos.cn>, "Gergo Koteles" <soyer@irl.hu>,
"open list" <linux-kernel@vger.kernel.org>,
"open list:ACPI" <linux-acpi@vger.kernel.org>,
"open list:MICROSOFT SURFACE PLATFORM PROFILE DRIVER"
<platform-driver-x86@vger.kernel.org>,
"open list:THINKPAD ACPI EXTRAS DRIVER"
<ibm-acpi-devel@lists.sourceforge.net>,
"Mark Pearson" <mpearson-lenovo@squebb.ca>,
"Matthew Schwartz" <matthew.schwartz@linux.dev>
Subject: Re: [PATCH v5 11/20] ACPI: platform_profile: Add choices attribute for class interface
Date: Thu, 7 Nov 2024 16:09:31 -0600 [thread overview]
Message-ID: <9dd1709c-de87-4aa3-aa33-8a520a305545@amd.com> (raw)
In-Reply-To: <7e302f04-cb4d-4ecd-b1a1-4b89f09e692b@gmx.de>
On 11/7/2024 02:28, Armin Wolf wrote:
> Am 07.11.24 um 07:02 schrieb Mario Limonciello:
>
>> The `choices` file will show all possible choices that a given platform
>> profile handler can support.
>>
>> Tested-by: Mark Pearson <mpearson-lenovo@squebb.ca>
>> Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
>> ---
>> v5:
>> * Fix kdoc
>> * Add tag
>> * Fix whitespace
>> * Adjust mutex use
>> ---
>> drivers/acpi/platform_profile.c | 65 +++++++++++++++++++++++++++++++++
>> 1 file changed, 65 insertions(+)
>>
>> diff --git a/drivers/acpi/platform_profile.c b/drivers/acpi/
>> platform_profile.c
>> index f605c2bd35c68..5e0bb91c5f451 100644
>> --- a/drivers/acpi/platform_profile.c
>> +++ b/drivers/acpi/platform_profile.c
>> @@ -25,6 +25,46 @@ static_assert(ARRAY_SIZE(profile_names) ==
>> PLATFORM_PROFILE_LAST);
>>
>> static DEFINE_IDA(platform_profile_ida);
>>
>> +/**
>> + * _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
>> + * @choices: Pointer to return the available profile choices
>> + * Return: The available profile choices
>> + */
>> +static int _get_class_choices(struct device *dev, unsigned long
>> *choices)
>> +{
>> + struct platform_profile_handler *handler;
>> + int i;
>> +
>> + lockdep_assert_held(&profile_lock);
>> + handler = dev_get_drvdata(dev);
>> + for_each_set_bit(i, handler->choices, PLATFORM_PROFILE_LAST)
>> + *choices |= BIT(i);
>
> Maybe just copying the bitmask would be enough here? In this case we
> could also drop
> this function as well.
Right now this could work, but choices and the use of it has gone
through great lengths to ensure that once there are too many profiles it
automatically becomes a bigger variable.
unsigned long choices[BITS_TO_LONGS(PLATFORM_PROFILE_LAST)];
So I would rather keep this as is.
>
>> +
>> + return 0;
>> +}
>> +
>> /**
>> * name_show - Show the name of the profile handler
>> * @dev: The device
>> @@ -44,9 +84,34 @@ static ssize_t name_show(struct device *dev,
>> return -ERESTARTSYS;
>> }
>>
>> +/**
>> + * 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;
>> +
>> + scoped_cond_guard(mutex_intr, return -ERESTARTSYS, &profile_lock) {
>> + err = _get_class_choices(dev, &choices);
>> + if (err)
>> + return err;
>> + }
>
> Please directly use the choices field here, no need for a mutex since
> the choices are static
> across the lifetime of the platform profile.
But similarly to my other message, the class could be unregistered and
this needs to be protected.
>
> Thanks,
> Armin Wolf
>
>> +
>> + 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);
next prev parent reply other threads:[~2024-11-07 22:09 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-11-07 6:02 [PATCH v5 00/20] Add support for binding ACPI platform profile to multiple drivers Mario Limonciello
2024-11-07 6:02 ` [PATCH v5 01/20] ACPI: platform-profile: Add a name member to handlers Mario Limonciello
2024-11-07 6:02 ` [PATCH v5 02/20] platform/x86/dell: dell-pc: Create platform device Mario Limonciello
2024-11-07 8:07 ` Armin Wolf
2024-11-07 6:02 ` [PATCH v5 03/20] ACPI: platform_profile: Add platform handler argument to platform_profile_remove() Mario Limonciello
2024-11-07 6:02 ` [PATCH v5 04/20] ACPI: platform_profile: Move sanity check out of the mutex Mario Limonciello
2024-11-07 6:02 ` [PATCH v5 05/20] ACPI: platform_profile: Move matching string for new profile out of mutex Mario Limonciello
2024-11-07 6:02 ` [PATCH v5 06/20] ACPI: platform_profile: Use guard(mutex) for register/unregister Mario Limonciello
2024-11-07 6:02 ` [PATCH v5 07/20] ACPI: platform_profile: Use `scoped_cond_guard` Mario Limonciello
2024-11-07 6:02 ` [PATCH v5 08/20] ACPI: platform_profile: Create class for ACPI platform profile Mario Limonciello
2024-11-07 8:16 ` Armin Wolf
2024-11-07 21:09 ` Mario Limonciello
2024-11-08 17:34 ` Armin Wolf
2024-11-07 6:02 ` [PATCH v5 09/20] ACPI: platform_profile: Unregister class and sysfs group on module unload Mario Limonciello
2024-11-07 8:21 ` Armin Wolf
2024-11-07 6:02 ` [PATCH v5 10/20] ACPI: platform_profile: Add name attribute to class interface Mario Limonciello
2024-11-07 8:23 ` Armin Wolf
2024-11-07 6:02 ` [PATCH v5 11/20] ACPI: platform_profile: Add choices attribute for " Mario Limonciello
2024-11-07 8:28 ` Armin Wolf
2024-11-07 22:09 ` Mario Limonciello [this message]
2024-11-08 18:06 ` Armin Wolf
2024-11-08 19:25 ` Mario Limonciello
2024-11-08 19:44 ` Armin Wolf
2024-11-07 6:02 ` [PATCH v5 12/20] ACPI: platform_profile: Add profile " Mario Limonciello
2024-11-07 8:34 ` Armin Wolf
2024-11-07 21:41 ` Mario Limonciello
2024-11-08 18:00 ` Armin Wolf
2024-11-07 6:02 ` [PATCH v5 13/20] ACPI: platform_profile: Notify change events on register and unregister Mario Limonciello
2024-11-07 6:02 ` [PATCH v5 14/20] ACPI: platform_profile: Only show profiles common for all handlers Mario Limonciello
2024-11-07 6:02 ` [PATCH v5 15/20] ACPI: platform_profile: Add concept of a "custom" profile Mario Limonciello
2024-11-07 6:02 ` [PATCH v5 16/20] ACPI: platform_profile: Make sure all profile handlers agree on profile Mario Limonciello
2024-11-07 8:53 ` Armin Wolf
2024-11-07 6:02 ` [PATCH v5 17/20] ACPI: platform_profile: Check all profile handler to calculate next Mario Limonciello
2024-11-07 8:58 ` Armin Wolf
2024-11-07 22:05 ` Mario Limonciello
2024-11-08 18:10 ` Armin Wolf
2024-11-07 6:02 ` [PATCH v5 18/20] ACPI: platform_profile: Allow multiple handlers Mario Limonciello
2024-11-07 6:02 ` [PATCH v5 19/20] platform/x86/amd: pmf: Drop all quirks Mario Limonciello
2024-11-07 6:02 ` [PATCH v5 20/20] Documentation: Add documentation about class interface for platform profiles Mario Limonciello
2024-11-07 9:06 ` [PATCH v5 00/20] Add support for binding ACPI platform profile to multiple drivers Armin Wolf
2024-11-07 21:45 ` Mario Limonciello
2024-11-08 18:13 ` Armin Wolf
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=9dd1709c-de87-4aa3-aa33-8a520a305545@amd.com \
--to=mario.limonciello@amd.com \
--cc=Shyam-sundar.S-k@amd.com \
--cc=W_Armin@gmx.de \
--cc=aichao@kylinos.cn \
--cc=alexbelm48@gmail.com \
--cc=corentin.chary@gmail.com \
--cc=hdegoede@redhat.com \
--cc=hmh@hmh.eng.br \
--cc=ibm-acpi-devel@lists.sourceforge.net \
--cc=ike.pan@canonical.com \
--cc=ilpo.jarvinen@linux.intel.com \
--cc=jlee@suse.com \
--cc=lenb@kernel.org \
--cc=linux-acpi@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=luke@ljones.dev \
--cc=luzmaximilian@gmail.com \
--cc=matthew.schwartz@linux.dev \
--cc=mpearson-lenovo@squebb.ca \
--cc=platform-driver-x86@vger.kernel.org \
--cc=rafael@kernel.org \
--cc=soyer@irl.hu \
--cc=u.kleine-koenig@pengutronix.de \
/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