[PATCH] drivers: acpi: Fix platform profile driver on !acpi platforms
Armin Wolf
W_Armin at gmx.de
Thu May 22 13:04:22 PDT 2025
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 at 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;
More information about the linux-riscv
mailing list