From: Nipun Gupta <nipun.gupta@amd.com>
Date: Tue, 23 Apr 2024 16:40:20 +0530
Subject: genirq/msi: Add MSI allocation helper and export MSI functions
Git-commit: 06fe8fd6808562971637c6b133c806bcf49097ad
Patch-mainline: v6.10-rc1
References: jsc#PED-10968

MSI functions for allocation and free can be directly used by
the device drivers without any wrapper provided by bus drivers.
So export these MSI functions.

Also, add a wrapper API to allocate MSIs providing only the
number of interrupts rather than range for simpler driver usage.

Signed-off-by: Nipun Gupta <nipun.gupta@amd.com>
Reviewed-by: Thomas Gleixner <tglx@linutronix.de>
Link: https://lore.kernel.org/r/20240423111021.1686144-1-nipun.gupta@amd.com
Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
Acked-by: Joerg Roedel <jroedel@suse.de>
---
 include/linux/msi.h |    6 ++++++
 kernel/irq/msi.c    |    2 ++
 2 files changed, 8 insertions(+)

--- a/include/linux/msi.h
+++ b/include/linux/msi.h
@@ -664,6 +664,12 @@ void platform_msi_device_domain_free(str
 void *platform_msi_get_host_data(struct irq_domain *domain);
 
 bool msi_device_has_isolated_msi(struct device *dev);
+
+static inline int msi_domain_alloc_irqs(struct device *dev, unsigned int domid, int nirqs)
+{
+	return msi_domain_alloc_irqs_range(dev, domid, 0, nirqs - 1);
+}
+
 #else /* CONFIG_GENERIC_MSI_IRQ */
 static inline bool msi_device_has_isolated_msi(struct device *dev)
 {
--- a/kernel/irq/msi.c
+++ b/kernel/irq/msi.c
@@ -1414,6 +1414,7 @@ int msi_domain_alloc_irqs_range(struct d
 	msi_unlock_descs(dev);
 	return ret;
 }
+EXPORT_SYMBOL_GPL(msi_domain_alloc_irqs_range);
 
 /**
  * msi_domain_alloc_irqs_all_locked - Allocate all interrupts from a MSI interrupt domain
@@ -1606,6 +1607,7 @@ void msi_domain_free_irqs_range(struct d
 	msi_domain_free_irqs_range_locked(dev, domid, first, last);
 	msi_unlock_descs(dev);
 }
+EXPORT_SYMBOL_GPL(msi_domain_free_irqs_all);
 
 /**
  * msi_domain_free_irqs_all_locked - Free all interrupts from a MSI interrupt domain
