All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH for 2.8 00/11] virtio/vhost DMAR support
@ 2016-08-30  3:06 Jason Wang
  2016-08-30  3:06 ` [Qemu-devel] [PATCH for 2.8 01/11] linux-headers: update to 4.8-rc4 Jason Wang
                   ` (12 more replies)
  0 siblings, 13 replies; 52+ messages in thread
From: Jason Wang @ 2016-08-30  3:06 UTC (permalink / raw)
  To: mst, qemu-devel
  Cc: pbonzini, peterx, cornelia.huck, wexu, vkaplans, Jason Wang

Hi all:

As the userspace vitio driver became popular, more and more request
were received for secure DMA environemt (DMAR). So this series tries
to makeDMAR works for virtio/vhost. The idea is let virtio/vhost
co-work with userspace iommu implememtation. This is done through:

- for virtio, when platform supports IOMMU (VIRTIO_F_IOMMU_PLATFORM),
  virtio will not assume address_space_memory, instead a transport
  specific method were introduced for querying the dma address space
  and dma helpers were used in device emulation codes.
- for vhost, implement a device IOTLB by using device IOTLB API
  supported by recent kernel. With this API, vhost kernel can query
  IOTLB entry for a specified iova from qemu, qemu can invalidate an
  arbitrary range of iova in vhost kernel.

The device IOTLB API is totaly architecture independent, an example
implementation was done with intel iommu by:

- implement basic ATS (Address Translation Service) for virtio-pci,
  this will make device IOTLB visible for iommu driver in guest.
- implement device IOTLB descriptor processing in intel iommu (enabled
  through device-iotlb=on), and trigger the device IOTLB invalidation
  in vhost through iommu notifier.

It could be easily ported to other IOMMU or architecture even if it
doesn't support device IOTLB. (e.g just invalidate the vhost IOTLB
during IOMMU IOTLB invalidation).

Test was done by:

- intel_iommu=on/strict in guest.
- vfio l2fwd in guest.

This main use case is the programs that use fixed mapping in guest
(e.g dpdk). If 1G hugepage were used in guest, thanks to the SLLPS
support, we can get 100% TLB hit rate for l2fwd in guest.

For the normal kernel driver which uses lots of dynamic mapping and
unmapping, we may see performance penalty, this could be optimized in
the future.

TODO:
- non ATS support (userspace IOTLB snooping)
- more platforms and IOMMU support
- performance optimizations

Changes from RFC:
- rebase to HEAD
- switch to use new vhost device IOTLB API
- use the new feature bit VIRITO_F_IOMMU_PLATFORM
- finalize basic ATS implementation
- add ATSR for Root port ATS transaction
- fix the iommu notifier handling during unregistering
- use snprintf() in patch 3
- correc the loop in address_space_get_iotlb_entry()
- small tweak on the address calculation during device iotlb
  descriptor processing.

Please reivew.

Jason Wang (10):
  linux-headers: update to 4.8-rc4
  virtio: convert to use DMA api
  intel_iommu: name vtd address space with devfn
  intel_iommu: allocate new key when creating new address space
  exec: introduce address_space_get_iotlb_entry()
  intel_iommu: support device iotlb descriptor
  virtio-pci: address space translation service (ATS) support
  acpi: add ATSR for q35
  memory: handle alias for iommu notifier
  vhost_net: device IOTLB support

Peter Xu (1):
  Revert "intel_iommu: Throw hw_error on notify_started"

 exec.c                                             |  33 +++++
 hw/block/virtio-blk.c                              |   2 +-
 hw/char/virtio-serial-bus.c                        |   3 +-
 hw/i386/acpi-build.c                               |   9 ++
 hw/i386/intel_iommu.c                              | 100 +++++++++++---
 hw/i386/intel_iommu_internal.h                     |  13 +-
 hw/i386/x86-iommu.c                                |  17 +++
 hw/pci/pcie.c                                      |  16 +++
 hw/scsi/virtio-scsi.c                              |   4 +-
 hw/virtio/vhost-backend.c                          | 104 ++++++++++++++
 hw/virtio/vhost.c                                  | 149 +++++++++++++++++----
 hw/virtio/virtio-pci.c                             |  21 +++
 hw/virtio/virtio-pci.h                             |   4 +
 hw/virtio/virtio.c                                 |  62 +++++----
 include/exec/memory.h                              |   6 +
 include/hw/acpi/acpi-defs.h                        |  12 ++
 include/hw/i386/x86-iommu.h                        |   1 +
 include/hw/pci/pcie.h                              |   4 +
 include/hw/virtio/vhost-backend.h                  |  14 ++
 include/hw/virtio/vhost.h                          |   4 +
 include/hw/virtio/virtio-access.h                  |  87 ++++++++++--
 include/hw/virtio/virtio-bus.h                     |   1 +
 include/hw/virtio/virtio.h                         |   8 +-
 include/standard-headers/linux/input-event-codes.h |  32 +++++
 include/standard-headers/linux/input.h             |   1 +
 include/standard-headers/linux/pci_regs.h          |   1 +
 include/standard-headers/linux/virtio_config.h     |  10 +-
 include/standard-headers/linux/virtio_ids.h        |   1 +
 include/standard-headers/linux/virtio_net.h        |   3 +
 linux-headers/asm-arm/kvm.h                        |   4 +-
 linux-headers/asm-arm64/kvm.h                      |   2 +
 linux-headers/asm-s390/kvm.h                       |  41 ++++++
 linux-headers/asm-x86/unistd_x32.h                 |   4 +-
 linux-headers/linux/kvm.h                          |  18 ++-
 linux-headers/linux/vhost.h                        |  33 +++++
 memory.c                                           |   9 ++
 net/tap.c                                          |   1 +
 37 files changed, 740 insertions(+), 94 deletions(-)

-- 
2.7.4

^ permalink raw reply	[flat|nested] 52+ messages in thread

end of thread, other threads:[~2016-09-06  6:30 UTC | newest]

Thread overview: 52+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-08-30  3:06 [Qemu-devel] [PATCH for 2.8 00/11] virtio/vhost DMAR support Jason Wang
2016-08-30  3:06 ` [Qemu-devel] [PATCH for 2.8 01/11] linux-headers: update to 4.8-rc4 Jason Wang
2016-09-05  1:24   ` Wei Xu
2016-09-05  1:26     ` Michael S. Tsirkin
2016-09-06  6:28       ` Jason Wang
2016-08-30  3:06 ` [Qemu-devel] [PATCH for 2.8 02/11] virtio: convert to use DMA api Jason Wang
2016-08-30  7:31   ` Cornelia Huck
2016-08-30 10:02     ` Michael S. Tsirkin
2016-08-30 10:21       ` Michael S. Tsirkin
2016-08-30 11:11         ` [Qemu-devel] qom and debug (was: [PATCH for 2.8 02/11] virtio: convert to use DMA api) Cornelia Huck
2016-08-30 11:15           ` Michael S. Tsirkin
2016-08-30 11:37             ` [Qemu-devel] qom and debug Cornelia Huck
2016-08-30 11:57               ` Michael S. Tsirkin
2016-08-31  2:47     ` [Qemu-devel] [PATCH for 2.8 02/11] virtio: convert to use DMA api Jason Wang
2016-09-05  2:26   ` Wei Xu
2016-09-06  6:30     ` Jason Wang
2016-09-05  2:33   ` Michael S. Tsirkin
2016-08-30  3:06 ` [Qemu-devel] [PATCH for 2.8 03/11] intel_iommu: name vtd address space with devfn Jason Wang
2016-09-05  6:56   ` Wei Xu
2016-08-30  3:06 ` [Qemu-devel] [PATCH for 2.8 04/11] intel_iommu: allocate new key when creating new address space Jason Wang
2016-08-30  3:06 ` [Qemu-devel] [PATCH for 2.8 05/11] exec: introduce address_space_get_iotlb_entry() Jason Wang
2016-08-30  3:06 ` [Qemu-devel] [PATCH for 2.8 06/11] intel_iommu: support device iotlb descriptor Jason Wang
2016-08-30 13:16   ` Peter Xu
2016-08-31  2:54     ` Jason Wang
2016-09-01  1:26       ` Peter Xu
2016-08-30  3:06 ` [Qemu-devel] [PATCH for 2.8 07/11] virtio-pci: address space translation service (ATS) support Jason Wang
2016-08-30 13:21   ` Peter Xu
2016-08-31  2:55     ` Jason Wang
2016-08-30  3:06 ` [Qemu-devel] [PATCH for 2.8 08/11] acpi: add ATSR for q35 Jason Wang
2016-08-30  3:06 ` [Qemu-devel] [PATCH for 2.8 09/11] memory: handle alias for iommu notifier Jason Wang
2016-08-30 13:28   ` Peter Xu
2016-08-30  3:06 ` [Qemu-devel] [PATCH for 2.8 10/11] Revert "intel_iommu: Throw hw_error on notify_started" Jason Wang
2016-08-30  3:37   ` Alex Williamson
2016-08-31  2:45     ` Jason Wang
2016-09-01  2:29       ` Peter Xu
2016-09-01  2:43         ` Alex Williamson
2016-09-01  3:58           ` Peter Xu
2016-09-02  4:15             ` David Gibson
2016-09-02  5:37               ` Peter Xu
2016-09-02  6:10                 ` David Gibson
2016-09-02  6:15                   ` Peter Xu
2016-09-02  6:18                     ` Peter Xu
2016-09-02  7:00                       ` David Gibson
2016-09-02  9:31                         ` Peter Xu
2016-09-02 15:13                           ` Alex Williamson
2016-09-05  6:28                             ` Peter Xu
2016-08-30  3:06 ` [Qemu-devel] [PATCH for 2.8 11/11] vhost_net: device IOTLB support Jason Wang
2016-09-01  3:34   ` Peter Xu
2016-09-01  7:36     ` Jason Wang
2016-09-02  5:47       ` Peter Xu
2016-08-30  3:25 ` [Qemu-devel] [PATCH for 2.8 00/11] virtio/vhost DMAR support no-reply
2016-08-30  3:29 ` no-reply

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.