From: Jason Wang <jasowang@redhat.com>
To: mst@redhat.com, qemu-devel@nongnu.org
Cc: cornelia.huck@de.ibm.com, pbonzini@redhat.com,
Jason Wang <jasowang@redhat.com>,
peterx@redhat.com
Subject: [Qemu-devel] [RFC PATCH 0/8] virtio/vhost DMAR support
Date: Fri, 25 Mar 2016 10:13:21 +0800 [thread overview]
Message-ID: <1458872009-13342-1-git-send-email-jasowang@redhat.com> (raw)
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
next reply other threads:[~2016-03-25 2:13 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-03-25 2:13 Jason Wang [this message]
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
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1458872009-13342-1-git-send-email-jasowang@redhat.com \
--to=jasowang@redhat.com \
--cc=cornelia.huck@de.ibm.com \
--cc=mst@redhat.com \
--cc=pbonzini@redhat.com \
--cc=peterx@redhat.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.