linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/3] platform/x86: wmi: Ignore duplicated GUIDs in legacy matches
@ 2024-02-26 19:35 Armin Wolf
  2024-02-26 19:35 ` [PATCH 2/3] platform/x86: wmi: Do not instantiate older WMI drivers multiple times Armin Wolf
                   ` (2 more replies)
  0 siblings, 3 replies; 10+ messages in thread
From: Armin Wolf @ 2024-02-26 19:35 UTC (permalink / raw)
  To: jithu.joseph, linux, pali
  Cc: hdegoede, ilpo.jarvinen, Dell.Client.Kernel, jdelvare, linux,
	platform-driver-x86, linux-hwmon, linux-kernel

When matching a WMI device to a GUID used by the legacy GUID-based
API, devices with a duplicated GUID should be ignored.

Add an additional WMI device flag signaling that the GUID used by
the WMI device is also used by another WMI device. Ignore such
devices inside the match functions used by the legacy GUID-based API.

Tested on a ASUS Prime B650-Plus.

Signed-off-by: Armin Wolf <W_Armin@gmx.de>
---
 drivers/platform/x86/wmi.c | 19 +++++++++++++++++--
 1 file changed, 17 insertions(+), 2 deletions(-)

diff --git a/drivers/platform/x86/wmi.c b/drivers/platform/x86/wmi.c
index abd0183c4107..29dfe52eb802 100644
--- a/drivers/platform/x86/wmi.c
+++ b/drivers/platform/x86/wmi.c
@@ -57,6 +57,7 @@ static_assert(__alignof__(struct guid_block) == 1);

 enum {	/* wmi_block flags */
 	WMI_READ_TAKES_NO_ARGS,
+	WMI_GUID_DUPLICATED,
 	WMI_NO_EVENT_DATA,
 };

@@ -196,6 +197,12 @@ static int wmidev_match_guid(struct device *dev, const void *data)
 	struct wmi_block *wblock = dev_to_wblock(dev);
 	const guid_t *guid = data;

+	/* Legacy GUID-based functions are restricted to only see
+	 * a single WMI device for each GUID.
+	 */
+	if (test_bit(WMI_GUID_DUPLICATED, &wblock->flags))
+		return 0;
+
 	if (guid_equal(guid, &wblock->gblock.guid))
 		return 1;

@@ -207,6 +214,12 @@ static int wmidev_match_notify_id(struct device *dev, const void *data)
 	struct wmi_block *wblock = dev_to_wblock(dev);
 	const u32 *notify_id = data;

+	/* Legacy GUID-based functions are restricted to only see
+	 * a single WMI device for each GUID.
+	 */
+	if (test_bit(WMI_GUID_DUPLICATED, &wblock->flags))
+		return 0;
+
 	if (wblock->gblock.flags & ACPI_WMI_EVENT && wblock->gblock.notify_id == *notify_id)
 		return 1;

@@ -1036,10 +1049,12 @@ static int wmi_create_device(struct device *wmi_bus_dev,
 	wblock->dev.dev.parent = wmi_bus_dev;

 	count = guid_count(&wblock->gblock.guid);
-	if (count)
+	if (count) {
 		dev_set_name(&wblock->dev.dev, "%pUL-%d", &wblock->gblock.guid, count);
-	else
+		set_bit(WMI_GUID_DUPLICATED, &wblock->flags);
+	} else {
 		dev_set_name(&wblock->dev.dev, "%pUL", &wblock->gblock.guid);
+	}

 	device_initialize(&wblock->dev.dev);

--
2.39.2


^ permalink raw reply related	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2024-02-28 20:41 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-02-26 19:35 [PATCH 1/3] platform/x86: wmi: Ignore duplicated GUIDs in legacy matches Armin Wolf
2024-02-26 19:35 ` [PATCH 2/3] platform/x86: wmi: Do not instantiate older WMI drivers multiple times Armin Wolf
2024-02-27 20:30   ` Pali Rohár
2024-02-27 22:47     ` Armin Wolf
2024-02-27 22:53       ` Pali Rohár
2024-02-28 13:23       ` Hans de Goede
2024-02-28 20:40         ` Armin Wolf
2024-02-26 19:35 ` [PATCH 3/3] platform/x86: wmi: Remove obsolete duplicate GUID allowlist Armin Wolf
2024-02-27 13:05   ` Ilpo Järvinen
2024-02-27 22:55 ` [PATCH 1/3] platform/x86: wmi: Ignore duplicated GUIDs in legacy matches Pali Rohár

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).