]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
ipmi: Change request_module to request_module_nowait
authorCorey Minyard <minyard@acm.org>
Tue, 20 Jun 2023 14:59:53 +0000 (09:59 -0500)
committerCorey Minyard <minyard@acm.org>
Tue, 20 Jun 2023 14:59:53 +0000 (09:59 -0500)
When probing for an ACPI-specified IPMI device, the code would request
that the acpi_ipmi module be loaded ACPI operations through IPMI can be
performed.  This could happen through module load context, for instance,
if an I2C module is loaded that caused the IPMI interface to be probed.

This is not allowed because a synchronous module load in this context
can result in an deadlock, and I was getting a warning:

[   23.967853] WARNING: CPU: 0 PID: 21 at kernel/module/kmod.c:144 __request_module+0x1de/0x2d0
[   23.968852] Modules linked in: i2c_i801 ipmi_ssif

The IPMI driver is not dependent on acpi_ipmi, so just change the called
to request_module_nowait to make the load asynchronous.

Signed-off-by: Corey Minyard <minyard@acm.org>
drivers/char/ipmi/ipmi_si_platform.c
drivers/char/ipmi/ipmi_ssif.c

index 505cc978c97a0c1923438090cf0853f7b5bbf2e0..70f73911457b5e14c30ad184f238d3fb814f6c47 100644 (file)
@@ -381,7 +381,7 @@ static int acpi_ipmi_probe(struct platform_device *pdev)
        dev_info(dev, "%pR regsize %d spacing %d irq %d\n",
                 res, io.regsize, io.regspacing, io.irq);
 
-       request_module("acpi_ipmi");
+       request_module_nowait("acpi_ipmi");
 
        return ipmi_si_add_smi(&io);
 }
index 3d21c39e2060ecf8618ffa133df1f9ee94ba08b8..df8dd50b4cbed055fce122627b28435bce7ab2e4 100644 (file)
@@ -1439,7 +1439,7 @@ static bool check_acpi(struct ssif_info *ssif_info, struct device *dev)
        if (acpi_handle) {
                ssif_info->addr_source = SI_ACPI;
                ssif_info->addr_info.acpi_info.acpi_handle = acpi_handle;
-               request_module("acpi_ipmi");
+               request_module_nowait("acpi_ipmi");
                return true;
        }
 #endif