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

[Xen-devel] [PATCH 0/7] paravirtual IOMMU interface



The idea of a paravirtual IOMMU interface was last discussed on xen-devel
more than two years ago and narrowed down on a draft specification [1].
There was also an RFC patch series posted with an implementation, however
this was never followed through.

In this patch series I have tried to simplify the interface and therefore
have moved away from the draft specification.

Patches #1 - #3 in the series introduce 'bus frame numbers' into Xen (frame
numbers relating to the IOMMU rather than the MMU). The modifications are
in common code and so affect ARM as well as x86.

Patch #4 adds a pre-requisite method in iommu_ops and an implementation
for VT-d. I have not done an implmentation for AMD IOMMUs as my test hard-
ware is Intel based, but one may be added in future.

Patches #5 - #7 introduce the new 'iommu_op' hypercall with sub-operations
to query ranges reserved in the IOMMU, map and unmap pages, and flush the
IOTLB.

For testing purposes, I have implemented patches to a Linux PV dom0 to set
up a 1:1 BFN:GFN mapping and use normal swiotlb dma operations rather
then xen-swiotlb.

[1] https://lists.xenproject.org/archives/html/xen-devel/2016-02/msg01428.html

Paul Durrant (7):
  iommu: introduce the concept of BFN...
  iommu: make use of type-safe BFN and MFN in exported functions
  iommu: push use of type-safe BFN and MFN into iommu_ops
  vtd: add lookup_page method to iommu_ops
  public / x86: introduce __HYPERCALL_iommu_op
  x86: add iommu_op to query reserved ranges
  x86: add iommu_ops to map and unmap pages, and also to flush the IOTLB

 tools/flask/policy/modules/xen.if             |   1 +
 xen/arch/arm/p2m.c                            |   3 +-
 xen/arch/x86/Makefile                         |   1 +
 xen/arch/x86/hvm/hypercall.c                  |   1 +
 xen/arch/x86/hypercall.c                      |   1 +
 xen/arch/x86/iommu_op.c                       | 476 ++++++++++++++++++++++++++
 xen/arch/x86/mm.c                             |   7 +-
 xen/arch/x86/mm/p2m-ept.c                     |   8 +-
 xen/arch/x86/mm/p2m-pt.c                      |   8 +-
 xen/arch/x86/mm/p2m.c                         |  15 +-
 xen/arch/x86/pv/hypercall.c                   |   1 +
 xen/arch/x86/x86_64/mm.c                      |   5 +-
 xen/common/grant_table.c                      |  10 +-
 xen/common/memory.c                           |   4 +-
 xen/drivers/passthrough/amd/iommu_cmd.c       |  18 +-
 xen/drivers/passthrough/amd/iommu_map.c       |  85 ++---
 xen/drivers/passthrough/amd/pci_amd_iommu.c   |   4 +-
 xen/drivers/passthrough/arm/smmu.c            |  22 +-
 xen/drivers/passthrough/iommu.c               |  28 +-
 xen/drivers/passthrough/vtd/iommu.c           |  76 +++-
 xen/drivers/passthrough/vtd/iommu.h           |   2 +
 xen/drivers/passthrough/vtd/x86/vtd.c         |   3 +-
 xen/drivers/passthrough/x86/iommu.c           |   2 +-
 xen/include/Makefile                          |   2 +
 xen/include/asm-x86/hvm/svm/amd-iommu-proto.h |   8 +-
 xen/include/public/iommu_op.h                 | 127 +++++++
 xen/include/public/xen.h                      |   1 +
 xen/include/xen/hypercall.h                   |  12 +
 xen/include/xen/iommu.h                       |  42 ++-
 xen/include/xlat.lst                          |   5 +
 xen/include/xsm/dummy.h                       |   6 +
 xen/include/xsm/xsm.h                         |   6 +
 xen/xsm/dummy.c                               |   1 +
 xen/xsm/flask/hooks.c                         |   6 +
 xen/xsm/flask/policy/access_vectors           |   2 +
 35 files changed, 868 insertions(+), 131 deletions(-)
 create mode 100644 xen/arch/x86/iommu_op.c
 create mode 100644 xen/include/public/iommu_op.h
---
Cc: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
Cc: Daniel De Graaf <dgdegra@xxxxxxxxxxxxx>
Cc: George Dunlap <george.dunlap@xxxxxxxxxxxxx>
Cc: Ian Jackson <ian.jackson@xxxxxxxxxxxxx>
Cc: Jan Beulich <jbeulich@xxxxxxxx>
Cc: Julien Grall <julien.grall@xxxxxxx>
Cc: Jun Nakajima <jun.nakajima@xxxxxxxxx>
Cc: Kevin Tian <kevin.tian@xxxxxxxxx>
Cc: Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx>
Cc: Stefano Stabellini <sstabellini@xxxxxxxxxx>
Cc: Suravee Suthikulpanit <suravee.suthikulpanit@xxxxxxx>
Cc: Tim Deegan <tim@xxxxxxx>
Cc: Wei Liu <wei.liu2@xxxxxxxxxx>

-- 
2.11.0


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.