From: Baolu Lu <baolu.lu@linux.intel.com>
To: Yi Liu <yi.l.liu@intel.com>,
joro@8bytes.org, jgg@nvidia.com, kevin.tian@intel.com
Cc: alex.williamson@redhat.com, eric.auger@redhat.com,
nicolinc@nvidia.com, kvm@vger.kernel.org,
chao.p.peng@linux.intel.com, iommu@lists.linux.dev,
zhenzhong.duan@intel.com, vasant.hegde@amd.com, will@kernel.org
Subject: Re: [PATCH v4 11/13] iommu/vt-d: Add set_dev_pasid callback for nested domain
Date: Tue, 5 Nov 2024 11:38:08 +0800 [thread overview]
Message-ID: <1076c17a-b053-4332-8684-926842126b36@linux.intel.com> (raw)
In-Reply-To: <20241104131842.13303-12-yi.l.liu@intel.com>
On 11/4/24 21:18, Yi Liu wrote:
> From: Lu Baolu <baolu.lu@linux.intel.com>
>
> Add intel_nested_set_dev_pasid() to set a nested type domain to a PASID
> of a device.
>
Co-developed-by: Lu Baolu <baolu.lu@linux.intel.com>
> Signed-off-by: Lu Baolu <baolu.lu@linux.intel.com>
> Co-developed-by: Yi Liu <yi.l.liu@intel.com>
> Signed-off-by: Yi Liu <yi.l.liu@intel.com>
And convert the patch author to you.
> ---
> drivers/iommu/intel/iommu.c | 2 +-
> drivers/iommu/intel/iommu.h | 7 ++++++
> drivers/iommu/intel/nested.c | 43 ++++++++++++++++++++++++++++++++++++
> drivers/iommu/intel/pasid.h | 11 +++++++++
> 4 files changed, 62 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/iommu/intel/iommu.c b/drivers/iommu/intel/iommu.c
> index 7e82b3a4bba7..7f1ca3c342a3 100644
> --- a/drivers/iommu/intel/iommu.c
> +++ b/drivers/iommu/intel/iommu.c
> @@ -1944,7 +1944,7 @@ static int domain_setup_first_level(struct intel_iommu *iommu,
> flags);
> }
>
> -static bool dev_is_real_dma_subdevice(struct device *dev)
> +bool dev_is_real_dma_subdevice(struct device *dev)
How about making this a static inline in the header?
> {
> return dev && dev_is_pci(dev) &&
> pci_real_dma_dev(to_pci_dev(dev)) != to_pci_dev(dev);
> diff --git a/drivers/iommu/intel/iommu.h b/drivers/iommu/intel/iommu.h
> index 8e7ffb421ac4..55478d7b64cf 100644
> --- a/drivers/iommu/intel/iommu.h
> +++ b/drivers/iommu/intel/iommu.h
> @@ -818,6 +818,11 @@ domain_id_iommu(struct dmar_domain *domain, struct intel_iommu *iommu)
> return info->did;
> }
>
> +static inline int domain_type_is_nested(struct dmar_domain *domain)
> +{
> + return domain->domain.type == IOMMU_DOMAIN_NESTED;
> +}
Why do you need this?
> +
> /*
> * 0: readable
> * 1: writable
> @@ -1225,6 +1230,8 @@ void __iommu_flush_iotlb(struct intel_iommu *iommu, u16 did, u64 addr,
> */
> #define QI_OPT_WAIT_DRAIN BIT(0)
>
> +bool dev_is_real_dma_subdevice(struct device *dev);
> +
> int domain_attach_iommu(struct dmar_domain *domain, struct intel_iommu *iommu);
> void domain_detach_iommu(struct dmar_domain *domain, struct intel_iommu *iommu);
> void device_block_translation(struct device *dev);
> diff --git a/drivers/iommu/intel/nested.c b/drivers/iommu/intel/nested.c
> index 3ce3c4fd210e..890087f3509f 100644
> --- a/drivers/iommu/intel/nested.c
> +++ b/drivers/iommu/intel/nested.c
> @@ -130,8 +130,51 @@ static int intel_nested_cache_invalidate_user(struct iommu_domain *domain,
> return ret;
> }
>
> +static int intel_nested_set_dev_pasid(struct iommu_domain *domain,
> + struct device *dev, ioasid_t pasid,
> + struct iommu_domain *old)
> +{
> + struct device_domain_info *info = dev_iommu_priv_get(dev);
> + struct dmar_domain *dmar_domain = to_dmar_domain(domain);
> + struct intel_iommu *iommu = info->iommu;
> + struct dev_pasid_info *dev_pasid;
> + int ret;
> +
> + /* No SVA domain replacement usage so far */
> + if (old && old->type == IOMMU_DOMAIN_SVA)
> + return -EOPNOTSUPP;
No need for this check from driver's point of view. If there is really a
need, it should go to the iommu core.
> +
> + if (!pasid_supported(iommu) || dev_is_real_dma_subdevice(dev))
> + return -EOPNOTSUPP;> +
> + if (context_copied(iommu, info->bus, info->devfn))
> + return -EBUSY;
> +
> + ret = prepare_domain_attach_device(&dmar_domain->s2_domain->domain,
> + dev);
> + if (ret)
> + return ret;
> +
> + dev_pasid = domain_add_dev_pasid(domain, dev, pasid);
> + if (IS_ERR(dev_pasid))
> + return PTR_ERR(dev_pasid);
> +
> + ret = domain_setup_nested(iommu, dmar_domain, dev, pasid, old);
> + if (ret)
> + goto out_remove_dev_pasid;
> +
> + domain_remove_dev_pasid(old, dev, pasid);
> +
> + return 0;
> +
> +out_remove_dev_pasid:
> + domain_remove_dev_pasid(domain, dev, pasid);
> + return ret;
> +}
> +
> static const struct iommu_domain_ops intel_nested_domain_ops = {
> .attach_dev = intel_nested_attach_dev,
> + .set_dev_pasid = intel_nested_set_dev_pasid,
> .free = intel_nested_domain_free,
> .cache_invalidate_user = intel_nested_cache_invalidate_user,
> };
> diff --git a/drivers/iommu/intel/pasid.h b/drivers/iommu/intel/pasid.h
> index a3b5945a1812..31a4e7c01853 100644
> --- a/drivers/iommu/intel/pasid.h
> +++ b/drivers/iommu/intel/pasid.h
> @@ -335,6 +335,17 @@ static inline int domain_setup_passthrough(struct intel_iommu *iommu,
> return intel_pasid_setup_pass_through(iommu, dev, pasid);
> }
>
> +static inline int domain_setup_nested(struct intel_iommu *iommu,
> + struct dmar_domain *domain,
> + struct device *dev, ioasid_t pasid,
> + struct iommu_domain *old)
> +{
> + if (old)
> + return intel_pasid_replace_nested(iommu, dev,
> + pasid, domain);
> + return intel_pasid_setup_nested(iommu, dev, pasid, domain);
> +}
> +
> void intel_pasid_tear_down_entry(struct intel_iommu *iommu,
> struct device *dev, u32 pasid,
> bool fault_ignore);
Others look good to me.
--
baolu
next prev parent reply other threads:[~2024-11-05 3:38 UTC|newest]
Thread overview: 65+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-11-04 13:18 [PATCH v4 00/13] Make set_dev_pasid op supporting domain replacement Yi Liu
2024-11-04 13:18 ` [PATCH v4 01/13] iommu: Pass old domain to set_dev_pasid op Yi Liu
2024-11-06 8:48 ` Vasant Hegde
2024-11-04 13:18 ` [PATCH v4 02/13] iommu/vt-d: Add a helper to flush cache for updating present pasid entry Yi Liu
2024-11-05 1:50 ` Baolu Lu
2024-11-06 7:11 ` Tian, Kevin
2024-11-06 8:45 ` Yi Liu
2024-11-06 9:40 ` Tian, Kevin
2024-11-06 9:56 ` Yi Liu
2024-11-06 10:01 ` Tian, Kevin
2024-11-06 10:22 ` Yi Liu
2024-11-04 13:18 ` [PATCH v4 03/13] iommu/vt-d: Refactor the pasid setup helpers Yi Liu
2024-11-05 1:52 ` Baolu Lu
2024-11-06 7:14 ` Tian, Kevin
2024-11-06 9:22 ` Yi Liu
2024-11-06 9:48 ` Tian, Kevin
2024-11-04 13:18 ` [PATCH v4 04/13] iommu/vt-d: Add pasid replace helpers Yi Liu
2024-11-05 2:06 ` Baolu Lu
2024-11-05 5:11 ` Yi Liu
2024-11-06 7:31 ` Tian, Kevin
2024-11-06 9:31 ` Yi Liu
2024-11-06 9:51 ` Tian, Kevin
2024-11-06 10:02 ` Yi Liu
2024-11-06 10:05 ` Tian, Kevin
2024-11-06 10:27 ` Yi Liu
2024-11-06 10:43 ` Baolu Lu
2024-11-04 13:18 ` [PATCH v4 05/13] iommu/vt-d: Prepare intel_iommu_set_dev_pasid() handle replacement Yi Liu
2024-11-05 2:49 ` Baolu Lu
2024-11-05 5:23 ` Yi Liu
2024-11-06 7:33 ` Tian, Kevin
2024-11-06 7:41 ` Tian, Kevin
2024-11-06 8:02 ` Yi Liu
2024-11-06 8:39 ` Baolu Lu
2024-11-06 9:33 ` Tian, Kevin
2024-11-04 13:18 ` [PATCH v4 06/13] iommu/vt-d: Make intel_iommu_set_dev_pasid() to handle domain replacement Yi Liu
2024-11-05 2:59 ` Baolu Lu
2024-11-06 7:43 ` Tian, Kevin
2024-11-04 13:18 ` [PATCH v4 07/13] iommu/vt-d: Limit intel_iommu_set_dev_pasid() for paging domain Yi Liu
2024-11-05 3:01 ` Baolu Lu
2024-11-06 7:44 ` Tian, Kevin
2024-11-04 13:18 ` [PATCH v4 08/13] iommu/vt-d: Make identity_domain_set_dev_pasid() to handle domain replacement Yi Liu
2024-11-05 3:03 ` Baolu Lu
2024-11-06 7:45 ` Tian, Kevin
2024-11-04 13:18 ` [PATCH v4 09/13] iommu/vt-d: Consolidate the dev_pasid code in intel_svm_set_dev_pasid() Yi Liu
2024-11-05 3:06 ` Baolu Lu
2024-11-06 7:58 ` Tian, Kevin
2024-11-04 13:18 ` [PATCH v4 10/13] iommu/vt-d: Fail SVA domain replacement Yi Liu
2024-11-05 3:30 ` Baolu Lu
2024-11-05 5:30 ` Yi Liu
2024-11-05 5:47 ` Baolu Lu
2024-11-05 14:43 ` Jason Gunthorpe
2024-11-06 7:58 ` Tian, Kevin
2024-11-04 13:18 ` [PATCH v4 11/13] iommu/vt-d: Add set_dev_pasid callback for nested domain Yi Liu
2024-11-05 3:38 ` Baolu Lu [this message]
2024-11-05 5:33 ` Yi Liu
2024-11-06 7:59 ` Tian, Kevin
2024-11-06 8:17 ` Tian, Kevin
2024-11-06 8:41 ` Baolu Lu
2024-11-06 9:14 ` Yi Liu
2024-11-06 10:45 ` Baolu Lu
2024-11-06 11:00 ` Yi Liu
2024-11-06 11:08 ` Baolu Lu
2024-11-04 13:18 ` [PATCH v4 12/13] iommu/arm-smmu-v3: Make set_dev_pasid() op support replace Yi Liu
2024-11-11 12:49 ` Will Deacon
2024-11-04 13:18 ` [PATCH v4 13/13] iommu: Make set_dev_pasid op support domain replacement Yi Liu
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=1076c17a-b053-4332-8684-926842126b36@linux.intel.com \
--to=baolu.lu@linux.intel.com \
--cc=alex.williamson@redhat.com \
--cc=chao.p.peng@linux.intel.com \
--cc=eric.auger@redhat.com \
--cc=iommu@lists.linux.dev \
--cc=jgg@nvidia.com \
--cc=joro@8bytes.org \
--cc=kevin.tian@intel.com \
--cc=kvm@vger.kernel.org \
--cc=nicolinc@nvidia.com \
--cc=vasant.hegde@amd.com \
--cc=will@kernel.org \
--cc=yi.l.liu@intel.com \
--cc=zhenzhong.duan@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: link
Be 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.