[PATCH] platform/wmi: Allow wmi module to load when acpi_disabled is set

Armin Wolf W_Armin at gmx.de
Wed Nov 11 17:07:37 PST 2026


Am 11.11.26 um 14:16 schrieb Hans de Goede:

> The core wmi module provides symbols which may be used by other modules.
> These other modules may still function when acpi_disabled is set, but
> the current behavior of acpi_wmi_init() returning -ENODEV when it is set
> causes loading these modules to fail because the wmi module these depend
> on fails to load with -ENODEV.
>
> One example of this is booting a kernel with both DT and ACPI/WMI support
> on an arm64 systems with devicetree which will lead to acpi_disabled being
> set. Trying to load the amdgpu module will fail in this case because it
> uses symbols from the drivers/acpi/video module which in turn uses symbols
> from the wmi module. Note the video module itself already contains handling
> to still load when acpi_disables is set for similar reasons.
>
> Fix this by allowing the wmi module to still load and also register
> the class and bus instances since some exported functions like
> wmi_driver_register() rely on these being valid.

Reviewed-by: Armin Wolf <W_Armin at gmx.de>

> Signed-off-by: Hans de Goede <johannes.goede at oss.qualcomm.com>
> ---
>   drivers/platform/wmi/core.c | 9 +++++----
>   1 file changed, 5 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/platform/wmi/core.c b/drivers/platform/wmi/core.c
> index 529825dcfbfe..412f2e23b01d 100644
> --- a/drivers/platform/wmi/core.c
> +++ b/drivers/platform/wmi/core.c
> @@ -1573,9 +1573,6 @@ static int __init acpi_wmi_init(void)
>   {
>   	int error;
>   
> -	if (acpi_disabled)
> -		return -ENODEV;
> -
>   	error = class_register(&wmi_bus_class);
>   	if (error)
>   		return error;
> @@ -1584,6 +1581,9 @@ static int __init acpi_wmi_init(void)
>   	if (error)
>   		goto err_unreg_class;
>   
> +	if (acpi_disabled)
> +		return 0;
> +
>   	error = platform_driver_register(&acpi_wmi_driver);
>   	if (error) {
>   		pr_err("Error loading mapper\n");
> @@ -1603,7 +1603,8 @@ static int __init acpi_wmi_init(void)
>   
>   static void __exit acpi_wmi_exit(void)
>   {
> -	platform_driver_unregister(&acpi_wmi_driver);
> +	if (!acpi_disabled)
> +		platform_driver_unregister(&acpi_wmi_driver);
>   	bus_unregister(&wmi_bus_type);
>   	class_unregister(&wmi_bus_class);
>   }



More information about the linux-riscv mailing list