[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <BN9PR11MB527628F9C11C51A334A2861C8CA39@BN9PR11MB5276.namprd11.prod.outlook.com>
Date: Wed, 15 Feb 2023 01:50:50 +0000
From: "Tian, Kevin" <kevin.tian@...el.com>
To: "Chatre, Reinette" <reinette.chatre@...el.com>,
"tglx@...utronix.de" <tglx@...utronix.de>,
"darwi@...utronix.de" <darwi@...utronix.de>,
"bhelgaas@...gle.com" <bhelgaas@...gle.com>,
"maz@...nel.org" <maz@...nel.org>,
"bagasdotme@...il.com" <bagasdotme@...il.com>
CC: "Liu, Jing2" <jing2.liu@...el.com>,
"linux-pci@...r.kernel.org" <linux-pci@...r.kernel.org>,
"linux-kernel@...r.kernel.org" <linux-kernel@...r.kernel.org>
Subject: RE: [RFC PATCH] PCI/MSI: Clarify usage of pci_msix_free_irq()
> From: Chatre, Reinette <reinette.chatre@...el.com>
> Sent: Wednesday, February 15, 2023 5:13 AM
>
> pci_msix_free_irq() is used to free an interrupt on
> a PCI/MSI-X interrupt domain.
>
> The API description specifies that the interrupt to
> be freed was allocated via pci_msix_alloc_irq_at().
> This description limits the usage of pci_msix_free_irq()
> since pci_msix_free_irq() can also be used to free
> MSI-X interrupts allocated with, for example,
> pci_alloc_irq_vectors().
>
> Remove the text stating that the interrupt to be freed had
> to be allocated with pci_msix_alloc_irq_at(). The needed
> struct msi_map need not be from pci_msix_alloc_irq_at()
> but can be created from scratch using pci_irq_vector()
> to obtain the Linux IRQ number. Highlight that
> pci_msix_free_irq() cannot be used to disable MSI-X to
> guide users that, for example, pci_free_irq_vectors()
> remains to be needed.
>
> Signed-off-by: Reinette Chatre <reinette.chatre@...el.com>
> ---
> Dear Maintainers,
>
> Is my understanding correct?
>
> For example, from my understanding the following is
> correct API usage:
>
> /*
> * Enable MSI-X and allocate num interrupts.
> */
> pci_alloc_irq_vectors()
>
> /*
> * Free one of the interrupts allocated via pci_alloc_irq_vectors().
> * Possibly called num times, but not required.
> */
> pci_msix_free_irq()
>
> /*
> * Ensure all remaining interrupts freed and MSI-X disabled.
> */
> pci_free_irq_vectors()
>
> This could be interpreted as an asymmetric usage of the API, yet
> found to be practical when trying to use these new calls.
>
> Your feedback is appreciated.
I asked same question before. Thomas gave exactly same thought. [1]
"
The preallocated descriptors are only relevant during setup, but not
post setup. So yes, you can do:
pci_alloc_irq_vectors(dev, 10, 10, PCI_IRQ_MSIX);
and then
map = { .index = 9, .virq = $IRQ };
pci_msix_free_irq(dev, &map);
It just works.
"
but looks the comment was not adjusted accordingly.
So,
Reviewed-by: Kevin Tian <kevin.tian@...el.com>
[1] https://lore.kernel.org/lkml/87r0xsd8j4.ffs@tglx/
>
> Regards,
>
> Reinette
>
> drivers/pci/msi/api.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/pci/msi/api.c b/drivers/pci/msi/api.c
> index b8009aa11f3c..be679aa5db64 100644
> --- a/drivers/pci/msi/api.c
> +++ b/drivers/pci/msi/api.c
> @@ -163,11 +163,11 @@ EXPORT_SYMBOL_GPL(pci_msix_alloc_irq_at);
>
> /**
> * pci_msix_free_irq - Free an interrupt on a PCI/MSIX interrupt domain
> - * which was allocated via pci_msix_alloc_irq_at()
> *
> * @dev: The PCI device to operate on
> * @map: A struct msi_map describing the interrupt to free
> - * as returned from the allocation function.
> + *
> + * Undo an interrupt vector allocation. Does not disable MSI-X.
> */
> void pci_msix_free_irq(struct pci_dev *dev, struct msi_map map)
> {
> --
> 2.34.1
Powered by blists - more mailing lists