[Top][All Lists]

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

[Qemu-devel] [PATCH qemu v11 00/11] spapr: vfio: Enable Dynamic DMA wind

From: Alexey Kardashevskiy
Subject: [Qemu-devel] [PATCH qemu v11 00/11] spapr: vfio: Enable Dynamic DMA windows (DDW)
Date: Wed, 15 Jul 2015 19:44:56 +1000

Each Partitionable Endpoint (IOMMU group) has an address range on a PCI bus
where devices are allowed to do DMA. These ranges are called DMA windows.
By default, there is a single DMA window, 1 or 2GB big, mapped at zero
on a PCI bus.

PAPR defines a DDW RTAS API which allows pseries guests
querying the hypervisor about DDW support and capabilities (page size mask
for now). A pseries guest may request an additional (to the default)
DMA windows using this RTAS API.
The existing pseries Linux guests request an additional window as big as
the guest RAM and map the entire guest window which effectively creates
direct mapping of the guest memory to a PCI bus.

This patchset reworks PPC64 IOMMU code and adds necessary structures
to support big windows.

Once a Linux guest discovers the presence of DDW, it does:
1. query hypervisor about number of available windows and page size masks;
2. create a window with the biggest possible page size (today 4K/64K/16M);
3. map the entire guest RAM via H_PUT_TCE* hypercalls;
4. switche dma_ops to direct_dma_ops on the selected PE.

Once this is done, H_PUT_TCE is not called anymore for 64bit devices and
the guest does not waste time on DMA map/unmap operations.

Note that 32bit devices won't use DDW and will keep using the default
DMA window so KVM optimizations will be required (to be posted later).

This patchset adds DDW support for pseries. The host kernel changes are
required, available in the current upstream.

This patchset is based on git://github.com/dgibson/qemu.git spapr-next branch.

This compiles but the feature can be only enabled with
"[RFC PATCH qemu v3 0/4] vfio: SPAPR IOMMU v2 (memory preregistration support)".

Please comment. Thanks!

* moved VFIO Container changes to a separate patchset:
[RFC PATCH qemu v3 0/4] vfio: SPAPR IOMMU v2 (memory preregistration support)
* reworked "spapr_pci: Enable vfio-pci hotplug" to reenable acceleration
for emulated devices after last VFIO is removed
* replaced @has_vfio with a vfio devices counter; removed RCU to track container
release (not needed)

* reworked "spapr_pci: Enable vfio-pci hotplug"
* added "vfio: Unregister IOMMU notifiers when container is destroyed"
* updated kernel header update with a tag

* removed "vfio: spapr: Move SPAPR-related code to a separate file"
* rebased on top of current dwg/spapr-next
* moved hw/vfio/* related patches to the end of the patchset
* included kernel headers update
* reworked "spapr_pci: Enable vfio-pci hotplug" a lot

* reworked unreferencing in "spapr_iommu: Introduce "enabled" state for TCE 
* added clean-up patch "spapr_iommu: Remove vfio_accel flag from sPAPRTCETable"
* rebased on latest spapr-next

* bunch of cleanups, renames after David+Thomas+Michael review
* patches are reorganized and those which do not need the host kernel headers
update are put first and can be pulled if these are good enough :)

* spapr-pci-vfio-host-bridge is now a synonim of spapr-pci-host-bridge -
same PHB can host emulated and VFIO devices
* changed patches order
* lot of small changes

* TCE tables got "enabled" state and are persistent, i.e. not recreated
every reboot
* added v2 of SPAPR_TCE_IOMMU
* fixed migration for emulated PHB with enabled DDW
* huge pile of other changes

* reimplemented the whole thing
* machine reset and ddw-reset RTAS call both remove all TCE tables and
create the default one
* IOMMU group id is not needed to use VFIO PHB anymore, multiple groups
are supported on the same VFIO container and virtual PHB

* removed "reset" from API now
* reworked machine versions
* applied multiple comments
* includes David's machine QOM rework as this patchset adds a new machine type

* tested on emulated PHB
* removed "ddw" machine property, now it is PHB property
* disabled by default
* defined "pseries-2.2" machine which enables DDW by default
* fixed reset() and reference counting
# Please edit the description for the branch
#   _vfio-v11
# Lines starting with '#' will be stripped.

Alexey Kardashevskiy (11):
  vmstate: Define VARRAY with VMS_ALLOC
  spapr_pci: Convert finish_realize() to
  spapr_iommu: Move table allocation to helpers
  spapr_iommu: Introduce "enabled" state for TCE table
  spapr_iommu: Remove vfio_accel flag from sPAPRTCETable
  spapr_iommu: Add root memory region
  spapr_pci: Do complete reset of DMA config when resetting PHB
  spapr_vfio_pci: Remove redundant spapr-pci-vfio-host-bridge
  spapr_pci: Enable vfio-pci hotplug
  spapr_pci_vfio: Enable multiple groups per container
  spapr_pci/spapr_pci_vfio: Support Dynamic DMA Windows (DDW)

 hw/ppc/Makefile.objs        |   6 +-
 hw/ppc/spapr.c              |   5 +
 hw/ppc/spapr_iommu.c        | 227 ++++++++++++++++++++++++++------
 hw/ppc/spapr_pci.c          | 310 +++++++++++++++++++++++++++++++++-----------
 hw/ppc/spapr_pci_vfio.c     | 242 ++++++++++++++++++++++------------
 hw/ppc/spapr_rtas_ddw.c     | 304 +++++++++++++++++++++++++++++++++++++++++++
 hw/ppc/spapr_vio.c          |   9 +-
 hw/vfio/common.c            |  23 ++--
 include/hw/pci-host/spapr.h |  50 +++++--
 include/hw/ppc/spapr.h      |  34 +++--
 include/hw/vfio/vfio.h      |   3 +-
 include/migration/vmstate.h |  10 ++
 trace-events                |  10 +-
 13 files changed, 990 insertions(+), 243 deletions(-)
 create mode 100644 hw/ppc/spapr_rtas_ddw.c


reply via email to

[Prev in Thread] Current Thread [Next in Thread]