All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [RFC PATCH 0/8] virtio/vhost DMAR support
@ 2016-03-25  2:13 Jason Wang
  2016-03-25  2:13 ` [Qemu-devel] [RFC PATCH 1/8] virtio: convert to use DMA api Jason Wang
                   ` (7 more replies)
  0 siblings, 8 replies; 19+ messages in thread
From: Jason Wang @ 2016-03-25  2:13 UTC (permalink / raw)
  To: mst, qemu-devel; +Cc: cornelia.huck, pbonzini, Jason Wang, peterx

Hi all:

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

- for virtio, do not assume address_space_memory and convert to use
  dma helpers.
- for vhost kernel, implement a device IOTLB by using device IOTLB API
  supported by 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, 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 (unsafe interrupt mode) 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.

Please reivew.

Jason Wang (8):
  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()
  virtio-pci: address space translation service (ATS) support
  intel_iommu: support device iotlb descriptor
  memory: handle alias for iommu notifier
  vhost_net: device IOTLB support

 exec.c                                    |  30 +++++
 hw/block/virtio-blk.c                     |   2 +-
 hw/char/virtio-serial-bus.c               |   3 +-
 hw/i386/intel_iommu.c                     |  92 ++++++++++++--
 hw/i386/intel_iommu_internal.h            |  13 +-
 hw/scsi/virtio-scsi.c                     |   4 +-
 hw/virtio/vhost-backend.c                 |  33 +++++
 hw/virtio/vhost.c                         | 203 ++++++++++++++++++++++++++----
 hw/virtio/virtio-pci.c                    |  23 +++-
 hw/virtio/virtio-pci.h                    |   4 +
 hw/virtio/virtio.c                        |  58 +++++----
 include/exec/memory.h                     |   7 ++
 include/hw/virtio/vhost-backend.h         |  14 +++
 include/hw/virtio/vhost.h                 |   6 +
 include/hw/virtio/virtio-access.h         |  64 ++++++++--
 include/hw/virtio/virtio-bus.h            |   1 +
 include/hw/virtio/virtio.h                |   4 +-
 include/standard-headers/linux/pci_regs.h |   1 +
 linux-headers/linux/vhost.h               |  35 ++++++
 memory.c                                  |   3 +
 20 files changed, 525 insertions(+), 75 deletions(-)

-- 
2.5.0

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

end of thread, other threads:[~2016-04-19 13:37 UTC | newest]

Thread overview: 19+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-03-25  2:13 [Qemu-devel] [RFC PATCH 0/8] virtio/vhost DMAR support Jason Wang
2016-03-25  2:13 ` [Qemu-devel] [RFC PATCH 1/8] virtio: convert to use DMA api Jason Wang
2016-04-19 13:37   ` Michael S. Tsirkin
2016-03-25  2:13 ` [Qemu-devel] [RFC PATCH 2/8] intel_iommu: name vtd address space with devfn Jason Wang
2016-03-28  2:02   ` Peter Xu
2016-03-30  1:12     ` Jason Wang
2016-03-30 11:12       ` Michael S. Tsirkin
2016-03-25  2:13 ` [Qemu-devel] [RFC PATCH 3/8] intel_iommu: allocate new key when creating new address space Jason Wang
2016-03-28  2:07   ` Peter Xu
2016-03-25  2:13 ` [Qemu-devel] [RFC PATCH 4/8] exec: introduce address_space_get_iotlb_entry() Jason Wang
2016-03-28  2:18   ` Peter Xu
2016-03-30  1:13     ` Jason Wang
2016-03-25  2:13 ` [Qemu-devel] [RFC PATCH 5/8] virtio-pci: address space translation service (ATS) support Jason Wang
2016-03-25  2:13 ` [Qemu-devel] [RFC PATCH 6/8] intel_iommu: support device iotlb descriptor Jason Wang
2016-03-28  3:37   ` Peter Xu
2016-03-30  5:08     ` Jason Wang
2016-03-30  5:21       ` Peter Xu
2016-03-25  2:13 ` [Qemu-devel] [RFC PATCH 7/8] memory: handle alias for iommu notifier Jason Wang
2016-03-25  2:13 ` [Qemu-devel] [RFC PATCH 8/8] vhost_net: device IOTLB support Jason Wang

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.