[PATCH v4 0/6] ASID support in vhost-vdpa net

Eugenio Pérez posted 6 patches 6 days, 7 hours ago
Failed in applying to current master (apply log)
include/hw/virtio/vhost-vdpa.h               |   8 +-
include/standard-headers/asm-x86/bootparam.h |   7 +-
include/standard-headers/drm/drm_fourcc.h    |  69 ++++++++++
include/standard-headers/linux/ethtool.h     |   1 +
include/standard-headers/linux/input.h       |  12 +-
include/standard-headers/linux/pci_regs.h    |   1 +
include/standard-headers/linux/vhost_types.h |  11 +-
include/standard-headers/linux/virtio_ids.h  |  14 +-
linux-headers/asm-arm64/kvm.h                |  27 ++++
linux-headers/asm-generic/unistd.h           |   4 +-
linux-headers/asm-riscv/kvm.h                |  20 +++
linux-headers/asm-riscv/unistd.h             |   3 +-
linux-headers/asm-x86/kvm.h                  |  11 +-
linux-headers/asm-x86/mman.h                 |  14 --
linux-headers/linux/kvm.h                    |  56 +++++++-
linux-headers/linux/userfaultfd.h            |  10 +-
linux-headers/linux/vfio.h                   |   4 +-
linux-headers/linux/vhost.h                  |  26 +++-
hw/virtio/vhost-vdpa.c                       |  65 ++++-----
net/vhost-vdpa.c                             | 134 ++++++++++++++++++-
hw/virtio/trace-events                       |   4 +-
21 files changed, 408 insertions(+), 93 deletions(-)
[PATCH v4 0/6] ASID support in vhost-vdpa net
Posted by Eugenio Pérez 6 days, 7 hours ago
Control VQ is the way net devices use to send changes to the device state, like
the number of active queues or its mac address.

QEMU needs to intercept this queue so it can track these changes and is able to
migrate the device. It can do it from 1576dbb5bbc4 ("vdpa: Add x-svq to
NetdevVhostVDPAOptions"). However, to enable x-svq implies to shadow all VirtIO
device's virtqueues, which will damage performance.

This series adds address space isolation, so the device and the guest
communicate directly with them (passthrough) and CVQ communication is split in
two: The guest communicates with QEMU and QEMU forwards the commands to the
device.

For example, NIC_RX_FILTER_CHANGED without the need of x-svq parameter can be
received in QMP now.

This series is based on [1], and this needs to be applied on top of that.  Each
one of them adds a feature on isolation and could be merged individually once
conflicts are solved.

Comments are welcome. Thanks!

v4:
- Rebased on last CVQ start series, that allocated CVQ cmd bufs at load
- Squash vhost_vdpa_cvq_group_is_independent.
- Do not check for cvq index on vhost_vdpa_net_prepare, we only have one
  that callback registered in that NetClientInfo.
- Add comment specifying behavior if device does not support _F_ASID
- Update headers to a later Linux commit to not to remove SETUP_RNG_SEED

v3:
- Do not return an error but just print a warning if vdpa device initialization
  returns failure while getting AS num of VQ groups
- Delete extra newline

v2:
- Much as commented on series [1], handle vhost_net backend through
  NetClientInfo callbacks instead of directly.
- Fix not freeing SVQ properly when device does not support CVQ
- Add BIT_ULL missed checking device's backend feature for _F_ASID.

[1] https://lists.nongnu.org/archive/html/qemu-devel/2022-08/msg00349.html

Eugenio Pérez (6):
  linux-headers: Update kernel headers
  vdpa: Use v->shadow_vqs_enabled in vhost_vdpa_svqs_start & stop
  vdpa: Allocate SVQ unconditionally
  vdpa: Add asid parameter to vhost_vdpa_dma_map/unmap
  vdpa: Store x-svq parameter in VhostVDPAState
  vdpa: Always start CVQ in SVQ mode

 include/hw/virtio/vhost-vdpa.h               |   8 +-
 include/standard-headers/asm-x86/bootparam.h |   7 +-
 include/standard-headers/drm/drm_fourcc.h    |  69 ++++++++++
 include/standard-headers/linux/ethtool.h     |   1 +
 include/standard-headers/linux/input.h       |  12 +-
 include/standard-headers/linux/pci_regs.h    |   1 +
 include/standard-headers/linux/vhost_types.h |  11 +-
 include/standard-headers/linux/virtio_ids.h  |  14 +-
 linux-headers/asm-arm64/kvm.h                |  27 ++++
 linux-headers/asm-generic/unistd.h           |   4 +-
 linux-headers/asm-riscv/kvm.h                |  20 +++
 linux-headers/asm-riscv/unistd.h             |   3 +-
 linux-headers/asm-x86/kvm.h                  |  11 +-
 linux-headers/asm-x86/mman.h                 |  14 --
 linux-headers/linux/kvm.h                    |  56 +++++++-
 linux-headers/linux/userfaultfd.h            |  10 +-
 linux-headers/linux/vfio.h                   |   4 +-
 linux-headers/linux/vhost.h                  |  26 +++-
 hw/virtio/vhost-vdpa.c                       |  65 ++++-----
 net/vhost-vdpa.c                             | 134 ++++++++++++++++++-
 hw/virtio/trace-events                       |   4 +-
 21 files changed, 408 insertions(+), 93 deletions(-)

--
2.31.1