From: Auger Eric <eric.auger@redhat.com> To: "Raj, Ashok" <ashok.raj@intel.com> Cc: Jacob Pan <jacob.jun.pan@linux.intel.com>, iommu@lists.linux-foundation.org, LKML <linux-kernel@vger.kernel.org>, Joerg Roedel <joro@8bytes.org>, David Woodhouse <dwmw2@infradead.org>, Alex Williamson <alex.williamson@redhat.com>, Jean-Philippe Brucker <jean-philippe.brucker@arm.com>, Yi Liu <yi.l.liu@intel.com>, "Tian, Kevin" <kevin.tian@intel.com>, Christoph Hellwig <hch@infradead.org>, Lu Baolu <baolu.lu@linux.intel.com>, Andriy Shevchenko <andriy.shevchenko@linux.intel.com>, Yi L <yi.l.liu@linux.intel.com> Subject: Re: [PATCH v4 20/22] iommu/vt-d: Add bind guest PASID support Date: Thu, 18 Jul 2019 09:47:02 +0200 [thread overview] Message-ID: <2e1aebd1-6fcd-3fa4-acce-04e79746e38a@redhat.com> (raw) In-Reply-To: <20190716170453.GA54873@otc-nc-03> Hi Ashok, On 7/16/19 7:04 PM, Raj, Ashok wrote: > Hi Eric > > Jacob is on sabbatical, so i'll give it my best shot :-) > > Yi/Kevin can jump in... > > On Tue, Jul 16, 2019 at 06:45:51PM +0200, Auger Eric wrote: >> Hi Jacob, >> >> On 6/9/19 3:44 PM, Jacob Pan wrote: >>> When supporting guest SVA with emulated IOMMU, the guest PASID >>> table is shadowed in VMM. Updates to guest vIOMMU PASID table >>> will result in PASID cache flush which will be passed down to >>> the host as bind guest PASID calls. >>> >>> For the SL page tables, it will be harvested from device's >>> default domain (request w/o PASID), or aux domain in case of >>> mediated device. >>> >>> .-------------. .---------------------------. >>> | vIOMMU | | Guest process CR3, FL only| >>> | | '---------------------------' >>> .----------------/ >>> | PASID Entry |--- PASID cache flush - >>> '-------------' | >>> | | V >>> | | CR3 in GPA >>> '-------------' >>> Guest >>> ------| Shadow |--------------------------|-------- >>> v v v >>> Host >>> .-------------. .----------------------. >>> | pIOMMU | | Bind FL for GVA-GPA | >>> | | '----------------------' >>> .----------------/ | >>> | PASID Entry | V (Nested xlate) >>> '----------------\.------------------------------. >>> | | |SL for GPA-HPA, default domain| >>> | | '------------------------------' >>> '-------------' >>> Where: >>> - FL = First level/stage one page tables >>> - SL = Second level/stage two page tables >>> >>> Signed-off-by: Jacob Pan <jacob.jun.pan@linux.intel.com> >>> Signed-off-by: Liu, Yi L <yi.l.liu@linux.intel.com> >>> --- >>> drivers/iommu/intel-iommu.c | 4 + >>> drivers/iommu/intel-svm.c | 187 ++++++++++++++++++++++++++++++++++++++++++++ >>> include/linux/intel-iommu.h | 13 ++- >>> include/linux/intel-svm.h | 17 ++++ >>> 4 files changed, 219 insertions(+), 2 deletions(-) >>> >>> diff --git a/drivers/iommu/intel-iommu.c b/drivers/iommu/intel-iommu.c >>> index 7cfa0eb..3b4d712 100644 >>> --- a/drivers/iommu/intel-iommu.c >>> +++ b/drivers/iommu/intel-iommu.c >>> @@ -5782,6 +5782,10 @@ const struct iommu_ops intel_iommu_ops = { >>> .dev_enable_feat = intel_iommu_dev_enable_feat, >>> .dev_disable_feat = intel_iommu_dev_disable_feat, >>> .pgsize_bitmap = INTEL_IOMMU_PGSIZES, >>> +#ifdef CONFIG_INTEL_IOMMU_SVM >>> + .sva_bind_gpasid = intel_svm_bind_gpasid, >>> + .sva_unbind_gpasid = intel_svm_unbind_gpasid, >>> +#endif >>> }; >>> >>> static void quirk_iommu_g4x_gfx(struct pci_dev *dev) >>> diff --git a/drivers/iommu/intel-svm.c b/drivers/iommu/intel-svm.c >>> index 66d98e1..f06a82f 100644 >>> --- a/drivers/iommu/intel-svm.c >>> +++ b/drivers/iommu/intel-svm.c >>> @@ -229,6 +229,193 @@ static LIST_HEAD(global_svm_list); >>> list_for_each_entry(sdev, &svm->devs, list) \ >>> if (dev == sdev->dev) \ >>> >>> +int intel_svm_bind_gpasid(struct iommu_domain *domain, >>> + struct device *dev, >>> + struct gpasid_bind_data *data) >>> +{ >>> + struct intel_iommu *iommu = intel_svm_device_to_iommu(dev); >>> + struct intel_svm_dev *sdev; >>> + struct intel_svm *svm = NULL; >> not requested >>> + struct dmar_domain *ddomain; >>> + int ret = 0; >>> + >>> + if (WARN_ON(!iommu) || !data) >>> + return -EINVAL; >>> + >>> + if (data->version != IOMMU_GPASID_BIND_VERSION_1 || >>> + data->format != IOMMU_PASID_FORMAT_INTEL_VTD) >>> + return -EINVAL; >>> + >>> + if (dev_is_pci(dev)) { >>> + /* VT-d supports devices with full 20 bit PASIDs only */ >>> + if (pci_max_pasids(to_pci_dev(dev)) != PASID_MAX) >>> + return -EINVAL; >>> + } >>> + >>> + /* >>> + * We only check host PASID range, we have no knowledge to check >>> + * guest PASID range nor do we use the guest PASID. >> guest pasid is set below in svm->gpasid. >> So I am confused, do you handle gpasid or not? If you don't use gpasid >> at the moment, then you may return -EINVAL if data->flags & >> IOMMU_SVA_GPASID_VAL. >> >> I confess I don't really understand gpasid as I thought you use >> enlightened PASID allocation to use a system wide PASID allocator on >> host so in which case guest and host PASID do differ? > > Correct, from within the guest, we only use the enlightned allocator. > > Guest PASID can be managed via Qemu, and it will also associate > guest pasid's with appropriate host pasids. Sort of how guest bdf > and host bdf are managed for page-request etc. OK I will look at the QEMU side then. Thanks Eric >
WARNING: multiple messages have this Message-ID (diff)
From: Auger Eric <eric.auger@redhat.com> To: "Raj, Ashok" <ashok.raj@intel.com> Cc: Yi L <yi.l.liu@linux.intel.com>, "Tian, Kevin" <kevin.tian@intel.com>, Jean-Philippe Brucker <jean-philippe.brucker@arm.com>, iommu@lists.linux-foundation.org, LKML <linux-kernel@vger.kernel.org>, Alex Williamson <alex.williamson@redhat.com>, Andriy Shevchenko <andriy.shevchenko@linux.intel.com>, David Woodhouse <dwmw2@infradead.org> Subject: Re: [PATCH v4 20/22] iommu/vt-d: Add bind guest PASID support Date: Thu, 18 Jul 2019 09:47:02 +0200 [thread overview] Message-ID: <2e1aebd1-6fcd-3fa4-acce-04e79746e38a@redhat.com> (raw) In-Reply-To: <20190716170453.GA54873@otc-nc-03> Hi Ashok, On 7/16/19 7:04 PM, Raj, Ashok wrote: > Hi Eric > > Jacob is on sabbatical, so i'll give it my best shot :-) > > Yi/Kevin can jump in... > > On Tue, Jul 16, 2019 at 06:45:51PM +0200, Auger Eric wrote: >> Hi Jacob, >> >> On 6/9/19 3:44 PM, Jacob Pan wrote: >>> When supporting guest SVA with emulated IOMMU, the guest PASID >>> table is shadowed in VMM. Updates to guest vIOMMU PASID table >>> will result in PASID cache flush which will be passed down to >>> the host as bind guest PASID calls. >>> >>> For the SL page tables, it will be harvested from device's >>> default domain (request w/o PASID), or aux domain in case of >>> mediated device. >>> >>> .-------------. .---------------------------. >>> | vIOMMU | | Guest process CR3, FL only| >>> | | '---------------------------' >>> .----------------/ >>> | PASID Entry |--- PASID cache flush - >>> '-------------' | >>> | | V >>> | | CR3 in GPA >>> '-------------' >>> Guest >>> ------| Shadow |--------------------------|-------- >>> v v v >>> Host >>> .-------------. .----------------------. >>> | pIOMMU | | Bind FL for GVA-GPA | >>> | | '----------------------' >>> .----------------/ | >>> | PASID Entry | V (Nested xlate) >>> '----------------\.------------------------------. >>> | | |SL for GPA-HPA, default domain| >>> | | '------------------------------' >>> '-------------' >>> Where: >>> - FL = First level/stage one page tables >>> - SL = Second level/stage two page tables >>> >>> Signed-off-by: Jacob Pan <jacob.jun.pan@linux.intel.com> >>> Signed-off-by: Liu, Yi L <yi.l.liu@linux.intel.com> >>> --- >>> drivers/iommu/intel-iommu.c | 4 + >>> drivers/iommu/intel-svm.c | 187 ++++++++++++++++++++++++++++++++++++++++++++ >>> include/linux/intel-iommu.h | 13 ++- >>> include/linux/intel-svm.h | 17 ++++ >>> 4 files changed, 219 insertions(+), 2 deletions(-) >>> >>> diff --git a/drivers/iommu/intel-iommu.c b/drivers/iommu/intel-iommu.c >>> index 7cfa0eb..3b4d712 100644 >>> --- a/drivers/iommu/intel-iommu.c >>> +++ b/drivers/iommu/intel-iommu.c >>> @@ -5782,6 +5782,10 @@ const struct iommu_ops intel_iommu_ops = { >>> .dev_enable_feat = intel_iommu_dev_enable_feat, >>> .dev_disable_feat = intel_iommu_dev_disable_feat, >>> .pgsize_bitmap = INTEL_IOMMU_PGSIZES, >>> +#ifdef CONFIG_INTEL_IOMMU_SVM >>> + .sva_bind_gpasid = intel_svm_bind_gpasid, >>> + .sva_unbind_gpasid = intel_svm_unbind_gpasid, >>> +#endif >>> }; >>> >>> static void quirk_iommu_g4x_gfx(struct pci_dev *dev) >>> diff --git a/drivers/iommu/intel-svm.c b/drivers/iommu/intel-svm.c >>> index 66d98e1..f06a82f 100644 >>> --- a/drivers/iommu/intel-svm.c >>> +++ b/drivers/iommu/intel-svm.c >>> @@ -229,6 +229,193 @@ static LIST_HEAD(global_svm_list); >>> list_for_each_entry(sdev, &svm->devs, list) \ >>> if (dev == sdev->dev) \ >>> >>> +int intel_svm_bind_gpasid(struct iommu_domain *domain, >>> + struct device *dev, >>> + struct gpasid_bind_data *data) >>> +{ >>> + struct intel_iommu *iommu = intel_svm_device_to_iommu(dev); >>> + struct intel_svm_dev *sdev; >>> + struct intel_svm *svm = NULL; >> not requested >>> + struct dmar_domain *ddomain; >>> + int ret = 0; >>> + >>> + if (WARN_ON(!iommu) || !data) >>> + return -EINVAL; >>> + >>> + if (data->version != IOMMU_GPASID_BIND_VERSION_1 || >>> + data->format != IOMMU_PASID_FORMAT_INTEL_VTD) >>> + return -EINVAL; >>> + >>> + if (dev_is_pci(dev)) { >>> + /* VT-d supports devices with full 20 bit PASIDs only */ >>> + if (pci_max_pasids(to_pci_dev(dev)) != PASID_MAX) >>> + return -EINVAL; >>> + } >>> + >>> + /* >>> + * We only check host PASID range, we have no knowledge to check >>> + * guest PASID range nor do we use the guest PASID. >> guest pasid is set below in svm->gpasid. >> So I am confused, do you handle gpasid or not? If you don't use gpasid >> at the moment, then you may return -EINVAL if data->flags & >> IOMMU_SVA_GPASID_VAL. >> >> I confess I don't really understand gpasid as I thought you use >> enlightened PASID allocation to use a system wide PASID allocator on >> host so in which case guest and host PASID do differ? > > Correct, from within the guest, we only use the enlightned allocator. > > Guest PASID can be managed via Qemu, and it will also associate > guest pasid's with appropriate host pasids. Sort of how guest bdf > and host bdf are managed for page-request etc. OK I will look at the QEMU side then. Thanks Eric > _______________________________________________ iommu mailing list iommu@lists.linux-foundation.org https://lists.linuxfoundation.org/mailman/listinfo/iommu
next prev parent reply other threads:[~2019-07-18 7:47 UTC|newest] Thread overview: 128+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-06-09 13:44 [PATCH v4 00/22] Shared virtual address IOMMU and VT-d support Jacob Pan 2019-06-09 13:44 ` Jacob Pan 2019-06-09 13:44 ` [PATCH v4 01/22] driver core: Add per device iommu param Jacob Pan 2019-06-09 13:44 ` Jacob Pan 2019-06-09 13:44 ` [PATCH v4 02/22] iommu: Introduce device fault data Jacob Pan 2019-06-09 13:44 ` Jacob Pan 2019-06-18 15:42 ` Jonathan Cameron 2019-06-18 15:42 ` Jonathan Cameron 2019-06-09 13:44 ` [PATCH v4 03/22] iommu: Introduce device fault report API Jacob Pan 2019-06-09 13:44 ` Jacob Pan 2019-06-18 15:41 ` Jonathan Cameron 2019-06-18 15:41 ` Jonathan Cameron 2019-06-09 13:44 ` [PATCH v4 04/22] iommu: Add recoverable fault reporting Jacob Pan 2019-06-09 13:44 ` Jacob Pan 2019-06-18 15:44 ` Jonathan Cameron 2019-06-18 15:44 ` Jonathan Cameron 2019-06-09 13:44 ` [PATCH v4 05/22] iommu: Add a timeout parameter for PRQ response Jacob Pan 2019-06-09 13:44 ` Jacob Pan 2019-06-09 13:44 ` [PATCH v4 06/22] trace/iommu: Add sva trace events Jacob Pan 2019-06-09 13:44 ` Jacob Pan 2019-06-09 13:44 ` [PATCH v4 07/22] iommu: Use device fault trace event Jacob Pan 2019-06-09 13:44 ` Jacob Pan 2019-06-09 13:44 ` [PATCH v4 08/22] iommu: Introduce attach/detach_pasid_table API Jacob Pan 2019-06-09 13:44 ` Jacob Pan 2019-06-18 15:41 ` Jonathan Cameron 2019-06-18 15:41 ` Jonathan Cameron 2019-06-24 15:06 ` Auger Eric 2019-06-24 15:06 ` Auger Eric 2019-06-24 15:23 ` Jean-Philippe Brucker 2019-06-24 15:23 ` Jean-Philippe Brucker 2019-06-09 13:44 ` [PATCH v4 09/22] iommu: Introduce cache_invalidate API Jacob Pan 2019-06-09 13:44 ` Jacob Pan 2019-06-18 15:41 ` Jonathan Cameron 2019-06-18 15:41 ` Jonathan Cameron 2019-06-09 13:44 ` [PATCH v4 10/22] iommu: Fix compile error without IOMMU_API Jacob Pan 2019-06-09 13:44 ` Jacob Pan 2019-06-18 14:10 ` Jonathan Cameron 2019-06-18 14:10 ` Jonathan Cameron 2019-06-24 22:28 ` Jacob Pan 2019-06-24 22:28 ` Jacob Pan 2019-06-09 13:44 ` [PATCH v4 11/22] iommu: Introduce guest PASID bind function Jacob Pan 2019-06-09 13:44 ` Jacob Pan 2019-06-18 15:36 ` Jean-Philippe Brucker 2019-06-18 15:36 ` Jean-Philippe Brucker 2019-06-24 22:24 ` Jacob Pan 2019-06-24 22:24 ` Jacob Pan 2019-07-16 16:44 ` Auger Eric 2019-07-16 16:44 ` Auger Eric 2019-08-05 21:02 ` Jacob Pan 2019-08-05 21:02 ` Jacob Pan 2019-08-05 23:13 ` Jacob Pan 2019-08-05 23:13 ` Jacob Pan 2019-06-09 13:44 ` [PATCH v4 12/22] iommu: Add I/O ASID allocator Jacob Pan 2019-06-09 13:44 ` Jacob Pan 2019-06-18 16:50 ` Jonathan Cameron 2019-06-18 16:50 ` Jonathan Cameron 2019-06-25 18:55 ` Jacob Pan 2019-06-25 18:55 ` Jacob Pan 2019-06-09 13:44 ` [PATCH v4 13/22] iommu/vt-d: Enlightened PASID allocation Jacob Pan 2019-06-09 13:44 ` Jacob Pan 2019-07-16 9:29 ` Auger Eric 2019-07-16 9:29 ` Auger Eric 2019-08-13 16:57 ` Jacob Pan 2019-08-13 16:57 ` Jacob Pan 2019-06-09 13:44 ` [PATCH v4 14/22] iommu/vt-d: Add custom allocator for IOASID Jacob Pan 2019-06-09 13:44 ` Jacob Pan 2019-07-16 9:30 ` Auger Eric 2019-07-16 9:30 ` Auger Eric 2019-08-05 20:02 ` Jacob Pan 2019-08-05 20:02 ` Jacob Pan 2019-06-09 13:44 ` [PATCH v4 15/22] iommu/vt-d: Replace Intel specific PASID allocator with IOASID Jacob Pan 2019-06-09 13:44 ` Jacob Pan 2019-06-18 15:57 ` Jonathan Cameron 2019-06-18 15:57 ` Jonathan Cameron 2019-06-24 21:36 ` Jacob Pan 2019-06-24 21:36 ` Jacob Pan 2019-06-27 1:53 ` Lu Baolu 2019-06-27 1:53 ` Lu Baolu 2019-06-27 15:40 ` Jacob Pan 2019-06-27 15:40 ` Jacob Pan 2019-06-09 13:44 ` [PATCH v4 16/22] iommu/vt-d: Move domain helper to header Jacob Pan 2019-06-09 13:44 ` Jacob Pan 2019-07-16 9:33 ` Auger Eric 2019-07-16 9:33 ` Auger Eric 2019-06-09 13:44 ` [PATCH v4 17/22] iommu/vt-d: Avoid duplicated code for PASID setup Jacob Pan 2019-06-09 13:44 ` Jacob Pan 2019-06-18 16:03 ` Jonathan Cameron 2019-06-18 16:03 ` Jonathan Cameron 2019-06-24 23:44 ` Jacob Pan 2019-06-24 23:44 ` Jacob Pan 2019-07-16 9:52 ` Auger Eric 2019-07-16 9:52 ` Auger Eric 2019-06-09 13:44 ` [PATCH v4 18/22] iommu/vt-d: Add nested translation helper function Jacob Pan 2019-06-09 13:44 ` Jacob Pan 2019-06-09 13:44 ` [PATCH v4 19/22] iommu/vt-d: Clean up for SVM device list Jacob Pan 2019-06-09 13:44 ` Jacob Pan 2019-06-18 16:42 ` Jonathan Cameron 2019-06-18 16:42 ` Jonathan Cameron 2019-06-24 23:59 ` Jacob Pan 2019-06-24 23:59 ` Jacob Pan 2019-06-09 13:44 ` [PATCH v4 20/22] iommu/vt-d: Add bind guest PASID support Jacob Pan 2019-06-09 13:44 ` Jacob Pan 2019-06-18 16:44 ` Jonathan Cameron 2019-06-18 16:44 ` Jonathan Cameron 2019-06-24 22:41 ` Jacob Pan 2019-06-24 22:41 ` Jacob Pan 2019-06-27 2:50 ` Lu Baolu 2019-06-27 2:50 ` Lu Baolu 2019-06-27 20:22 ` Jacob Pan 2019-06-27 20:22 ` Jacob Pan 2019-07-05 2:21 ` Lu Baolu 2019-07-05 2:21 ` Lu Baolu 2019-08-14 17:20 ` Jacob Pan 2019-08-14 17:20 ` Jacob Pan 2019-07-16 16:45 ` Auger Eric 2019-07-16 16:45 ` Auger Eric 2019-07-16 17:04 ` Raj, Ashok 2019-07-16 17:04 ` Raj, Ashok 2019-07-18 7:47 ` Auger Eric [this message] 2019-07-18 7:47 ` Auger Eric 2019-06-09 13:44 ` [PATCH v4 21/22] iommu/vt-d: Support flushing more translation cache types Jacob Pan 2019-06-09 13:44 ` Jacob Pan 2019-07-18 8:35 ` Auger Eric 2019-07-18 8:35 ` Auger Eric 2019-08-14 20:17 ` Jacob Pan 2019-08-14 20:17 ` Jacob Pan 2019-06-09 13:44 ` [PATCH v4 22/22] iommu/vt-d: Add svm/sva invalidate function Jacob Pan 2019-06-09 13:44 ` Jacob Pan
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=2e1aebd1-6fcd-3fa4-acce-04e79746e38a@redhat.com \ --to=eric.auger@redhat.com \ --cc=alex.williamson@redhat.com \ --cc=andriy.shevchenko@linux.intel.com \ --cc=ashok.raj@intel.com \ --cc=baolu.lu@linux.intel.com \ --cc=dwmw2@infradead.org \ --cc=hch@infradead.org \ --cc=iommu@lists.linux-foundation.org \ --cc=jacob.jun.pan@linux.intel.com \ --cc=jean-philippe.brucker@arm.com \ --cc=joro@8bytes.org \ --cc=kevin.tian@intel.com \ --cc=linux-kernel@vger.kernel.org \ --cc=yi.l.liu@intel.com \ --cc=yi.l.liu@linux.intel.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.