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
> 


Reply via email to