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 04/13] iommu/vt-d: Add pasid replace helpers
Date: Tue, 5 Nov 2024 10:06:13 +0800 [thread overview]
Message-ID: <de7cbf75-930f-42b3-beb5-3be697defe50@linux.intel.com> (raw)
In-Reply-To: <20241104131842.13303-5-yi.l.liu@intel.com>
On 11/4/24 21:18, Yi Liu wrote:
> pasid replacement allows converting a present pasid entry to be FS, SS,
> PT or nested, hence add helpers for such operations. This simplifies the
> callers as well since the caller can switch the pasid to the new domain
> by one-shot.
>
> Suggested-by: Lu Baolu<baolu.lu@linux.intel.com>
> Signed-off-by: Yi Liu<yi.l.liu@intel.com>
> ---
> drivers/iommu/intel/pasid.c | 173 ++++++++++++++++++++++++++++++++++++
> drivers/iommu/intel/pasid.h | 12 +++
> 2 files changed, 185 insertions(+)
Reviewed-by: Lu Baolu <baolu.lu@linux.intel.com>
with a nit below
>
> diff --git a/drivers/iommu/intel/pasid.c b/drivers/iommu/intel/pasid.c
> index 65fd2fee01b7..b7c2d65b8726 100644
> --- a/drivers/iommu/intel/pasid.c
> +++ b/drivers/iommu/intel/pasid.c
> @@ -390,6 +390,40 @@ int intel_pasid_setup_first_level(struct intel_iommu *iommu,
> return 0;
> }
>
> +int intel_pasid_replace_first_level(struct intel_iommu *iommu,
> + struct device *dev, pgd_t *pgd,
> + u32 pasid, u16 did, int flags)
> +{
> + struct pasid_entry *pte;
> + u16 old_did;
> +
> + if (!ecap_flts(iommu->ecap) ||
> + ((flags & PASID_FLAG_FL5LP) && !cap_fl5lp_support(iommu->cap)))
> + return -EINVAL;
> +
> + spin_lock(&iommu->lock);
> + pte = intel_pasid_get_entry(dev, pasid);
> + if (!pte) {
> + spin_unlock(&iommu->lock);
> + return -ENODEV;
> + }
> +
> + if (!pasid_pte_is_present(pte)) {
> + spin_unlock(&iommu->lock);
> + return -EINVAL;
> + }
> +
> + old_did = pasid_get_domain_id(pte);
> +
> + pasid_pte_config_first_level(iommu, pte, pgd, did, flags);
> + spin_unlock(&iommu->lock);
> +
> + intel_pasid_flush_present(iommu, dev, pasid, old_did, pte);
> + intel_drain_pasid_prq(dev, pasid);
> +
> + return 0;
> +}
> +
> /*
> * Skip top levels of page tables for iommu which has less agaw
> * than default. Unnecessary for PT mode.
> @@ -483,6 +517,55 @@ int intel_pasid_setup_second_level(struct intel_iommu *iommu,
> return 0;
> }
>
> +int intel_pasid_replace_second_level(struct intel_iommu *iommu,
> + struct dmar_domain *domain,
> + struct device *dev, u32 pasid)
> +{
> + struct pasid_entry *pte;
> + struct dma_pte *pgd;
> + u16 did, old_did;
> + u64 pgd_val;
> + int agaw;
> +
> + /*
> + * If hardware advertises no support for second level
> + * translation, return directly.
> + */
> + if (!ecap_slts(iommu->ecap))
> + return -EINVAL;
> +
> + pgd = domain->pgd;
> + agaw = iommu_skip_agaw(domain, iommu, &pgd);
iommu_skip_agaw() has been removed after domain_alloc_paging is
supported in this driver. Perhaps you need a rebase if you have a new
version.
> + if (agaw < 0)
> + return -EINVAL;
> +
> + pgd_val = virt_to_phys(pgd);
> + did = domain_id_iommu(domain, iommu);
> +
> + spin_lock(&iommu->lock);
> + pte = intel_pasid_get_entry(dev, pasid);
> + if (!pte) {
> + spin_unlock(&iommu->lock);
> + return -ENODEV;
> + }
> +
> + if (!pasid_pte_is_present(pte)) {
> + spin_unlock(&iommu->lock);
> + return -EINVAL;
> + }
> +
> + old_did = pasid_get_domain_id(pte);
> +
> + pasid_pte_config_second_level(iommu, pte, pgd_val, agaw,
> + did, domain->dirty_tracking);
> + spin_unlock(&iommu->lock);
> +
> + intel_pasid_flush_present(iommu, dev, pasid, old_did, pte);
> + intel_drain_pasid_prq(dev, pasid);
> +
> + return 0;
> +}
--
baolu
next prev parent reply other threads:[~2024-11-05 2:07 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 [this message]
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
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=de7cbf75-930f-42b3-beb5-3be697defe50@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.