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 would make sense for platform_device_msi_free_irqs_all() to teardown the MSI domain at the same time as the MSIs.
This also avoids warnings and unexpected behaviours when a driver repeatedly allocates and frees MSIs.
Acked-by: Marc Zyngier maz@kernel.org Signed-off-by: Frank Li Frank.Li@nxp.com --- Change from v14 to v16 - use Marc Zyngier's suggested commit message - Add Marc Zyngier's ack tag
change from v14 to v15 - none
change from v13 to v14 - bring back from v9 and remove fixup and cc stable before it is new use case. --- drivers/base/platform-msi.c | 1 + 1 file changed, 1 insertion(+)
diff --git a/drivers/base/platform-msi.c b/drivers/base/platform-msi.c index 0e60dd650b5e0..70db08f3ac6fa 100644 --- a/drivers/base/platform-msi.c +++ b/drivers/base/platform-msi.c @@ -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);