Re: [PATCH 4/5] PCI: add pci_irq_type() to query the allocated interrupt type

Bjorn Helgaas <[email protected]>
Newsgroups org.kernel.vger.rust-for-linux,dev.linux.lists.driver-core,org.kernel.vger.linux-kernel,org.kernel.vger.linux-pci
Message-ID <20260811211134.GA678959@bhelgaas>
On Tue, Aug 11, 2026 at 12:47:43AM +0200, Danilo Krummrich wrote:
> Add a helper that returns PCI_IRQ_MSIX, PCI_IRQ_MSI, or PCI_IRQ_INTX
> based on the interrupt type the PCI core selected after
> pci_alloc_irq_vectors().
> 
> Several drivers already open-code this check against pdev->msix_enabled
> and pdev->msi_enabled, or even open code this helper [1].
> 
> A common helper avoids the duplication and keeps drivers from accessing
> the bitfield directly (see also [2]).
> 
> Link: https://elixir.bootlin.com/linux/v7.1/source/drivers/net/ethernet/aquantia/atlantic/aq_pci_func.c#L196 [1]
> Inspired-by: John Hubbard <[email protected]>
> Link: https://lore.kernel.org/all/[email protected]/ [2]
> Signed-off-by: Danilo Krummrich <[email protected]>

Acked-by: Bjorn Helgaas <[email protected]>

In the subject line, to match drivers/pci/ history,

  PCI: Add pci_irq_type() ...

> ---
>  include/linux/pci.h | 25 +++++++++++++++++++++++++
>  1 file changed, 25 insertions(+)
> 
> diff --git a/include/linux/pci.h b/include/linux/pci.h
> index 64b308b6e61c..80b8561b5be0 100644
> --- a/include/linux/pci.h
> +++ b/include/linux/pci.h
> @@ -1783,6 +1783,26 @@ void pci_free_irq_vectors(struct pci_dev *dev);
>  int pci_irq_vector(struct pci_dev *dev, unsigned int nr);
>  const struct cpumask *pci_irq_get_affinity(struct pci_dev *pdev, int vec);
>  
> +/**
> + * pci_irq_type - Get the interrupt type of a PCI device
> + * @pdev: the PCI device to operate on
> + *
> + * Discriminate the interrupt type the PCI core selected for this device
> + * after a successful pci_alloc_irq_vectors() call.
> + *
> + * Return: %PCI_IRQ_MSIX, %PCI_IRQ_MSI, or %PCI_IRQ_INTX.
> + */
> +static inline unsigned int pci_irq_type(struct pci_dev *pdev)
> +{
> +	if (pdev->msix_enabled)
> +		return PCI_IRQ_MSIX;
> +
> +	if (pdev->msi_enabled)
> +		return PCI_IRQ_MSI;
> +
> +	return PCI_IRQ_INTX;
> +}
> +
>  #else
>  static inline int pci_msi_vec_count(struct pci_dev *dev) { return -ENOSYS; }
>  static inline void pci_disable_msi(struct pci_dev *dev) { }
> @@ -1845,6 +1865,11 @@ static inline const struct cpumask *pci_irq_get_affinity(struct pci_dev *pdev,
>  {
>  	return cpu_possible_mask;
>  }
> +
> +static inline unsigned int pci_irq_type(struct pci_dev *pdev)
> +{
> +	return PCI_IRQ_INTX;
> +}
>  #endif
>  
>  /**
> -- 
> 2.55.0
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.