public inbox for linux-acpi@vger.kernel.org
 help / color / mirror / Atom feed
From: Mario Limonciello <mario.limonciello@amd.com>
To: "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>,
	"Mario Limonciello" <mario.limonciello@amd.com>
Subject: [PATCH v4 18/20] ACPI: platform_profile: Allow multiple handlers
Date: Tue, 5 Nov 2024 09:33:14 -0600	[thread overview]
Message-ID: <20241105153316.378-19-mario.limonciello@amd.com> (raw)
In-Reply-To: <20241105153316.378-1-mario.limonciello@amd.com>

Multiple drivers may attempt to register platform profile handlers,
but only one may be registered and the behavior is non-deterministic
for which one wins.  It's mostly controlled by probing order.

This can be problematic if one driver changes CPU settings and another
driver notifies the EC for changing fan curves.

Modify the ACPI platform profile handler to let multiple drivers
register platform profile handlers and abstract this detail from userspace.

To avoid undefined behaviors only offer profiles that are commonly
advertised across multiple handlers.

If any problems occur when changing profiles for any driver, then revert
back to the balanced profile, which is now required.

Tested-by: Matthew Schwartz <matthew.schwartz@linux.dev>
Reviewed-by: Mark Pearson <mpearson-lenovo@squebb.ca>
Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
---
 drivers/acpi/platform_profile.c | 12 ++----------
 1 file changed, 2 insertions(+), 10 deletions(-)

diff --git a/drivers/acpi/platform_profile.c b/drivers/acpi/platform_profile.c
index 568485e285061..b9eb25f58a2a2 100644
--- a/drivers/acpi/platform_profile.c
+++ b/drivers/acpi/platform_profile.c
@@ -10,7 +10,6 @@
 #include <linux/platform_profile.h>
 #include <linux/sysfs.h>
 
-static struct platform_profile_handler *cur_profile;
 static DEFINE_MUTEX(profile_lock);
 
 static const char * const profile_names[] = {
@@ -368,8 +367,7 @@ static const struct attribute_group platform_profile_group = {
 
 void platform_profile_notify(void)
 {
-	if (!cur_profile)
-		return;
+	guard(mutex)(&profile_lock);
 	if (!class_is_registered(&platform_profile_class))
 		return;
 	sysfs_notify(acpi_kobj, NULL, "platform_profile");
@@ -428,9 +426,6 @@ int platform_profile_register(struct platform_profile_handler *pprof)
 	}
 
 	guard(mutex)(&profile_lock);
-	/* We can only have one active profile */
-	if (cur_profile)
-		return -EEXIST;
 
 	if (!class_is_registered(&platform_profile_class)) {
 		/* class for individual handlers */
@@ -451,9 +446,9 @@ int platform_profile_register(struct platform_profile_handler *pprof)
 	if (IS_ERR(pprof->class_dev))
 		return PTR_ERR(pprof->class_dev);
 	dev_set_drvdata(pprof->class_dev, pprof);
+
 	sysfs_notify(acpi_kobj, NULL, "platform_profile");
 
-	cur_profile = pprof;
 	return 0;
 
 cleanup_class:
@@ -467,13 +462,10 @@ int platform_profile_remove(struct platform_profile_handler *pprof)
 {
 	guard(mutex)(&profile_lock);
 
-	cur_profile = NULL;
-
 	sysfs_notify(acpi_kobj, NULL, "platform_profile");
 
 	device_destroy(&platform_profile_class, MKDEV(0, pprof->minor));
 
-	cur_profile = NULL;
 	return 0;
 }
 EXPORT_SYMBOL_GPL(platform_profile_remove);
-- 
2.43.0


  parent reply	other threads:[~2024-11-05 15:33 UTC|newest]

Thread overview: 55+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-11-05 15:32 [PATCH v4 00/20] Add support for binding ACPI platform profile to multiple drivers Mario Limonciello
2024-11-05 15:32 ` [PATCH v4 01/20] ACPI: platform-profile: Add a name member to handlers Mario Limonciello
2024-11-06  3:27   ` Armin Wolf
2024-11-05 15:32 ` [PATCH v4 02/20] platform/x86/dell: dell-pc: Create platform device Mario Limonciello
2024-11-06 19:37   ` Armin Wolf
2024-11-05 15:32 ` [PATCH v4 03/20] ACPI: platform_profile: Add device pointer into platform profile handler Mario Limonciello
2024-11-06  3:32   ` Armin Wolf
2024-11-05 15:33 ` [PATCH v4 04/20] ACPI: platform_profile: Add platform handler argument to platform_profile_remove() Mario Limonciello
2024-11-06  3:34   ` Armin Wolf
2024-11-05 15:33 ` [PATCH v4 05/20] ACPI: platform_profile: Move sanity check out of the mutex Mario Limonciello
2024-11-06  3:35   ` Armin Wolf
2024-11-05 15:33 ` [PATCH v4 06/20] ACPI: platform_profile: Move matching string for new profile out of mutex Mario Limonciello
2024-11-05 15:38   ` Ilpo Järvinen
2024-11-06  3:36   ` Armin Wolf
2024-11-05 15:33 ` [PATCH v4 07/20] ACPI: platform_profile: Use guard(mutex) for register/unregister Mario Limonciello
2024-11-06  3:37   ` Armin Wolf
2024-11-05 15:33 ` [PATCH v4 08/20] ACPI: platform_profile: Use `scoped_cond_guard` Mario Limonciello
2024-11-05 15:54   ` Ilpo Järvinen
2024-11-05 15:33 ` [PATCH v4 09/20] ACPI: platform_profile: Create class for ACPI platform profile Mario Limonciello
2024-11-06  3:53   ` Armin Wolf
2024-11-05 15:33 ` [PATCH v4 10/20] ACPI: platform_profile: Add name attribute to class interface Mario Limonciello
2024-11-06  3:56   ` Armin Wolf
2024-11-05 15:33 ` [PATCH v4 11/20] ACPI: platform_profile: Add choices attribute for " Mario Limonciello
2024-11-06  1:09   ` kernel test robot
2024-11-06  4:00   ` Armin Wolf
2024-11-05 15:33 ` [PATCH v4 12/20] ACPI: platform_profile: Add profile " Mario Limonciello
2024-11-06  4:10   ` Armin Wolf
2024-11-06  5:46     ` Mario Limonciello
2024-11-06 19:15       ` Armin Wolf
2024-11-05 15:33 ` [PATCH v4 13/20] ACPI: platform_profile: Notify change events on register and unregister Mario Limonciello
2024-11-06 19:40   ` Armin Wolf
2024-11-06 19:44     ` Mario Limonciello
2024-11-06 20:58       ` Armin Wolf
2024-11-05 15:33 ` [PATCH v4 14/20] ACPI: platform_profile: Only show profiles common for all handlers Mario Limonciello
2024-11-06 19:41   ` Armin Wolf
2024-11-06 19:44     ` Mario Limonciello
2024-11-05 15:33 ` [PATCH v4 15/20] ACPI: platform_profile: Add concept of a "custom" profile Mario Limonciello
2024-11-06 19:17   ` Armin Wolf
2024-11-05 15:33 ` [PATCH v4 16/20] ACPI: platform_profile: Make sure all profile handlers agree on profile Mario Limonciello
2024-11-06 20:58   ` Armin Wolf
2024-11-06 21:25     ` Mario Limonciello
2024-11-06 21:31       ` Armin Wolf
2024-11-05 15:33 ` [PATCH v4 17/20] ACPI: platform_profile: Check all profile handler to calculate next Mario Limonciello
2024-11-06 20:55   ` Armin Wolf
2024-11-05 15:33 ` Mario Limonciello [this message]
2024-11-06 19:21   ` [PATCH v4 18/20] ACPI: platform_profile: Allow multiple handlers Armin Wolf
2024-11-06 19:33     ` Armin Wolf
2024-11-06 19:34       ` Mario Limonciello
2024-11-05 15:33 ` [PATCH v4 19/20] platform/x86/amd: pmf: Drop all quirks Mario Limonciello
2024-11-06 19:30   ` Armin Wolf
2024-11-05 15:33 ` [PATCH v4 20/20] Documentation: Add documentation about class interface for platform profiles Mario Limonciello
2024-11-05 22:49   ` Mark Pearson
2024-11-05 22:47 ` [PATCH v4 00/20] Add support for binding ACPI platform profile to multiple drivers Mark Pearson
2024-11-06  1:11   ` Mario Limonciello
2024-11-06 21:04     ` 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=20241105153316.378-19-mario.limonciello@amd.com \
    --to=mario.limonciello@amd.com \
    --cc=Shyam-sundar.S-k@amd.com \
    --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