]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
platform-msi: Add msi_remove_device_irq_domain() in platform_device_msi_free_irqs_all()
authorFrank Li <Frank.Li@nxp.com>
Mon, 14 Apr 2025 18:30:55 +0000 (14:30 -0400)
committerThomas Gleixner <tglx@linutronix.de>
Wed, 7 May 2025 15:49:00 +0000 (17:49 +0200)
platform_device_msi_init_and_alloc_irqs() performs two tasks: allocating
the MSI domain for a platform device, and allocate a number of MSIs in that
domain.

platform_device_msi_free_irqs_all() only frees the MSIs, and leaves the MSI
domain alive.

Given that platform_device_msi_init_and_alloc_irqs() is the sole tool a
platform device has to allocate platform MSIs, it makes sense for
platform_device_msi_free_irqs_all() to teardown the MSI domain at the same
time as the MSIs.

This avoids warnings and unexpected behaviours when a driver repeatedly
allocates and frees MSIs.

Signed-off-by: Frank Li <Frank.Li@nxp.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Acked-by: Marc Zyngier <maz@kernel.org>
Link: https://lore.kernel.org/all/20250414-ep-msi-v18-1-f69b49917464@nxp.com
drivers/base/platform-msi.c

index 0e60dd650b5e0dfae5face0655c96cb8f7e709d8..70db08f3ac6fae1219854e6ec343e6ad951a1897 100644 (file)
@@ -95,5 +95,6 @@ EXPORT_SYMBOL_GPL(platform_device_msi_init_and_alloc_irqs);
 void platform_device_msi_free_irqs_all(struct device *dev)
 {
        msi_domain_free_irqs_all(dev, MSI_DEFAULT_DOMAIN);
+       msi_remove_device_irq_domain(dev, MSI_DEFAULT_DOMAIN);
 }
 EXPORT_SYMBOL_GPL(platform_device_msi_free_irqs_all);