bus/pci: fix automatic interrupt type selection

Message ID 8f5b22d3bedef793bf489c230b52b145@iki.fi (mailing list archive)
State Superseded
Delegated to: Thomas Monjalon
Headers
Series bus/pci: fix automatic interrupt type selection |

Checks

Context Check Description
ci/checkpatch warning coding style issues
ci/loongarch-compilation warning apply patch failure
ci/Intel-compilation warning apply issues
ci/aws-unit-testing fail Unit Testing FAILURE

Commit Message

Pekka Riikonen June 20, 2025, 11:47 a.m. UTC
Check if kernel returns 0 interrupt vectors and try another interrupt
type in that case.  Failing to check the vector count can select an
interrupt type that's unusable.

Signed-off-by: Pekka Riikonen <priikone@iki.fi>
---
  drivers/bus/pci/linux/pci_vfio.c | 4 ++++
  1 file changed, 4 insertions(+)

                  * on PCI device MSIX size.
                  */
--
2.34.1
  

Comments

Thomas Monjalon June 27, 2025, 4 p.m. UTC | #1
20/06/2025 13:47, priikone@iki.fi:
> Check if kernel returns 0 interrupt vectors and try another interrupt
> type in that case.  Failing to check the vector count can select an
> interrupt type that's unusable.
> 
> Signed-off-by: Pekka Riikonen <priikone@iki.fi>

Please could you be explicit about the use case you are trying to fix?
  
Pekka Riikonen June 27, 2025, 7:33 p.m. UTC | #2
On 2025-06-27 19:00, Thomas Monjalon wrote:
> 20/06/2025 13:47, priikone@iki.fi:
>> Check if kernel returns 0 interrupt vectors and try another interrupt
>> type in that case.  Failing to check the vector count can select an
>> interrupt type that's unusable.
>> 
>> Signed-off-by: Pekka Riikonen <priikone@iki.fi>
> 
> Please could you be explicit about the use case you are trying to fix?

This particular case was with e1000em that only supported INTx, but the 
function selected MSI-X simply because it's the first one attempted, 
even though it got 0 vectors.  Enabling interrupts then failed.  If the 
function had checked the vector count it would have correctly selected 
INTx.  Now, my setup might have been quite old but it doesn't change 
that it selected wrong interrupt type.

Pekka
  
Thomas Monjalon June 27, 2025, 8:08 p.m. UTC | #3
27/06/2025 21:33, Pekka Riikonen:
> On 2025-06-27 19:00, Thomas Monjalon wrote:
> > 20/06/2025 13:47, priikone@iki.fi:
> >> Check if kernel returns 0 interrupt vectors and try another interrupt
> >> type in that case.  Failing to check the vector count can select an
> >> interrupt type that's unusable.
> >> 
> >> Signed-off-by: Pekka Riikonen <priikone@iki.fi>
> > 
> > Please could you be explicit about the use case you are trying to fix?
> 
> This particular case was with e1000em that only supported INTx, but the 
> function selected MSI-X simply because it's the first one attempted, 
> even though it got 0 vectors.  Enabling interrupts then failed.  If the 
> function had checked the vector count it would have correctly selected 
> INTx.  Now, my setup might have been quite old but it doesn't change 
> that it selected wrong interrupt type.

OK thank you, it helps for the review, and could be added to the commit log.

Adding PCI bus maintainers for review.
  

Patch

diff --git a/drivers/bus/pci/linux/pci_vfio.c 
b/drivers/bus/pci/linux/pci_vfio.c
index 5317170231..02e7d7e40b 100644
--- a/drivers/bus/pci/linux/pci_vfio.c
+++ b/drivers/bus/pci/linux/pci_vfio.c
@@ -237,6 +237,10 @@  pci_vfio_setup_interrupts(struct rte_pci_device 
*dev, int vfio_dev_fd)
                                 continue;
                 }

+               /* If no vectors, try another one */
+               if (irq.count == 0)
+                       continue;
+
                 /* Reallocate the efds and elist fields of intr_handle 
based