Received: by 2002:ac0:bc90:0:0:0:0:0 with SMTP id a16csp680856img; Fri, 22 Mar 2019 06:28:45 -0700 (PDT) X-Google-Smtp-Source: APXvYqxOjq2yjP3qqnOdM1ZxL4DkRS38TaUKqiQm2xTg/55pdtvHxxVPgZKDygCL+6ICGhA0MJ6+ X-Received: by 2002:a63:1723:: with SMTP id x35mr8675205pgl.364.1553261325164; Fri, 22 Mar 2019 06:28:45 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1553261325; cv=none; d=google.com; s=arc-20160816; b=XW5fOsLBIQI6E2U8TxDWkBz6KMAaid+lSWmQGlCbrHI1DCAUdLq3P8W4VwvBG6eEak x2P9DNfeuUWVnFCwQEDnr1ZH4HN+Z12U+GJCHNP3MSYhBqAwjabrZF8CXAwogUoOfoHe OBxH/SIRskCvG0JJcMHV7J1h4gSJ7aKCNk3fWyMpAYBR9wTFIlAMEyjdU82OYesu0Wsu jNgEmNv6QbcZR2xqUKUsA/UDinqkYwcn3NIiYxxikHn7B0LdWmV8L8e0o/498Udez3it gnzqKcQhE7gHl+sMvGoTbiMCxiAGbUE7fYAViiCsVP7+FlbsiarxmEMIvJKcpHNdC6lQ d4vg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding :content-language:in-reply-to:mime-version:user-agent:date :message-id:from:references:cc:to:subject; bh=9KuMnDW//m9zg04oouxs0n9Lisa68t0Lm+LzAhhIGBc=; b=iH6Le9BrfNQsut/LAe8mllXnvfJD4MlnlybsSk3IAYmwOcuYpcB46fZJeUDfyJJ8Ax MUe0h+b9W7TfSJJ9xNX/5WxW/lRlVijaE3EHOhVHDLKgcG2/LTZHMuqrw32BN70OArgI L84F8cUBnkSHr97BK7gEdodX4/rzKBwXEUgkysby2SKr+qr1Gjf3mp1LqYpGyWjFpNlk bNkxGHYG/h6ZpgNPf3GYOhf6LXU07aBxiMmrD+/+Y4OVlFTQBAia0gTbDf01XfejkMj1 o1ZdBs1X0bjrWvJepNywYVbFeercy2MCxtkJWKnVo0qM1GcLmQNPyt3qIcEy0RGK1/QM dEog== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id d16si6492142pgi.148.2019.03.22.06.28.27; Fri, 22 Mar 2019 06:28:45 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728334AbfCVN1Z (ORCPT + 99 others); Fri, 22 Mar 2019 09:27:25 -0400 Received: from mx1.redhat.com ([209.132.183.28]:35424 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728146AbfCVN1Z (ORCPT ); Fri, 22 Mar 2019 09:27:25 -0400 Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 34D7630832DC; Fri, 22 Mar 2019 13:27:24 +0000 (UTC) Received: from [10.36.116.167] (ovpn-116-167.ams2.redhat.com [10.36.116.167]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 0A6B860857; Fri, 22 Mar 2019 13:27:17 +0000 (UTC) Subject: Re: [PATCH v6 00/22] SMMUv3 Nested Stage Setup To: eric.auger.pro@gmail.com, iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org, kvm@vger.kernel.org, kvmarm@lists.cs.columbia.edu, joro@8bytes.org, alex.williamson@redhat.com, jacob.jun.pan@linux.intel.com, yi.l.liu@linux.intel.com, jean-philippe.brucker@arm.com, will.deacon@arm.com, robin.murphy@arm.com Cc: kevin.tian@intel.com, ashok.raj@intel.com, marc.zyngier@arm.com, christoffer.dall@arm.com, peter.maydell@linaro.org, vincent.stehle@arm.com References: <20190317172232.1068-1-eric.auger@redhat.com> From: Auger Eric Message-ID: <1281b754-3a66-1dd2-5e7f-6dc853f09a90@redhat.com> Date: Fri, 22 Mar 2019 14:27:16 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.4.0 MIME-Version: 1.0 In-Reply-To: <20190317172232.1068-1-eric.auger@redhat.com> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.44]); Fri, 22 Mar 2019 13:27:24 +0000 (UTC) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi, On 3/17/19 6:22 PM, Eric Auger wrote: > This series allows a virtualizer to program the nested stage mode. > This is useful when both the host and the guest are exposed with > an SMMUv3 and a PCI device is assigned to the guest using VFIO. > > In this mode, the physical IOMMU must be programmed to translate > the two stages: the one set up by the guest (IOVA -> GPA) and the > one set up by the host VFIO driver as part of the assignment process > (GPA -> HPA). > > On Intel, this is traditionnaly achieved by combining the 2 stages > into a single physical stage. However this relies on the capability > to trap on each guest translation structure update. This is possible > by using the VTD Caching Mode. Unfortunately the ARM SMMUv3 does > not offer a similar mechanism. > > However, the ARM SMMUv3 architecture supports 2 physical stages! Those > were devised exactly with that use case in mind. Assuming the HW > implements both stages (optional), the guest now can use stage 1 > while the host uses stage 2. > > This assumes the virtualizer has means to propagate guest settings > to the host SMMUv3 driver. This series brings this VFIO/IOMMU > infrastructure. Those services are: > - bind the guest stage 1 configuration to the stream table entry > - propagate guest TLB invalidations > - bind MSI IOVAs > - propagate faults collected at physical level up to the virtualizer > > This series largely reuses the user API and infrastructure originally > devised for SVA/SVM and patches submitted by Jacob, Yi Liu, Tianyu in > [1-2] and Jean-Philippe [3-4]. > > Best Regards > > Eric > > This series can be found at: > https://github.com/eauger/linux/tree/v5.0-2stage-v6 For those who would like to test this series with qemu, please use the following qemu branch: https://github.com/eauger/qemu/tree/v4.0-2stage-unformal-for-v6-testing until I release a formal respin. Thanks Eric > > References: > [1] [PATCH v5 00/23] IOMMU and VT-d driver support for Shared Virtual > Address (SVA) > https://lwn.net/Articles/754331/ > [2] [RFC PATCH 0/8] Shared Virtual Memory virtualization for VT-d > (VFIO part) > https://lists.linuxfoundation.org/pipermail/iommu/2017-April/021475.html > [3] [v2,00/40] Shared Virtual Addressing for the IOMMU > https://patchwork.ozlabs.org/cover/912129/ > [4] [PATCH v3 00/10] Shared Virtual Addressing for the IOMMU > https://patchwork.kernel.org/cover/10608299/ > > History: > v5 -> v6: > - Fix compilation issue when CONFIG_IOMMU_API is unset > > v4 -> v5: > - fix bug reported by Vincent: fault handler unregistration now happens in > vfio_pci_release > - IOMMU_FAULT_PERM_* moved outside of struct definition + small > uapi changes suggested by Kean-Philippe (except fetch_addr) > - iommu: introduce device fault report API: removed the PRI part. > - see individual logs for more details > - reset the ste abort flag on detach > > v3 -> v4: > - took into account Alex, jean-Philippe and Robin's comments on v3 > - rework of the smmuv3 driver integration > - add tear down ops for msi binding and PASID table binding > - fix S1 fault propagation > - put fault reporting patches at the beginning of the series following > Jean-Philippe's request > - update of the cache invalidate and fault API uapis > - VFIO fault reporting rework with 2 separate regions and one mmappable > segment for the fault queue > - moved to PATCH > > v2 -> v3: > - When registering the S1 MSI binding we now store the device handle. This > addresses Robin's comment about discimination of devices beonging to > different S1 groups and using different physical MSI doorbells. > - Change the fault reporting API: use VFIO_PCI_DMA_FAULT_IRQ_INDEX to > set the eventfd and expose the faults through an mmappable fault region > > v1 -> v2: > - Added the fault reporting capability > - asid properly passed on invalidation (fix assignment of multiple > devices) > - see individual change logs for more info > > > Eric Auger (13): > iommu: Introduce bind/unbind_guest_msi > vfio: VFIO_IOMMU_BIND/UNBIND_MSI > iommu/smmuv3: Get prepared for nested stage support > iommu/smmuv3: Implement attach/detach_pasid_table > iommu/smmuv3: Implement cache_invalidate > dma-iommu: Implement NESTED_MSI cookie > iommu/smmuv3: Implement bind/unbind_guest_msi > iommu/smmuv3: Report non recoverable faults > vfio-pci: Add a new VFIO_REGION_TYPE_NESTED region type > vfio-pci: Register an iommu fault handler > vfio_pci: Allow to mmap the fault queue > vfio-pci: Add VFIO_PCI_DMA_FAULT_IRQ_INDEX > vfio: Document nested stage control > > Jacob Pan (4): > driver core: add per device iommu param > iommu: introduce device fault data > iommu: introduce device fault report API > iommu: Introduce attach/detach_pasid_table API > > Jean-Philippe Brucker (2): > iommu/arm-smmu-v3: Link domains and devices > iommu/arm-smmu-v3: Maintain a SID->device structure > > Liu, Yi L (3): > iommu: Introduce cache_invalidate API > vfio: VFIO_IOMMU_ATTACH/DETACH_PASID_TABLE > vfio: VFIO_IOMMU_CACHE_INVALIDATE > > Documentation/vfio.txt | 83 ++++ > drivers/iommu/arm-smmu-v3.c | 581 ++++++++++++++++++++++++++-- > drivers/iommu/dma-iommu.c | 145 ++++++- > drivers/iommu/iommu.c | 201 +++++++++- > drivers/vfio/pci/vfio_pci.c | 214 ++++++++++ > drivers/vfio/pci/vfio_pci_intrs.c | 19 + > drivers/vfio/pci/vfio_pci_private.h | 18 + > drivers/vfio/pci/vfio_pci_rdwr.c | 73 ++++ > drivers/vfio/vfio_iommu_type1.c | 158 ++++++++ > include/linux/device.h | 3 + > include/linux/dma-iommu.h | 18 + > include/linux/iommu.h | 137 +++++++ > include/uapi/linux/iommu.h | 233 +++++++++++ > include/uapi/linux/vfio.h | 102 +++++ > 14 files changed, 1951 insertions(+), 34 deletions(-) > create mode 100644 include/uapi/linux/iommu.h >