For supporting dynamic MSI-X vector allocation by PCI controllers, enabling
the flag MSI_FLAG_PCI_MSIX_ALLOC_DYN is not enough, msix_prepare_msi_desc()
to prepare the desc is also needed.
Export pci_msix_prepare_desc() to allow PCI controllers to support dynamic
MSI-X vector allocation.
Signed-off-by: Shradha Gupta <shradhagupta@linux.microsoft.com>
Reviewed-by: Haiyang Zhang <haiyangz@microsoft.com>
---
drivers/pci/msi/irqdomain.c | 5 +++--
include/linux/msi.h | 2 ++
2 files changed, 5 insertions(+), 2 deletions(-)
diff --git a/drivers/pci/msi/irqdomain.c b/drivers/pci/msi/irqdomain.c
index d7ba8795d60f..43129aa6d6c7 100644
--- a/drivers/pci/msi/irqdomain.c
+++ b/drivers/pci/msi/irqdomain.c
@@ -222,13 +222,14 @@ static void pci_irq_unmask_msix(struct irq_data *data)
pci_msix_unmask(irq_data_get_msi_desc(data));
}
-static void pci_msix_prepare_desc(struct irq_domain *domain, msi_alloc_info_t *arg,
- struct msi_desc *desc)
+void pci_msix_prepare_desc(struct irq_domain *domain, msi_alloc_info_t *arg,
+ struct msi_desc *desc)
{
/* Don't fiddle with preallocated MSI descriptors */
if (!desc->pci.mask_base)
msix_prepare_msi_desc(to_pci_dev(desc->dev), desc);
}
+EXPORT_SYMBOL_GPL(pci_msix_prepare_desc);
static const struct msi_domain_template pci_msix_template = {
.chip = {
diff --git a/include/linux/msi.h b/include/linux/msi.h
index 86e42742fd0f..d5864d5e75c2 100644
--- a/include/linux/msi.h
+++ b/include/linux/msi.h
@@ -691,6 +691,8 @@ struct irq_domain *pci_msi_create_irq_domain(struct fwnode_handle *fwnode,
struct irq_domain *parent);
u32 pci_msi_domain_get_msi_rid(struct irq_domain *domain, struct pci_dev *pdev);
struct irq_domain *pci_msi_get_device_domain(struct pci_dev *pdev);
+void pci_msix_prepare_desc(struct irq_domain *domain, msi_alloc_info_t *arg,
+ struct msi_desc *desc);
#else /* CONFIG_PCI_MSI */
static inline struct irq_domain *pci_msi_get_device_domain(struct pci_dev *pdev)
{
--
2.34.1
On Fri, Apr 25, 2025 at 03:53:57AM -0700, Shradha Gupta wrote:
> For supporting dynamic MSI-X vector allocation by PCI controllers, enabling
> the flag MSI_FLAG_PCI_MSIX_ALLOC_DYN is not enough, msix_prepare_msi_desc()
> to prepare the desc is also needed.
>
> Export pci_msix_prepare_desc() to allow PCI controllers to support dynamic
> MSI-X vector allocation.
>
> Signed-off-by: Shradha Gupta <shradhagupta@linux.microsoft.com>
> Reviewed-by: Haiyang Zhang <haiyangz@microsoft.com>
Thanks for the update and for splitting this from the hv driver
update. Will watch for Thomas's ack here.
For future postings, you might consider limiting the "To:" line to
people you expect to actually act on the patch, and moving the rest to
"Cc:".
> ---
> drivers/pci/msi/irqdomain.c | 5 +++--
> include/linux/msi.h | 2 ++
> 2 files changed, 5 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/pci/msi/irqdomain.c b/drivers/pci/msi/irqdomain.c
> index d7ba8795d60f..43129aa6d6c7 100644
> --- a/drivers/pci/msi/irqdomain.c
> +++ b/drivers/pci/msi/irqdomain.c
> @@ -222,13 +222,14 @@ static void pci_irq_unmask_msix(struct irq_data *data)
> pci_msix_unmask(irq_data_get_msi_desc(data));
> }
>
> -static void pci_msix_prepare_desc(struct irq_domain *domain, msi_alloc_info_t *arg,
> - struct msi_desc *desc)
> +void pci_msix_prepare_desc(struct irq_domain *domain, msi_alloc_info_t *arg,
> + struct msi_desc *desc)
> {
> /* Don't fiddle with preallocated MSI descriptors */
> if (!desc->pci.mask_base)
> msix_prepare_msi_desc(to_pci_dev(desc->dev), desc);
> }
> +EXPORT_SYMBOL_GPL(pci_msix_prepare_desc);
>
> static const struct msi_domain_template pci_msix_template = {
> .chip = {
> diff --git a/include/linux/msi.h b/include/linux/msi.h
> index 86e42742fd0f..d5864d5e75c2 100644
> --- a/include/linux/msi.h
> +++ b/include/linux/msi.h
> @@ -691,6 +691,8 @@ struct irq_domain *pci_msi_create_irq_domain(struct fwnode_handle *fwnode,
> struct irq_domain *parent);
> u32 pci_msi_domain_get_msi_rid(struct irq_domain *domain, struct pci_dev *pdev);
> struct irq_domain *pci_msi_get_device_domain(struct pci_dev *pdev);
> +void pci_msix_prepare_desc(struct irq_domain *domain, msi_alloc_info_t *arg,
> + struct msi_desc *desc);
> #else /* CONFIG_PCI_MSI */
> static inline struct irq_domain *pci_msi_get_device_domain(struct pci_dev *pdev)
> {
> --
> 2.34.1
>
On Fri, Apr 25 2025 at 11:37, Bjorn Helgaas wrote: Subject prefix wants to be PCI/MSI git log --format=oneline path/to/file gives you a pretty decent hint > On Fri, Apr 25, 2025 at 03:53:57AM -0700, Shradha Gupta wrote: >> For supporting dynamic MSI-X vector allocation by PCI controllers, enabling >> the flag MSI_FLAG_PCI_MSIX_ALLOC_DYN is not enough, msix_prepare_msi_desc() >> to prepare the desc is also needed. Please write things out: ... to prepare the MSI descriptor .... This is not twitter. >> Export pci_msix_prepare_desc() to allow PCI controllers to support dynamic >> MSI-X vector allocation. >> >> Signed-off-by: Shradha Gupta <shradhagupta@linux.microsoft.com> >> Reviewed-by: Haiyang Zhang <haiyangz@microsoft.com> > Thanks for the update and for splitting this from the hv driver > update. Will watch for Thomas's ack here. Other than that: Reviewed-by: Thomas Gleixner <tglx@linutronix.de>
On Mon, Apr 28, 2025 at 02:22:57PM +0200, Thomas Gleixner wrote: > On Fri, Apr 25 2025 at 11:37, Bjorn Helgaas wrote: > > Subject prefix wants to be PCI/MSI > > git log --format=oneline path/to/file > > gives you a pretty decent hint > > > > > On Fri, Apr 25, 2025 at 03:53:57AM -0700, Shradha Gupta wrote: > >> For supporting dynamic MSI-X vector allocation by PCI controllers, enabling > >> the flag MSI_FLAG_PCI_MSIX_ALLOC_DYN is not enough, msix_prepare_msi_desc() > >> to prepare the desc is also needed. > > Please write things out: ... to prepare the MSI descriptor .... > > This is not twitter. > > >> Export pci_msix_prepare_desc() to allow PCI controllers to support dynamic > >> MSI-X vector allocation. > >> > >> Signed-off-by: Shradha Gupta <shradhagupta@linux.microsoft.com> > >> Reviewed-by: Haiyang Zhang <haiyangz@microsoft.com> > > > Thanks for the update and for splitting this from the hv driver > > update. Will watch for Thomas's ack here. > > Other than that: > > Reviewed-by: Thomas Gleixner <tglx@linutronix.de> Thank you for all the comments Thomas. I'll be mindful of these going forward. regards, Shradha.
On Fri, Apr 25, 2025 at 11:37:48AM -0500, Bjorn Helgaas wrote:
> On Fri, Apr 25, 2025 at 03:53:57AM -0700, Shradha Gupta wrote:
> > For supporting dynamic MSI-X vector allocation by PCI controllers, enabling
> > the flag MSI_FLAG_PCI_MSIX_ALLOC_DYN is not enough, msix_prepare_msi_desc()
> > to prepare the desc is also needed.
> >
> > Export pci_msix_prepare_desc() to allow PCI controllers to support dynamic
> > MSI-X vector allocation.
> >
> > Signed-off-by: Shradha Gupta <shradhagupta@linux.microsoft.com>
> > Reviewed-by: Haiyang Zhang <haiyangz@microsoft.com>
>
> Thanks for the update and for splitting this from the hv driver
> update. Will watch for Thomas's ack here.
>
> For future postings, you might consider limiting the "To:" line to
> people you expect to actually act on the patch, and moving the rest to
> "Cc:".
Thanks Bjorn, Noted.
>
> > ---
> > drivers/pci/msi/irqdomain.c | 5 +++--
> > include/linux/msi.h | 2 ++
> > 2 files changed, 5 insertions(+), 2 deletions(-)
> >
> > diff --git a/drivers/pci/msi/irqdomain.c b/drivers/pci/msi/irqdomain.c
> > index d7ba8795d60f..43129aa6d6c7 100644
> > --- a/drivers/pci/msi/irqdomain.c
> > +++ b/drivers/pci/msi/irqdomain.c
> > @@ -222,13 +222,14 @@ static void pci_irq_unmask_msix(struct irq_data *data)
> > pci_msix_unmask(irq_data_get_msi_desc(data));
> > }
> >
> > -static void pci_msix_prepare_desc(struct irq_domain *domain, msi_alloc_info_t *arg,
> > - struct msi_desc *desc)
> > +void pci_msix_prepare_desc(struct irq_domain *domain, msi_alloc_info_t *arg,
> > + struct msi_desc *desc)
> > {
> > /* Don't fiddle with preallocated MSI descriptors */
> > if (!desc->pci.mask_base)
> > msix_prepare_msi_desc(to_pci_dev(desc->dev), desc);
> > }
> > +EXPORT_SYMBOL_GPL(pci_msix_prepare_desc);
> >
> > static const struct msi_domain_template pci_msix_template = {
> > .chip = {
> > diff --git a/include/linux/msi.h b/include/linux/msi.h
> > index 86e42742fd0f..d5864d5e75c2 100644
> > --- a/include/linux/msi.h
> > +++ b/include/linux/msi.h
> > @@ -691,6 +691,8 @@ struct irq_domain *pci_msi_create_irq_domain(struct fwnode_handle *fwnode,
> > struct irq_domain *parent);
> > u32 pci_msi_domain_get_msi_rid(struct irq_domain *domain, struct pci_dev *pdev);
> > struct irq_domain *pci_msi_get_device_domain(struct pci_dev *pdev);
> > +void pci_msix_prepare_desc(struct irq_domain *domain, msi_alloc_info_t *arg,
> > + struct msi_desc *desc);
> > #else /* CONFIG_PCI_MSI */
> > static inline struct irq_domain *pci_msi_get_device_domain(struct pci_dev *pdev)
> > {
> > --
> > 2.34.1
> >
© 2016 - 2026 Red Hat, Inc.