From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:60674) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1axqiv-0002iy-5p for qemu-devel@nongnu.org; Wed, 04 May 2016 02:55:59 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1axqij-0006Sp-By for qemu-devel@nongnu.org; Wed, 04 May 2016 02:55:47 -0400 Received: from e23smtp04.au.ibm.com ([202.81.31.146]:40928) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1axqii-0006Oe-MK for qemu-devel@nongnu.org; Wed, 04 May 2016 02:55:41 -0400 Received: from localhost by e23smtp04.au.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Wed, 4 May 2016 16:55:20 +1000 From: Alexey Kardashevskiy Date: Wed, 4 May 2016 16:52:12 +1000 Message-Id: <1462344751-28281-1-git-send-email-aik@ozlabs.ru> Subject: [Qemu-devel] [PATCH qemu v16 00/19] spapr: vfio: Enable Dynamic DMA windows (DDW) List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Alexey Kardashevskiy , qemu-ppc@nongnu.org, Alexander Graf , David Gibson , Alex Williamson , Paolo Bonzini 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 on pseries. This patchset is based on the latest upstream. This includes "vmstate: Define VARRAY with VMS_ALLOC" as it has been accepted but has not been merged to upstream yet. Please comment. Thanks! Paolo, I did cc: you on this because of 02/19 and 03/19, would be great to get an opinion as the rest of the series relies on it to do vfio-pci hot _un_plug properly. Thanks! Alexey Kardashevskiy (19): vfio: Delay DMA address space listener release memory: Call region_del() callbacks on memory listener unregistering memory: Fix IOMMU replay base address vmstate: Define VARRAY with VMS_ALLOC vfio: Check that IOMMU MR translates to system address space spapr_pci: Use correct DMA LIOBN when composing the device tree spapr_iommu: Move table allocation to helpers spapr_iommu: Introduce "enabled" state for TCE table spapr_iommu: Finish renaming vfio_accel to need_vfio spapr_iommu: Migrate full state spapr_iommu: Add root memory region spapr_pci: Reset DMA config on PHB reset memory: Add reporting of supported page sizes vfio: spapr: Add DMA memory preregistering (SPAPR IOMMU v2) spapr_pci: Add and export DMA resetting helper vfio: Add host side DMA window capabilities spapr_iommu, vfio, memory: Notify IOMMU about starting/stopping being used by VFIO vfio/spapr: Create DMA window dynamically (SPAPR IOMMU v2) spapr_pci/spapr_pci_vfio: Support Dynamic DMA Windows (DDW) hw/ppc/Makefile.objs | 1 + hw/ppc/spapr.c | 5 + hw/ppc/spapr_iommu.c | 228 ++++++++++++++++++++++++------ hw/ppc/spapr_pci.c | 96 +++++++++---- hw/ppc/spapr_rtas_ddw.c | 292 ++++++++++++++++++++++++++++++++++++++ hw/ppc/spapr_vio.c | 8 +- hw/vfio/Makefile.objs | 1 + hw/vfio/common.c | 319 +++++++++++++++++++++++++++++++++++------- hw/vfio/prereg.c | 137 ++++++++++++++++++ include/exec/memory.h | 22 ++- include/hw/pci-host/spapr.h | 10 +- include/hw/ppc/spapr.h | 31 +++- include/hw/vfio/vfio-common.h | 21 ++- include/migration/vmstate.h | 10 ++ memory.c | 64 ++++++++- target-ppc/kvm_ppc.h | 2 +- trace-events | 12 +- 17 files changed, 1120 insertions(+), 139 deletions(-) create mode 100644 hw/ppc/spapr_rtas_ddw.c create mode 100644 hw/vfio/prereg.c -- 2.5.0.rc3