qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v1 0/4] Support dynamic MSI-X allocation


From: Cédric Le Goater
Subject: Re: [PATCH v1 0/4] Support dynamic MSI-X allocation
Date: Fri, 15 Sep 2023 09:42:06 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.13.0

On 9/15/23 09:40, Liu, Jing2 wrote:
Friendly ping to have your valuable inputs and comments.
Thanks very much.

I think that was done. We are waiting for the v2.

Thanks,

C.



BRs,
Jing

On 8/22/2023 3:29 PM, Jing Liu wrote:
Changes since RFC v1:
- RFC v1: https://www.mail-archive.com/qemu-
devel@nongnu.org/msg978637.html
- Revise the comments. (Alex)
- Report error of getting irq info and remove the trace of failure
   case. (Alex, Cédric)
- Only store dynamic allocation flag as a bool type and test
   accordingly. (Alex)
- Move dynamic allocation detection to vfio_msix_early_setup(). (Alex)
- Change the condition logic in vfio_msix_vector_do_use() that moving
   the defer_kvm_irq_routing test out and create a common place to update
   nr_vectors. (Alex)
- Consolidate the way of MSI-X enabling during device initialization and
   interrupt restoring that uses fd = -1 trick. Create a function doing
   that. (Alex)

Before kernel v6.5, dynamic allocation of MSI-X interrupts was not supported.
Qemu therefore when allocating a new interrupt, should first release all
previously allocated interrupts (including disable of MSI-X) and re-allocate all
interrupts that includes the new one.

The kernel series [1] adds the support of dynamic MSI-X allocation to vfio-pci
and uses the existing flag VFIO_IRQ_INFO_NORESIZE to guide user space, that
when dynamic MSI-X is supported the flag is cleared.

This series makes the behavior for VFIO PCI devices when dynamic MSI-X
allocation is supported. When guest unmasks an interrupt, Qemu can directly
allocate an interrupt on host for this and has nothing to do with the previously
allocated ones. Therefore, host only allocates interrupts for those unmasked
(enabled) interrupts inside guest when dynamic MSI-X allocation is supported by
device.

When guests enable MSI-X with all of the vectors masked, Qemu need match the
state to enable MSI-X with no vector enabled. During migration restore, Qemu
also need enable MSI-X first in dynamic allocation mode, to avoid the guest
unused vectors being allocated on host. To consolidate them, we use vector 0
with an invalid fd to get MSI-X enabled and create a common function for this.
This is cleaner than setting userspace triggering and immediately release.

Any feedback is appreciated.

Jing

[1] https://lwn.net/Articles/931679/

Jing Liu (4):
   vfio/pci: detect the support of dynamic MSI-X allocation
   vfio/pci: enable vector on dynamic MSI-X allocation
   vfio/pci: use an invalid fd to enable MSI-X
   vfio/pci: enable MSI-X in interrupt restoring on dynamic allocation

  hw/vfio/pci.c        | 126 +++++++++++++++++++++++++++++++++----------
  hw/vfio/pci.h        |   1 +
  hw/vfio/trace-events |   2 +-
  3 files changed, 101 insertions(+), 28 deletions(-)

--
2.27.0





reply via email to

[Prev in Thread] Current Thread [Next in Thread]