Re: [RFC v3 0/5] Introduce MMIO/PIO dispatch file descriptors (ioregionfd)

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

 



On 21/02/21 13:04, Elena Afanasova wrote:
This patchset introduces a KVM dispatch mechanism which can be used
for handling MMIO/PIO accesses over file descriptors without returning
from ioctl(KVM_RUN). This allows device emulation to run in another task
separate from the vCPU task.

This is achieved through KVM vm ioctl for registering MMIO/PIO regions and
a wire protocol that KVM uses to communicate with a task handling an
MMIO/PIO access.

TODOs:
* Implement KVM_EXIT_IOREGIONFD_FAILURE
* Add non-x86 arch support
* Add kvm-unittests
* Flush waiters if ioregion is deleted

Hi ELena,

as a quick thing that jumped at me before starting the review, you should add a test for the new API in tools/testing/selftests/kvm, as well as documentation. Ideally, patch 4 would also add a testcase that fails before and passes afterwards.

Also, does this work already with io_uring?

Paolo

v3:
  - add FAST_MMIO bus support
  - add KVM_IOREGION_DEASSIGN flag
  - rename kvm_ioregion read/write file descriptors
  - split ioregionfd signal handling support into two patches
  - move ioregion_interrupted flag to ioregion_ctx
  - reorder ioregion_ctx fields
  - rework complete_ioregion operations
  - add signal handling support for crossing a page boundary case
  - change wire protocol license
  - fix ioregionfd state machine
  - remove ioregionfd_cmd info and drop appropriate macros
  - add comment on ioregionfd cmds/replies serialization
  - drop kvm_io_bus_finish/prepare()

Elena Afanasova (5):
   KVM: add initial support for KVM_SET_IOREGION
   KVM: x86: add support for ioregionfd signal handling
   KVM: implement wire protocol
   KVM: add ioregionfd context
   KVM: enforce NR_IOBUS_DEVS limit if kmemcg is disabled

  arch/x86/kvm/Kconfig          |   1 +
  arch/x86/kvm/Makefile         |   1 +
  arch/x86/kvm/vmx/vmx.c        |  40 ++-
  arch/x86/kvm/x86.c            | 273 +++++++++++++++++-
  include/linux/kvm_host.h      |  28 ++
  include/uapi/linux/ioregion.h |  30 ++
  include/uapi/linux/kvm.h      |  25 ++
  virt/kvm/Kconfig              |   3 +
  virt/kvm/eventfd.c            |  25 ++
  virt/kvm/eventfd.h            |  14 +
  virt/kvm/ioregion.c           | 529 ++++++++++++++++++++++++++++++++++
  virt/kvm/ioregion.h           |  15 +
  virt/kvm/kvm_main.c           |  36 ++-
  13 files changed, 996 insertions(+), 24 deletions(-)
  create mode 100644 include/uapi/linux/ioregion.h
  create mode 100644 virt/kvm/eventfd.h
  create mode 100644 virt/kvm/ioregion.c
  create mode 100644 virt/kvm/ioregion.h





[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux