On Mon, Apr 28, 2025 at 01:47:22PM +0000, Michael Kelley wrote:
> 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

Thank you for the comments Michael, in my recent testing on arm64, turns
out this function is indeed needed for the complete support.
I will test this out more thoroughly on arm64 and include the arm64 support
in next version.

Regards,
Shradha.
> 
> > 
> > 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
> > 

Reply via email to