Allow dynamic MSI-X vector allocation for pci_hyperv PCI controller
by adding support for the flag MSI_FLAG_PCI_MSIX_ALLOC_DYN and using
pci_msix_prepare_desc() to prepare the MSI-X descriptors.
Feature support added for both x86 and ARM64
Signed-off-by: Shradha Gupta <shradhagupta@linux.microsoft.com>
Reviewed-by: Haiyang Zhang <haiyangz@microsoft.com>
---
Changes in v3:
* Add arm64 support
---
Changes in v2:
* split the patch to keep changes in PCI and pci_hyperv controller
seperate
* replace strings "pci vectors" by "MSI-X vectors"
---
drivers/pci/controller/pci-hyperv.c | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/drivers/pci/controller/pci-hyperv.c b/drivers/pci/controller/pci-hyperv.c
index ac27bda5ba26..8c8882cb0ad2 100644
--- a/drivers/pci/controller/pci-hyperv.c
+++ b/drivers/pci/controller/pci-hyperv.c
@@ -598,7 +598,8 @@ static unsigned int hv_msi_get_int_vector(struct irq_data *data)
return cfg->vector;
}
-#define hv_msi_prepare pci_msi_prepare
+#define hv_msi_prepare pci_msi_prepare
+#define hv_msix_prepare_desc pci_msix_prepare_desc
/**
* hv_arch_irq_unmask() - "Unmask" the IRQ by setting its current
@@ -727,6 +728,7 @@ static void hv_arch_irq_unmask(struct irq_data *data)
#define FLOW_HANDLER NULL
#define FLOW_NAME NULL
#define hv_msi_prepare NULL
+#define hv_msix_prepare_desc pci_msix_prepare_desc
struct hv_pci_chip_data {
DECLARE_BITMAP(spi_map, HV_PCI_MSI_SPI_NR);
@@ -2063,6 +2065,7 @@ static struct irq_chip hv_msi_irq_chip = {
static struct msi_domain_ops hv_msi_ops = {
.msi_prepare = hv_msi_prepare,
.msi_free = hv_msi_free,
+ .prepare_desc = hv_msix_prepare_desc,
};
/**
@@ -2084,7 +2087,7 @@ static int hv_pcie_init_irq_domain(struct hv_pcibus_device *hbus)
hbus->msi_info.ops = &hv_msi_ops;
hbus->msi_info.flags = (MSI_FLAG_USE_DEF_DOM_OPS |
MSI_FLAG_USE_DEF_CHIP_OPS | MSI_FLAG_MULTI_PCI_MSI |
- MSI_FLAG_PCI_MSIX);
+ MSI_FLAG_PCI_MSIX | MSI_FLAG_PCI_MSIX_ALLOC_DYN);
hbus->msi_info.handler = FLOW_HANDLER;
hbus->msi_info.handler_name = FLOW_NAME;
hbus->msi_info.data = hbus;
--
2.34.1
On Fri, May 09, 2025 at 03:13:22AM -0700, Shradha Gupta wrote: > Allow dynamic MSI-X vector allocation for pci_hyperv PCI controller > by adding support for the flag MSI_FLAG_PCI_MSIX_ALLOC_DYN and using > pci_msix_prepare_desc() to prepare the MSI-X descriptors. > > Feature support added for both x86 and ARM64 > > Signed-off-by: Shradha Gupta <shradhagupta@linux.microsoft.com> > Reviewed-by: Haiyang Zhang <haiyangz@microsoft.com> > --- > Changes in v3: > * Add arm64 support > --- > Changes in v2: > * split the patch to keep changes in PCI and pci_hyperv controller > seperate > * replace strings "pci vectors" by "MSI-X vectors" > --- > drivers/pci/controller/pci-hyperv.c | 7 +++++-- > 1 file changed, 5 insertions(+), 2 deletions(-) > > diff --git a/drivers/pci/controller/pci-hyperv.c b/drivers/pci/controller/pci-hyperv.c > index ac27bda5ba26..8c8882cb0ad2 100644 > --- a/drivers/pci/controller/pci-hyperv.c > +++ b/drivers/pci/controller/pci-hyperv.c > @@ -598,7 +598,8 @@ static unsigned int hv_msi_get_int_vector(struct irq_data *data) > return cfg->vector; > } > > -#define hv_msi_prepare pci_msi_prepare > +#define hv_msi_prepare pci_msi_prepare > +#define hv_msix_prepare_desc pci_msix_prepare_desc Please do not use custom macro unless its defintion changes based on some conditional. In this case, you should use pci_msix_prepare_desc directly for prepare_desc() callback. - Mani -- மணிவண்ணன் சதாசிவம்
On Mon, May 12, 2025 at 12:30:04PM +0530, Manivannan Sadhasivam wrote: > On Fri, May 09, 2025 at 03:13:22AM -0700, Shradha Gupta wrote: > > Allow dynamic MSI-X vector allocation for pci_hyperv PCI controller > > by adding support for the flag MSI_FLAG_PCI_MSIX_ALLOC_DYN and using > > pci_msix_prepare_desc() to prepare the MSI-X descriptors. > > > > Feature support added for both x86 and ARM64 > > > > Signed-off-by: Shradha Gupta <shradhagupta@linux.microsoft.com> > > Reviewed-by: Haiyang Zhang <haiyangz@microsoft.com> > > --- > > Changes in v3: > > * Add arm64 support > > --- > > Changes in v2: > > * split the patch to keep changes in PCI and pci_hyperv controller > > seperate > > * replace strings "pci vectors" by "MSI-X vectors" > > --- > > drivers/pci/controller/pci-hyperv.c | 7 +++++-- > > 1 file changed, 5 insertions(+), 2 deletions(-) > > > > diff --git a/drivers/pci/controller/pci-hyperv.c b/drivers/pci/controller/pci-hyperv.c > > index ac27bda5ba26..8c8882cb0ad2 100644 > > --- a/drivers/pci/controller/pci-hyperv.c > > +++ b/drivers/pci/controller/pci-hyperv.c > > @@ -598,7 +598,8 @@ static unsigned int hv_msi_get_int_vector(struct irq_data *data) > > return cfg->vector; > > } > > > > -#define hv_msi_prepare pci_msi_prepare > > +#define hv_msi_prepare pci_msi_prepare > > +#define hv_msix_prepare_desc pci_msix_prepare_desc > > Please do not use custom macro unless its defintion changes based on some > conditional. In this case, you should use pci_msix_prepare_desc directly for > prepare_desc() callback. > > - Mani > > -- > ??????????????????????????? ???????????????????????? Thanks for catching this Mani, I agree. I will fix this. regards, Shradha.
© 2016 - 2025 Red Hat, Inc.