From: Shradha Gupta <shradhagu...@linux.microsoft.com> Sent: Friday, April 25, 2025 3:54 AM > > 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 descriptors.
I'm unclear from the code below whether the intent is to support dynamic allocation only x86, or on both x86 and arm64. On arm64, you've defined hv_msi_prepare_desc as NULL, but hv_msi_prepare is also defined as NULL on arm64, so I'm not sure what to conclude. MSI_FLAG_PCI_MSIX_ALLOC_DYN is being set for both architectures. In any case, please be explicit about your intent in the commit message. If the intent is to not support arm64, why is that? Michael > > Signed-off-by: Shradha Gupta <shradhagu...@linux.microsoft.com> > Reviewed-by: Haiyang Zhang <haiya...@microsoft.com> > --- > 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..f2fa6bdb6bb8 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 NULL > > 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 >