From patchwork Thu Mar 1 10:31:50 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Liu, Yi L" X-Patchwork-Id: 879695 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=2001:4830:134:3::11; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=linux.intel.com Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3zsThf4kZ0z9s06 for ; Thu, 1 Mar 2018 21:49:37 +1100 (AEDT) Received: from localhost ([::1]:55496 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1erLmJ-00048r-37 for incoming@patchwork.ozlabs.org; Thu, 01 Mar 2018 05:49:35 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:52662) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1erLlh-00048X-25 for qemu-devel@nongnu.org; Thu, 01 Mar 2018 05:48:58 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1erLlc-0007dW-LM for qemu-devel@nongnu.org; Thu, 01 Mar 2018 05:48:57 -0500 Received: from mga14.intel.com ([192.55.52.115]:7310) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1erLlc-0007b8-Bh for qemu-devel@nongnu.org; Thu, 01 Mar 2018 05:48:52 -0500 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga003.jf.intel.com ([10.7.209.27]) by fmsmga103.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 01 Mar 2018 02:48:50 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.47,408,1515484800"; d="scan'208";a="31611586" Received: from sky-dev.bj.intel.com ([10.238.144.105]) by orsmga003.jf.intel.com with ESMTP; 01 Mar 2018 02:48:48 -0800 From: "Liu, Yi L" To: qemu-devel@nongnu.org, mst@redhat.com, david@gibson.dropbear.id.au Date: Thu, 1 Mar 2018 18:31:50 +0800 Message-Id: <1519900322-30263-1-git-send-email-yi.l.liu@linux.intel.com> X-Mailer: git-send-email 1.9.1 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 192.55.52.115 Subject: [Qemu-devel] [PATCH v3 00/12] Introduce new iommu notifier framework for virt-SVA X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: pbonzini@redhat.com, alex.williamson@redhat.com, eric.auger.pro@gmail.com Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" This patchset is to introduce a notifier framework for virt-SVA. You may find virt-SVA design details from the link below. https://lists.gnu.org/archive/html/qemu-devel/2017-04/msg04925.html SVA is short for Shared Virtual Addressing. This is also called Shared Virtual Memory in previous patchsets. However, SVM is confusing as it can also be short for Secure Virtual Machine. So this patchset use Shared Virtual Addressing instead of Shared Virtual Memory. And it would be applied in future (SVA)related patch series as well. Qemu has an existing notifier framework based on MemoryRegion, which are used for MAP/UNMAP. However, it is not well suited for virt-SVA. Reasons are as below: - virt-SVA works along with PT = 1 - if PT = 1 IOMMU MR are disabled so MR notifier are not registered - new notifiers do not fit nicely in this framework as they need to be registered even if PT = 1 - need a new framework to attach the new notifiers - Additional background can be got from: https://lists.gnu.org/archive/html/qemu-devel/2017-04/msg04931.html So a new iommu notifier framework is needed. This patchset introduces a notifier framework based on IOMMUSVAContext. IOMMUSVAContext is introduced to be an abstract of virt-SVA operations in Qemu. Patch Overview: * 1 - 2: rename existing naming, the IOMMU MemoryRegion Notifier framework * 3 - 4: introduce SVA notifier framework based on IOMMUSVAContext * 5 - 7: introduce PCISVAOps and expose the SVA notfier framework through hw/pci layer * 8 - 12: show the usage of SVA notifier in Intel vIOMMU emulator [v2->v3 changes] * Rephrase the cover letter * Follow David's suggestion, take emulated SVA capable device into consideration * renaming IOMMUObject to be IOMMUSVAContext * Expose SVA nofitier registeration through hw/pci layer * rename the file hw/core/iommu.c to be hw/core/pasid.c include/hw/core/iommu.h to be include/hw/core/pasid.h * use SVA instead of SVM in patchset * rename patchset title, previous is "Introduce new iommu notifier framework" v2 link: https://lists.gnu.org/archive/html/qemu-devel/2017-11/msg04553.html [v1->v2 changes] * Rephrase the cover letter * Re-sort the sequence of the patches * Split the patch to introduce IOMMUObject and AddressSpaceOps * Address two missed list init spotted by Auger Eric v1 link: http://qemu-devel.nongnu.narkive.com/XhqBQ8wc/resend-patch-0-6-introduce-new-iommu-notifier-framework Original patchset from Peter Xu can be found in the link below. https://lists.gnu.org/archive/html/qemu-devel/2017-04/msg05360.html Comments and suggestions are always welcomed, thanks. Liu, Yi L (10): vfio: rename GuestIOMMU to be GuestIOMMUMR vfio/pci: add notify framework based on IOMMUSVAContext hw/pci: introduce PCISVAOps to PCIDevice vfio/pci: provide vfio_pci_sva_ops instance vfio/pci: register sva notifier hw/pci: introduce pci_device_notify_iommu() intel_iommu: record assigned devices in a list intel_iommu: bind guest pasid table to host intel_iommu: add framework for PASID AddressSpace management intel_iommu: bind device to PASID tagged AddressSpace Peter Xu (2): memory: rename existing iommu notifier to be iommu mr notifier hw/core: introduce IOMMUSVAContext for virt-SVA hw/alpha/typhoon.c | 2 +- hw/core/Makefile.objs | 1 + hw/core/pasid.c | 64 ++++++++++ hw/hppa/dino.c | 2 +- hw/i386/amd_iommu.c | 8 +- hw/i386/intel_iommu.c | 272 +++++++++++++++++++++++++++++++++++++---- hw/i386/intel_iommu_internal.h | 10 ++ hw/pci-host/ppce500.c | 2 +- hw/pci-host/prep.c | 2 +- hw/pci-host/sabre.c | 2 +- hw/pci/pci.c | 85 ++++++++++++- hw/ppc/spapr_iommu.c | 8 +- hw/ppc/spapr_pci.c | 2 +- hw/s390x/s390-pci-bus.c | 6 +- hw/vfio/common.c | 28 +++-- hw/vfio/pci.c | 84 +++++++++++++ hw/virtio/vhost.c | 10 +- include/exec/memory.h | 55 +++++---- include/hw/core/pasid.h | 110 +++++++++++++++++ include/hw/i386/intel_iommu.h | 43 ++++++- include/hw/pci/pci.h | 33 ++++- include/hw/pci/pci_bus.h | 1 + include/hw/vfio/vfio-common.h | 19 ++- include/hw/virtio/vhost.h | 4 +- memory.c | 37 +++--- 25 files changed, 774 insertions(+), 116 deletions(-) create mode 100644 hw/core/pasid.c create mode 100644 include/hw/core/pasid.h