mirror of
https://github.com/torvalds/linux.git
synced 2024-11-21 19:46:16 +00:00
irqchip/riscv-aplic: Prevent crash when MSI domain is missing
If the APLIC driver is probed before the IMSIC driver, the parent MSI
domain will be missing, which causes a NULL pointer dereference in
msi_create_device_irq_domain().
Avoid this by deferring probe until the parent MSI domain is available. Use
dev_err_probe() to avoid printing an error message when returning
-EPROBE_DEFER.
Fixes: ca8df97fe6
("irqchip/riscv-aplic: Add support for MSI-mode")
Signed-off-by: Samuel Holland <samuel.holland@sifive.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Link: https://lore.kernel.org/all/20241114200133.3069460-1-samuel.holland@sifive.com
This commit is contained in:
parent
f9ed1f7c2e
commit
1f181d1cda
@ -207,7 +207,8 @@ static int aplic_probe(struct platform_device *pdev)
|
|||||||
else
|
else
|
||||||
rc = aplic_direct_setup(dev, regs);
|
rc = aplic_direct_setup(dev, regs);
|
||||||
if (rc)
|
if (rc)
|
||||||
dev_err(dev, "failed to setup APLIC in %s mode\n", msi_mode ? "MSI" : "direct");
|
dev_err_probe(dev, rc, "failed to setup APLIC in %s mode\n",
|
||||||
|
msi_mode ? "MSI" : "direct");
|
||||||
|
|
||||||
#ifdef CONFIG_ACPI
|
#ifdef CONFIG_ACPI
|
||||||
if (!acpi_disabled)
|
if (!acpi_disabled)
|
||||||
|
@ -266,6 +266,9 @@ int aplic_msi_setup(struct device *dev, void __iomem *regs)
|
|||||||
if (msi_domain)
|
if (msi_domain)
|
||||||
dev_set_msi_domain(dev, msi_domain);
|
dev_set_msi_domain(dev, msi_domain);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!dev_get_msi_domain(dev))
|
||||||
|
return -EPROBE_DEFER;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!msi_create_device_irq_domain(dev, MSI_DEFAULT_DOMAIN, &aplic_msi_template,
|
if (!msi_create_device_irq_domain(dev, MSI_DEFAULT_DOMAIN, &aplic_msi_template,
|
||||||
|
Loading…
Reference in New Issue
Block a user