* [PATCH] platform/x86: wmi: Initialize ACPI device class
@ 2024-01-24 19:07 Armin Wolf
2024-01-29 12:51 ` Hans de Goede
0 siblings, 1 reply; 5+ messages in thread
From: Armin Wolf @ 2024-01-24 19:07 UTC (permalink / raw)
To: hdegoede, ilpo.jarvinen; +Cc: platform-driver-x86, linux-kernel
When an ACPI netlink event is received by acpid, the ACPI device
class is passed as its first argument. But since the class string
is not initialized, an empty string is being passed:
netlink: PNP0C14:01 000000d0 00000000
Fix this by initializing the ACPI device class during probe.
Signed-off-by: Armin Wolf <W_Armin@gmx.de>
---
Note: This patch is based on commit 3f399b5d7189 ("platform/x86: wmi: Use ACPI device name in netlink event")
---
drivers/platform/x86/wmi.c | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/drivers/platform/x86/wmi.c b/drivers/platform/x86/wmi.c
index 7ef1e82dc61c..b92425c30a50 100644
--- a/drivers/platform/x86/wmi.c
+++ b/drivers/platform/x86/wmi.c
@@ -32,6 +32,8 @@
#include <linux/wmi.h>
#include <linux/fs.h>
+#define ACPI_WMI_DEVICE_CLASS "wmi"
+
MODULE_AUTHOR("Carlos Corbacho");
MODULE_DESCRIPTION("ACPI-WMI Mapping Driver");
MODULE_LICENSE("GPL");
@@ -1202,7 +1204,7 @@ static int wmi_notify_device(struct device *dev, void *data)
wblock->handler(*event, wblock->handler_data);
}
- acpi_bus_generate_netlink_event(wblock->acpi_device->pnp.device_class,
+ acpi_bus_generate_netlink_event(acpi_device_class(wblock->acpi_device),
acpi_dev_name(wblock->acpi_device), *event, 0);
return -EBUSY;
@@ -1267,6 +1269,8 @@ static int acpi_wmi_probe(struct platform_device *device)
return -ENODEV;
}
+ strscpy(acpi_device_class(acpi_device), ACPI_WMI_DEVICE_CLASS, sizeof(acpi_device_class));
+
wmi_bus_dev = device_create(&wmi_bus_class, &device->dev, MKDEV(0, 0), NULL, "wmi_bus-%s",
dev_name(&device->dev));
if (IS_ERR(wmi_bus_dev))
--
2.39.2
^ permalink raw reply [flat|nested] 5+ messages in thread* Re: [PATCH] platform/x86: wmi: Initialize ACPI device class
2024-01-24 19:07 [PATCH] platform/x86: wmi: Initialize ACPI device class Armin Wolf
@ 2024-01-29 12:51 ` Hans de Goede
2024-01-29 13:08 ` Rafael J. Wysocki
0 siblings, 1 reply; 5+ messages in thread
From: Hans de Goede @ 2024-01-29 12:51 UTC (permalink / raw)
To: Armin Wolf, ilpo.jarvinen, Rafael J. Wysocki
Cc: platform-driver-x86, linux-kernel
Hi,
On 1/24/24 20:07, Armin Wolf wrote:
> When an ACPI netlink event is received by acpid, the ACPI device
> class is passed as its first argument. But since the class string
> is not initialized, an empty string is being passed:
>
> netlink: PNP0C14:01 000000d0 00000000
>
> Fix this by initializing the ACPI device class during probe.
>
> Signed-off-by: Armin Wolf <W_Armin@gmx.de>
> ---
> Note: This patch is based on commit 3f399b5d7189 ("platform/x86: wmi: Use ACPI device name in netlink event")
> ---
> drivers/platform/x86/wmi.c | 6 +++++-
> 1 file changed, 5 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/platform/x86/wmi.c b/drivers/platform/x86/wmi.c
> index 7ef1e82dc61c..b92425c30a50 100644
> --- a/drivers/platform/x86/wmi.c
> +++ b/drivers/platform/x86/wmi.c
> @@ -32,6 +32,8 @@
> #include <linux/wmi.h>
> #include <linux/fs.h>
>
> +#define ACPI_WMI_DEVICE_CLASS "wmi"
> +
> MODULE_AUTHOR("Carlos Corbacho");
> MODULE_DESCRIPTION("ACPI-WMI Mapping Driver");
> MODULE_LICENSE("GPL");
> @@ -1202,7 +1204,7 @@ static int wmi_notify_device(struct device *dev, void *data)
> wblock->handler(*event, wblock->handler_data);
> }
>
> - acpi_bus_generate_netlink_event(wblock->acpi_device->pnp.device_class,
> + acpi_bus_generate_netlink_event(acpi_device_class(wblock->acpi_device),
> acpi_dev_name(wblock->acpi_device), *event, 0);
>
> return -EBUSY;
> @@ -1267,6 +1269,8 @@ static int acpi_wmi_probe(struct platform_device *device)
> return -ENODEV;
> }
>
> + strscpy(acpi_device_class(acpi_device), ACPI_WMI_DEVICE_CLASS, sizeof(acpi_device_class));
> +
Hmm, I'm not sure if you are supposed to do this when you are not an
acpi_driver's add() function.
Rafael, do you have any comments on this ?
Regards,
Hans
> wmi_bus_dev = device_create(&wmi_bus_class, &device->dev, MKDEV(0, 0), NULL, "wmi_bus-%s",
> dev_name(&device->dev));
> if (IS_ERR(wmi_bus_dev))
> --
> 2.39.2
>
^ permalink raw reply [flat|nested] 5+ messages in thread* Re: [PATCH] platform/x86: wmi: Initialize ACPI device class
2024-01-29 12:51 ` Hans de Goede
@ 2024-01-29 13:08 ` Rafael J. Wysocki
2024-01-30 2:10 ` Armin Wolf
0 siblings, 1 reply; 5+ messages in thread
From: Rafael J. Wysocki @ 2024-01-29 13:08 UTC (permalink / raw)
To: Hans de Goede
Cc: Armin Wolf, ilpo.jarvinen, Rafael J. Wysocki,
platform-driver-x86, linux-kernel
On Mon, Jan 29, 2024 at 1:51 PM Hans de Goede <hdegoede@redhat.com> wrote:
>
> Hi,
>
> On 1/24/24 20:07, Armin Wolf wrote:
> > When an ACPI netlink event is received by acpid, the ACPI device
> > class is passed as its first argument. But since the class string
> > is not initialized, an empty string is being passed:
> >
> > netlink: PNP0C14:01 000000d0 00000000
> >
> > Fix this by initializing the ACPI device class during probe.
> >
> > Signed-off-by: Armin Wolf <W_Armin@gmx.de>
> > ---
> > Note: This patch is based on commit 3f399b5d7189 ("platform/x86: wmi: Use ACPI device name in netlink event")
> > ---
> > drivers/platform/x86/wmi.c | 6 +++++-
> > 1 file changed, 5 insertions(+), 1 deletion(-)
> >
> > diff --git a/drivers/platform/x86/wmi.c b/drivers/platform/x86/wmi.c
> > index 7ef1e82dc61c..b92425c30a50 100644
> > --- a/drivers/platform/x86/wmi.c
> > +++ b/drivers/platform/x86/wmi.c
> > @@ -32,6 +32,8 @@
> > #include <linux/wmi.h>
> > #include <linux/fs.h>
> >
> > +#define ACPI_WMI_DEVICE_CLASS "wmi"
> > +
> > MODULE_AUTHOR("Carlos Corbacho");
> > MODULE_DESCRIPTION("ACPI-WMI Mapping Driver");
> > MODULE_LICENSE("GPL");
> > @@ -1202,7 +1204,7 @@ static int wmi_notify_device(struct device *dev, void *data)
> > wblock->handler(*event, wblock->handler_data);
> > }
> >
> > - acpi_bus_generate_netlink_event(wblock->acpi_device->pnp.device_class,
> > + acpi_bus_generate_netlink_event(acpi_device_class(wblock->acpi_device),
> > acpi_dev_name(wblock->acpi_device), *event, 0);
> >
> > return -EBUSY;
> > @@ -1267,6 +1269,8 @@ static int acpi_wmi_probe(struct platform_device *device)
> > return -ENODEV;
> > }
> >
> > + strscpy(acpi_device_class(acpi_device), ACPI_WMI_DEVICE_CLASS, sizeof(acpi_device_class));
> > +
>
> Hmm, I'm not sure if you are supposed to do this when you are not an
> acpi_driver's add() function.
You aren't.
> Rafael, do you have any comments on this ?
I'm not quite sure why this is done here.
^ permalink raw reply [flat|nested] 5+ messages in thread* Re: [PATCH] platform/x86: wmi: Initialize ACPI device class
2024-01-29 13:08 ` Rafael J. Wysocki
@ 2024-01-30 2:10 ` Armin Wolf
2024-01-30 9:17 ` Hans de Goede
0 siblings, 1 reply; 5+ messages in thread
From: Armin Wolf @ 2024-01-30 2:10 UTC (permalink / raw)
To: Rafael J. Wysocki, Hans de Goede
Cc: ilpo.jarvinen, platform-driver-x86, linux-kernel
Am 29.01.24 um 14:08 schrieb Rafael J. Wysocki:
> On Mon, Jan 29, 2024 at 1:51 PM Hans de Goede <hdegoede@redhat.com> wrote:
>> Hi,
>>
>> On 1/24/24 20:07, Armin Wolf wrote:
>>> When an ACPI netlink event is received by acpid, the ACPI device
>>> class is passed as its first argument. But since the class string
>>> is not initialized, an empty string is being passed:
>>>
>>> netlink: PNP0C14:01 000000d0 00000000
>>>
>>> Fix this by initializing the ACPI device class during probe.
>>>
>>> Signed-off-by: Armin Wolf <W_Armin@gmx.de>
>>> ---
>>> Note: This patch is based on commit 3f399b5d7189 ("platform/x86: wmi: Use ACPI device name in netlink event")
>>> ---
>>> drivers/platform/x86/wmi.c | 6 +++++-
>>> 1 file changed, 5 insertions(+), 1 deletion(-)
>>>
>>> diff --git a/drivers/platform/x86/wmi.c b/drivers/platform/x86/wmi.c
>>> index 7ef1e82dc61c..b92425c30a50 100644
>>> --- a/drivers/platform/x86/wmi.c
>>> +++ b/drivers/platform/x86/wmi.c
>>> @@ -32,6 +32,8 @@
>>> #include <linux/wmi.h>
>>> #include <linux/fs.h>
>>>
>>> +#define ACPI_WMI_DEVICE_CLASS "wmi"
>>> +
>>> MODULE_AUTHOR("Carlos Corbacho");
>>> MODULE_DESCRIPTION("ACPI-WMI Mapping Driver");
>>> MODULE_LICENSE("GPL");
>>> @@ -1202,7 +1204,7 @@ static int wmi_notify_device(struct device *dev, void *data)
>>> wblock->handler(*event, wblock->handler_data);
>>> }
>>>
>>> - acpi_bus_generate_netlink_event(wblock->acpi_device->pnp.device_class,
>>> + acpi_bus_generate_netlink_event(acpi_device_class(wblock->acpi_device),
>>> acpi_dev_name(wblock->acpi_device), *event, 0);
>>>
>>> return -EBUSY;
>>> @@ -1267,6 +1269,8 @@ static int acpi_wmi_probe(struct platform_device *device)
>>> return -ENODEV;
>>> }
>>>
>>> + strscpy(acpi_device_class(acpi_device), ACPI_WMI_DEVICE_CLASS, sizeof(acpi_device_class));
>>> +
>> Hmm, I'm not sure if you are supposed to do this when you are not an
>> acpi_driver's add() function.
> You aren't.
I believed otherwise, as the ACPI AC driver (which is a platform_driver) does the same thing.
Seems i was wrong on that.
>
>> Rafael, do you have any comments on this ?
> I'm not quite sure why this is done here.
The initialization of the ACPI device class is being done to access this value later when sending an
ACPI netlink event like other ACPI drivers do.
However since you clarified that doing this outside of an acpi_driver's add() function is forbidden
i think it would indeed be better to just pass the value directly without touching the ACPI device class.
Thanks,
Armin Wolf
^ permalink raw reply [flat|nested] 5+ messages in thread* Re: [PATCH] platform/x86: wmi: Initialize ACPI device class
2024-01-30 2:10 ` Armin Wolf
@ 2024-01-30 9:17 ` Hans de Goede
0 siblings, 0 replies; 5+ messages in thread
From: Hans de Goede @ 2024-01-30 9:17 UTC (permalink / raw)
To: Armin Wolf, Rafael J. Wysocki
Cc: ilpo.jarvinen, platform-driver-x86, linux-kernel
Hi,
On 1/30/24 03:10, Armin Wolf wrote:
> Am 29.01.24 um 14:08 schrieb Rafael J. Wysocki:
>
>> On Mon, Jan 29, 2024 at 1:51 PM Hans de Goede <hdegoede@redhat.com> wrote:
>>> Hi,
>>>
>>> On 1/24/24 20:07, Armin Wolf wrote:
>>>> When an ACPI netlink event is received by acpid, the ACPI device
>>>> class is passed as its first argument. But since the class string
>>>> is not initialized, an empty string is being passed:
>>>>
>>>> netlink: PNP0C14:01 000000d0 00000000
>>>>
>>>> Fix this by initializing the ACPI device class during probe.
>>>>
>>>> Signed-off-by: Armin Wolf <W_Armin@gmx.de>
>>>> ---
>>>> Note: This patch is based on commit 3f399b5d7189 ("platform/x86: wmi: Use ACPI device name in netlink event")
>>>> ---
>>>> drivers/platform/x86/wmi.c | 6 +++++-
>>>> 1 file changed, 5 insertions(+), 1 deletion(-)
>>>>
>>>> diff --git a/drivers/platform/x86/wmi.c b/drivers/platform/x86/wmi.c
>>>> index 7ef1e82dc61c..b92425c30a50 100644
>>>> --- a/drivers/platform/x86/wmi.c
>>>> +++ b/drivers/platform/x86/wmi.c
>>>> @@ -32,6 +32,8 @@
>>>> #include <linux/wmi.h>
>>>> #include <linux/fs.h>
>>>>
>>>> +#define ACPI_WMI_DEVICE_CLASS "wmi"
>>>> +
>>>> MODULE_AUTHOR("Carlos Corbacho");
>>>> MODULE_DESCRIPTION("ACPI-WMI Mapping Driver");
>>>> MODULE_LICENSE("GPL");
>>>> @@ -1202,7 +1204,7 @@ static int wmi_notify_device(struct device *dev, void *data)
>>>> wblock->handler(*event, wblock->handler_data);
>>>> }
>>>>
>>>> - acpi_bus_generate_netlink_event(wblock->acpi_device->pnp.device_class,
>>>> + acpi_bus_generate_netlink_event(acpi_device_class(wblock->acpi_device),
>>>> acpi_dev_name(wblock->acpi_device), *event, 0);
>>>>
>>>> return -EBUSY;
>>>> @@ -1267,6 +1269,8 @@ static int acpi_wmi_probe(struct platform_device *device)
>>>> return -ENODEV;
>>>> }
>>>>
>>>> + strscpy(acpi_device_class(acpi_device), ACPI_WMI_DEVICE_CLASS, sizeof(acpi_device_class));
>>>> +
>>> Hmm, I'm not sure if you are supposed to do this when you are not an
>>> acpi_driver's add() function.
>> You aren't.
>
> I believed otherwise, as the ACPI AC driver (which is a platform_driver) does the same thing.
> Seems i was wrong on that.
I'm pretty sure that the ACPI AC driver used to be an acpi_driver
and was converted to a platform_driver recently.
AFAIK the plan is to convert all drivers to platform_drivers
and completely get rid of the acpi_driver concept.
That does mean that we will indeed have platform_drivers
now setting the acpi_device_class. So I guess that maybe
this is ok to do for the WMI bus driver too, since that
is also not a plain driver.
>>> Rafael, do you have any comments on this ?
>> I'm not quite sure why this is done here.
>
> The initialization of the ACPI device class is being done to access this value later when sending an
> ACPI netlink event like other ACPI drivers do.
>
> However since you clarified that doing this outside of an acpi_driver's add() function is forbidden
> i think it would indeed be better to just pass the value directly without touching the ACPI device class.
Right I was thinking that you could just pass the string
directly to acpi_bus_generate_netlink_event() myself too.
Rafael, do you have any preference for how to solve this ?
Regards,
Hans
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2024-01-30 9:17 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-01-24 19:07 [PATCH] platform/x86: wmi: Initialize ACPI device class Armin Wolf
2024-01-29 12:51 ` Hans de Goede
2024-01-29 13:08 ` Rafael J. Wysocki
2024-01-30 2:10 ` Armin Wolf
2024-01-30 9:17 ` Hans de Goede
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®