diff mbox series

drivers: acpi: Fix platform profile driver on !acpi platforms

Message ID 20250522141410.31315-1-alexghiti@rivosinc.com
State New
Headers show
Series drivers: acpi: Fix platform profile driver on !acpi platforms | expand

Commit Message

Alexandre Ghiti May 22, 2025, 2:13 p.m. UTC
The platform profile driver is loaded even on platforms that do not have
acpi enabled. The initialization of the sysfs entries was recently moved
from platform_profile_register() to the module init call, and those
entries need acpi_kobj to be initialized which is not the case when acpi
is disabled.

This results in the following warning:

 WARNING: CPU: 5 PID: 1 at fs/sysfs/group.c:131 internal_create_group+0xa22/0xdd8
 Modules linked in:
 CPU: 5 UID: 0 PID: 1 Comm: swapper/0 Tainted: G        W           6.15.0-rc7-dirty #6 PREEMPT
 Tainted: [W]=WARN
 Hardware name: riscv-virtio,qemu (DT)
 epc : internal_create_group+0xa22/0xdd8
  ra : internal_create_group+0xa22/0xdd8

 Call Trace:

 internal_create_group+0xa22/0xdd8
 sysfs_create_group+0x22/0x2e
 platform_profile_init+0x74/0xb2
 do_one_initcall+0x198/0xa9e
 kernel_init_freeable+0x6d8/0x780
 kernel_init+0x28/0x24c
 ret_from_fork+0xe/0x18

Fix this by checking if acpi is enabled before trying to create sysfs
entries.

Fixes: 77be5cacb2c2 ("ACPI: platform_profile: Create class for ACPI platform profile")
Signed-off-by: Alexandre Ghiti <alexghiti@rivosinc.com>
---
 drivers/acpi/platform_profile.c | 3 +++
 1 file changed, 3 insertions(+)

Comments

Arnd Bergmann May 22, 2025, 2:18 p.m. UTC | #1
On Thu, May 22, 2025, at 16:13, Alexandre Ghiti wrote:

> Fixes: 77be5cacb2c2 ("ACPI: platform_profile: Create class for ACPI 
> platform profile")
> Signed-off-by: Alexandre Ghiti <alexghiti@rivosinc.com>

Reviewed-by: Arnd Bergmann <arnd@arndb.de>
Mark Pearson May 22, 2025, 2:20 p.m. UTC | #2
On Thu, May 22, 2025, at 10:13 AM, Alexandre Ghiti wrote:
> The platform profile driver is loaded even on platforms that do not have
> acpi enabled. The initialization of the sysfs entries was recently moved
> from platform_profile_register() to the module init call, and those
> entries need acpi_kobj to be initialized which is not the case when acpi
> is disabled.
>
> This results in the following warning:
>
>  WARNING: CPU: 5 PID: 1 at fs/sysfs/group.c:131 
> internal_create_group+0xa22/0xdd8
>  Modules linked in:
>  CPU: 5 UID: 0 PID: 1 Comm: swapper/0 Tainted: G        W           
> 6.15.0-rc7-dirty #6 PREEMPT
>  Tainted: [W]=WARN
>  Hardware name: riscv-virtio,qemu (DT)
>  epc : internal_create_group+0xa22/0xdd8
>   ra : internal_create_group+0xa22/0xdd8
>
>  Call Trace:
>
>  internal_create_group+0xa22/0xdd8
>  sysfs_create_group+0x22/0x2e
>  platform_profile_init+0x74/0xb2
>  do_one_initcall+0x198/0xa9e
>  kernel_init_freeable+0x6d8/0x780
>  kernel_init+0x28/0x24c
>  ret_from_fork+0xe/0x18
>
> Fix this by checking if acpi is enabled before trying to create sysfs
> entries.
>
> Fixes: 77be5cacb2c2 ("ACPI: platform_profile: Create class for ACPI 
> platform profile")
> Signed-off-by: Alexandre Ghiti <alexghiti@rivosinc.com>
> ---
>  drivers/acpi/platform_profile.c | 3 +++
>  1 file changed, 3 insertions(+)
>
> diff --git a/drivers/acpi/platform_profile.c b/drivers/acpi/platform_profile.c
> index ffbfd32f4cf1..b43f4459a4f6 100644
> --- a/drivers/acpi/platform_profile.c
> +++ b/drivers/acpi/platform_profile.c
> @@ -688,6 +688,9 @@ static int __init platform_profile_init(void)
>  {
>  	int err;
> 
> +	if (acpi_disabled)
> +		return -EOPNOTSUPP;
> +
>  	err = class_register(&platform_profile_class);
>  	if (err)
>  		return err;
> -- 
> 2.43.0

Looks good to me.
Reviewed-by: Mark Pearson <mpearson-lenovo@squebb.ca>

Mark
Armin Wolf May 22, 2025, 8:04 p.m. UTC | #3
Am 22.05.25 um 16:13 schrieb Alexandre Ghiti:

> The platform profile driver is loaded even on platforms that do not have
> acpi enabled. The initialization of the sysfs entries was recently moved
> from platform_profile_register() to the module init call, and those
> entries need acpi_kobj to be initialized which is not the case when acpi
> is disabled.
>
> This results in the following warning:
>
>   WARNING: CPU: 5 PID: 1 at fs/sysfs/group.c:131 internal_create_group+0xa22/0xdd8
>   Modules linked in:
>   CPU: 5 UID: 0 PID: 1 Comm: swapper/0 Tainted: G        W           6.15.0-rc7-dirty #6 PREEMPT
>   Tainted: [W]=WARN
>   Hardware name: riscv-virtio,qemu (DT)
>   epc : internal_create_group+0xa22/0xdd8
>    ra : internal_create_group+0xa22/0xdd8
>
>   Call Trace:
>
>   internal_create_group+0xa22/0xdd8
>   sysfs_create_group+0x22/0x2e
>   platform_profile_init+0x74/0xb2
>   do_one_initcall+0x198/0xa9e
>   kernel_init_freeable+0x6d8/0x780
>   kernel_init+0x28/0x24c
>   ret_from_fork+0xe/0x18
>
> Fix this by checking if acpi is enabled before trying to create sysfs
> entries.

I already submitted a patch for this problem (see https://lore.kernel.org/linux-acpi/a6d92cdd-4dc3-4080-9ed9-5b1f02f247e0@gmx.de/T/)
that only disables the legacy sysfs interface while keeping the class-based interface functional
as it does not depend on ACPI at all.

Thank,
Armin Wolf

> Fixes: 77be5cacb2c2 ("ACPI: platform_profile: Create class for ACPI platform profile")
> Signed-off-by: Alexandre Ghiti <alexghiti@rivosinc.com>
> ---
>   drivers/acpi/platform_profile.c | 3 +++
>   1 file changed, 3 insertions(+)
>
> diff --git a/drivers/acpi/platform_profile.c b/drivers/acpi/platform_profile.c
> index ffbfd32f4cf1..b43f4459a4f6 100644
> --- a/drivers/acpi/platform_profile.c
> +++ b/drivers/acpi/platform_profile.c
> @@ -688,6 +688,9 @@ static int __init platform_profile_init(void)
>   {
>   	int err;
>   
> +	if (acpi_disabled)
> +		return -EOPNOTSUPP;
> +
>   	err = class_register(&platform_profile_class);
>   	if (err)
>   		return err;
Alexandre Ghiti May 23, 2025, 10:11 a.m. UTC | #4
On 5/22/25 22:04, Armin Wolf wrote:
> Am 22.05.25 um 16:13 schrieb Alexandre Ghiti:
>
>> The platform profile driver is loaded even on platforms that do not have
>> acpi enabled. The initialization of the sysfs entries was recently moved
>> from platform_profile_register() to the module init call, and those
>> entries need acpi_kobj to be initialized which is not the case when acpi
>> is disabled.
>>
>> This results in the following warning:
>>
>>   WARNING: CPU: 5 PID: 1 at fs/sysfs/group.c:131 
>> internal_create_group+0xa22/0xdd8
>>   Modules linked in:
>>   CPU: 5 UID: 0 PID: 1 Comm: swapper/0 Tainted: G W           
>> 6.15.0-rc7-dirty #6 PREEMPT
>>   Tainted: [W]=WARN
>>   Hardware name: riscv-virtio,qemu (DT)
>>   epc : internal_create_group+0xa22/0xdd8
>>    ra : internal_create_group+0xa22/0xdd8
>>
>>   Call Trace:
>>
>>   internal_create_group+0xa22/0xdd8
>>   sysfs_create_group+0x22/0x2e
>>   platform_profile_init+0x74/0xb2
>>   do_one_initcall+0x198/0xa9e
>>   kernel_init_freeable+0x6d8/0x780
>>   kernel_init+0x28/0x24c
>>   ret_from_fork+0xe/0x18
>>
>> Fix this by checking if acpi is enabled before trying to create sysfs
>> entries.
>
> I already submitted a patch for this problem (see 
> https://lore.kernel.org/linux-acpi/a6d92cdd-4dc3-4080-9ed9-5b1f02f247e0@gmx.de/T/)
> that only disables the legacy sysfs interface while keeping the 
> class-based interface functional
> as it does not depend on ACPI at all.


Great, I understand if your patchset is not merged for rc1 but it would 
be nice to have it merged in 6.16 though to fix riscv syzkaller 
instance. Perhaps you could add the Fixes tag that Arnd mentioned too?

Thanks,

Alex


>
> Thank,
> Armin Wolf
>
>> Fixes: 77be5cacb2c2 ("ACPI: platform_profile: Create class for ACPI 
>> platform profile")
>> Signed-off-by: Alexandre Ghiti <alexghiti@rivosinc.com>
>> ---
>>   drivers/acpi/platform_profile.c | 3 +++
>>   1 file changed, 3 insertions(+)
>>
>> diff --git a/drivers/acpi/platform_profile.c 
>> b/drivers/acpi/platform_profile.c
>> index ffbfd32f4cf1..b43f4459a4f6 100644
>> --- a/drivers/acpi/platform_profile.c
>> +++ b/drivers/acpi/platform_profile.c
>> @@ -688,6 +688,9 @@ static int __init platform_profile_init(void)
>>   {
>>       int err;
>>   +    if (acpi_disabled)
>> +        return -EOPNOTSUPP;
>> +
>>       err = class_register(&platform_profile_class);
>>       if (err)
>>           return err;
>
> _______________________________________________
> linux-riscv mailing list
> linux-riscv@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-riscv
Arnd Bergmann May 23, 2025, 10:44 a.m. UTC | #5
On Thu, May 22, 2025, at 22:04, Armin Wolf wrote:
> Am 22.05.25 um 16:13 schrieb Alexandre Ghiti:
>
> I already submitted a patch for this problem (see 
> https://lore.kernel.org/linux-acpi/a6d92cdd-4dc3-4080-9ed9-5b1f02f247e0@gmx.de/T/)
> that only disables the legacy sysfs interface while keeping the 
> class-based interface functional
> as it does not depend on ACPI at all.

Just for my understanding: what users of the platform profile are
there that work without ACPI? I see that CONFIG_ACPI_PLATFORM_PROFILE
is hidden under CONFIG_ACPI and cannot be selected in configurations
that turn off ACPI, so if that is an intended usecase, there is
probably still something wrong in Kconfig.

Should the driver be moved out of drivers/acpi to drivers/platform
in order to let non-ACPI platforms use it?

     Arnd
Rafael J. Wysocki May 23, 2025, 10:50 a.m. UTC | #6
On Fri, May 23, 2025 at 12:11 PM Alexandre Ghiti <alex@ghiti.fr> wrote:
>
> On 5/22/25 22:04, Armin Wolf wrote:
> > Am 22.05.25 um 16:13 schrieb Alexandre Ghiti:
> >
> >> The platform profile driver is loaded even on platforms that do not have
> >> acpi enabled. The initialization of the sysfs entries was recently moved
> >> from platform_profile_register() to the module init call, and those
> >> entries need acpi_kobj to be initialized which is not the case when acpi
> >> is disabled.
> >>
> >> This results in the following warning:
> >>
> >>   WARNING: CPU: 5 PID: 1 at fs/sysfs/group.c:131
> >> internal_create_group+0xa22/0xdd8
> >>   Modules linked in:
> >>   CPU: 5 UID: 0 PID: 1 Comm: swapper/0 Tainted: G W
> >> 6.15.0-rc7-dirty #6 PREEMPT
> >>   Tainted: [W]=WARN
> >>   Hardware name: riscv-virtio,qemu (DT)
> >>   epc : internal_create_group+0xa22/0xdd8
> >>    ra : internal_create_group+0xa22/0xdd8
> >>
> >>   Call Trace:
> >>
> >>   internal_create_group+0xa22/0xdd8
> >>   sysfs_create_group+0x22/0x2e
> >>   platform_profile_init+0x74/0xb2
> >>   do_one_initcall+0x198/0xa9e
> >>   kernel_init_freeable+0x6d8/0x780
> >>   kernel_init+0x28/0x24c
> >>   ret_from_fork+0xe/0x18
> >>
> >> Fix this by checking if acpi is enabled before trying to create sysfs
> >> entries.
> >
> > I already submitted a patch for this problem (see
> > https://lore.kernel.org/linux-acpi/a6d92cdd-4dc3-4080-9ed9-5b1f02f247e0@gmx.de/T/)
> > that only disables the legacy sysfs interface while keeping the
> > class-based interface functional
> > as it does not depend on ACPI at all.
>
>
> Great, I understand if your patchset is not merged for rc1 but it would
> be nice to have it merged in 6.16 though to fix riscv syzkaller
> instance. Perhaps you could add the Fixes tag that Arnd mentioned too?

I actually prefer your patch to the Armin's one because there are
questions regarding the latter (see the most recent message from Arnd
in this thread).

Thanks!


> >> Fixes: 77be5cacb2c2 ("ACPI: platform_profile: Create class for ACPI
> >> platform profile")
> >> Signed-off-by: Alexandre Ghiti <alexghiti@rivosinc.com>
> >> ---
> >>   drivers/acpi/platform_profile.c | 3 +++
> >>   1 file changed, 3 insertions(+)
> >>
> >> diff --git a/drivers/acpi/platform_profile.c
> >> b/drivers/acpi/platform_profile.c
> >> index ffbfd32f4cf1..b43f4459a4f6 100644
> >> --- a/drivers/acpi/platform_profile.c
> >> +++ b/drivers/acpi/platform_profile.c
> >> @@ -688,6 +688,9 @@ static int __init platform_profile_init(void)
> >>   {
> >>       int err;
> >>   +    if (acpi_disabled)
> >> +        return -EOPNOTSUPP;
> >> +
> >>       err = class_register(&platform_profile_class);
> >>       if (err)
> >>           return err;
> >
> > _______________________________________________
> > linux-riscv mailing list
> > linux-riscv@lists.infradead.org
> > http://lists.infradead.org/mailman/listinfo/linux-riscv
Rafael J. Wysocki May 23, 2025, 2:46 p.m. UTC | #7
On Fri, May 23, 2025 at 12:50 PM Rafael J. Wysocki <rafael@kernel.org> wrote:
>
> On Fri, May 23, 2025 at 12:11 PM Alexandre Ghiti <alex@ghiti.fr> wrote:
> >
> > On 5/22/25 22:04, Armin Wolf wrote:
> > > Am 22.05.25 um 16:13 schrieb Alexandre Ghiti:
> > >
> > >> The platform profile driver is loaded even on platforms that do not have
> > >> acpi enabled. The initialization of the sysfs entries was recently moved
> > >> from platform_profile_register() to the module init call, and those
> > >> entries need acpi_kobj to be initialized which is not the case when acpi
> > >> is disabled.
> > >>
> > >> This results in the following warning:
> > >>
> > >>   WARNING: CPU: 5 PID: 1 at fs/sysfs/group.c:131
> > >> internal_create_group+0xa22/0xdd8
> > >>   Modules linked in:
> > >>   CPU: 5 UID: 0 PID: 1 Comm: swapper/0 Tainted: G W
> > >> 6.15.0-rc7-dirty #6 PREEMPT
> > >>   Tainted: [W]=WARN
> > >>   Hardware name: riscv-virtio,qemu (DT)
> > >>   epc : internal_create_group+0xa22/0xdd8
> > >>    ra : internal_create_group+0xa22/0xdd8
> > >>
> > >>   Call Trace:
> > >>
> > >>   internal_create_group+0xa22/0xdd8
> > >>   sysfs_create_group+0x22/0x2e
> > >>   platform_profile_init+0x74/0xb2
> > >>   do_one_initcall+0x198/0xa9e
> > >>   kernel_init_freeable+0x6d8/0x780
> > >>   kernel_init+0x28/0x24c
> > >>   ret_from_fork+0xe/0x18
> > >>
> > >> Fix this by checking if acpi is enabled before trying to create sysfs
> > >> entries.
> > >
> > > I already submitted a patch for this problem (see
> > > https://lore.kernel.org/linux-acpi/a6d92cdd-4dc3-4080-9ed9-5b1f02f247e0@gmx.de/T/)
> > > that only disables the legacy sysfs interface while keeping the
> > > class-based interface functional
> > > as it does not depend on ACPI at all.
> >
> >
> > Great, I understand if your patchset is not merged for rc1 but it would
> > be nice to have it merged in 6.16 though to fix riscv syzkaller
> > instance. Perhaps you could add the Fixes tag that Arnd mentioned too?
>
> I actually prefer your patch to the Armin's one because there are
> questions regarding the latter (see the most recent message from Arnd
> in this thread).

And so it has been applied as 6.16 material now, thanks!

> > >> Fixes: 77be5cacb2c2 ("ACPI: platform_profile: Create class for ACPI
> > >> platform profile")
> > >> Signed-off-by: Alexandre Ghiti <alexghiti@rivosinc.com>
> > >> ---
> > >>   drivers/acpi/platform_profile.c | 3 +++
> > >>   1 file changed, 3 insertions(+)
> > >>
> > >> diff --git a/drivers/acpi/platform_profile.c
> > >> b/drivers/acpi/platform_profile.c
> > >> index ffbfd32f4cf1..b43f4459a4f6 100644
> > >> --- a/drivers/acpi/platform_profile.c
> > >> +++ b/drivers/acpi/platform_profile.c
> > >> @@ -688,6 +688,9 @@ static int __init platform_profile_init(void)
> > >>   {
> > >>       int err;
> > >>   +    if (acpi_disabled)
> > >> +        return -EOPNOTSUPP;
> > >> +
> > >>       err = class_register(&platform_profile_class);
> > >>       if (err)
> > >>           return err;
> > >
> > > _______________________________________________
> > > linux-riscv mailing list
> > > linux-riscv@lists.infradead.org
> > > http://lists.infradead.org/mailman/listinfo/linux-riscv
Alexandre Ghiti May 23, 2025, 8:01 p.m. UTC | #8
Hi Rafael,

On 5/23/25 16:46, Rafael J. Wysocki wrote:
> On Fri, May 23, 2025 at 12:50 PM Rafael J. Wysocki <rafael@kernel.org> wrote:
>> On Fri, May 23, 2025 at 12:11 PM Alexandre Ghiti <alex@ghiti.fr> wrote:
>>> On 5/22/25 22:04, Armin Wolf wrote:
>>>> Am 22.05.25 um 16:13 schrieb Alexandre Ghiti:
>>>>
>>>>> The platform profile driver is loaded even on platforms that do not have
>>>>> acpi enabled. The initialization of the sysfs entries was recently moved
>>>>> from platform_profile_register() to the module init call, and those
>>>>> entries need acpi_kobj to be initialized which is not the case when acpi
>>>>> is disabled.
>>>>>
>>>>> This results in the following warning:
>>>>>
>>>>>    WARNING: CPU: 5 PID: 1 at fs/sysfs/group.c:131
>>>>> internal_create_group+0xa22/0xdd8
>>>>>    Modules linked in:
>>>>>    CPU: 5 UID: 0 PID: 1 Comm: swapper/0 Tainted: G W
>>>>> 6.15.0-rc7-dirty #6 PREEMPT
>>>>>    Tainted: [W]=WARN
>>>>>    Hardware name: riscv-virtio,qemu (DT)
>>>>>    epc : internal_create_group+0xa22/0xdd8
>>>>>     ra : internal_create_group+0xa22/0xdd8
>>>>>
>>>>>    Call Trace:
>>>>>
>>>>>    internal_create_group+0xa22/0xdd8
>>>>>    sysfs_create_group+0x22/0x2e
>>>>>    platform_profile_init+0x74/0xb2
>>>>>    do_one_initcall+0x198/0xa9e
>>>>>    kernel_init_freeable+0x6d8/0x780
>>>>>    kernel_init+0x28/0x24c
>>>>>    ret_from_fork+0xe/0x18
>>>>>
>>>>> Fix this by checking if acpi is enabled before trying to create sysfs
>>>>> entries.
>>>> I already submitted a patch for this problem (see
>>>> https://lore.kernel.org/linux-acpi/a6d92cdd-4dc3-4080-9ed9-5b1f02f247e0@gmx.de/T/)
>>>> that only disables the legacy sysfs interface while keeping the
>>>> class-based interface functional
>>>> as it does not depend on ACPI at all.
>>>
>>> Great, I understand if your patchset is not merged for rc1 but it would
>>> be nice to have it merged in 6.16 though to fix riscv syzkaller
>>> instance. Perhaps you could add the Fixes tag that Arnd mentioned too?
>> I actually prefer your patch to the Armin's one because there are
>> questions regarding the latter (see the most recent message from Arnd
>> in this thread).
> And so it has been applied as 6.16 material now, thanks!


Thank you very much!

Alex


>
>>>>> Fixes: 77be5cacb2c2 ("ACPI: platform_profile: Create class for ACPI
>>>>> platform profile")
>>>>> Signed-off-by: Alexandre Ghiti <alexghiti@rivosinc.com>
>>>>> ---
>>>>>    drivers/acpi/platform_profile.c | 3 +++
>>>>>    1 file changed, 3 insertions(+)
>>>>>
>>>>> diff --git a/drivers/acpi/platform_profile.c
>>>>> b/drivers/acpi/platform_profile.c
>>>>> index ffbfd32f4cf1..b43f4459a4f6 100644
>>>>> --- a/drivers/acpi/platform_profile.c
>>>>> +++ b/drivers/acpi/platform_profile.c
>>>>> @@ -688,6 +688,9 @@ static int __init platform_profile_init(void)
>>>>>    {
>>>>>        int err;
>>>>>    +    if (acpi_disabled)
>>>>> +        return -EOPNOTSUPP;
>>>>> +
>>>>>        err = class_register(&platform_profile_class);
>>>>>        if (err)
>>>>>            return err;
>>>> _______________________________________________
>>>> linux-riscv mailing list
>>>> linux-riscv@lists.infradead.org
>>>> http://lists.infradead.org/mailman/listinfo/linux-riscv
> _______________________________________________
> linux-riscv mailing list
> linux-riscv@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-riscv
patchwork-bot+linux-riscv@kernel.org June 10, 2025, 4:28 p.m. UTC | #9
Hello:

This patch was applied to riscv/linux.git (fixes)
by Rafael J. Wysocki <rafael.j.wysocki@intel.com>:

On Thu, 22 May 2025 16:13:56 +0200 you wrote:
> The platform profile driver is loaded even on platforms that do not have
> acpi enabled. The initialization of the sysfs entries was recently moved
> from platform_profile_register() to the module init call, and those
> entries need acpi_kobj to be initialized which is not the case when acpi
> is disabled.
> 
> This results in the following warning:
> 
> [...]

Here is the summary with links:
  - drivers: acpi: Fix platform profile driver on !acpi platforms
    https://git.kernel.org/riscv/c/dd133162c9cf

You are awesome, thank you!
diff mbox series

Patch

diff --git a/drivers/acpi/platform_profile.c b/drivers/acpi/platform_profile.c
index ffbfd32f4cf1..b43f4459a4f6 100644
--- a/drivers/acpi/platform_profile.c
+++ b/drivers/acpi/platform_profile.c
@@ -688,6 +688,9 @@  static int __init platform_profile_init(void)
 {
 	int err;
 
+	if (acpi_disabled)
+		return -EOPNOTSUPP;
+
 	err = class_register(&platform_profile_class);
 	if (err)
 		return err;