bus/pci: fix automatic interrupt type selection
Checks
Commit Message
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
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?
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
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.
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