From: Lu Baolu <baolu.lu@linux.intel.com>
To: Joerg Roedel <joro@8bytes.org>, Will Deacon <will@kernel.org>,
Robin Murphy <robin.murphy@arm.com>,
Jason Gunthorpe <jgg@ziepe.ca>, Kevin Tian <kevin.tian@intel.com>
Cc: Yi Liu <yi.l.liu@intel.com>, David Airlie <airlied@gmail.com>,
Daniel Vetter <daniel@ffwll.ch>, Kalle Valo <kvalo@kernel.org>,
Bjorn Andersson <andersson@kernel.org>,
Mathieu Poirier <mathieu.poirier@linaro.org>,
Alex Williamson <alex.williamson@redhat.com>,
mst@redhat.com, Jason Wang <jasowang@redhat.com>,
Thierry Reding <thierry.reding@gmail.com>,
Jonathan Hunter <jonathanh@nvidia.com>,
Mikko Perttunen <mperttunen@nvidia.com>,
iommu@lists.linux.dev, dri-devel@lists.freedesktop.org,
linux-kernel@vger.kernel.org, Lu Baolu <baolu.lu@linux.intel.com>
Subject: [PATCH 16/20] iommu/vt-d: Add domain_alloc_paging support
Date: Wed, 29 May 2024 13:32:46 +0800 [thread overview]
Message-ID: <20240529053250.91284-17-baolu.lu@linux.intel.com> (raw)
In-Reply-To: <20240529053250.91284-1-baolu.lu@linux.intel.com>
Move paging domain allocation code out from intel_iommu_domain_alloc().
The intel_iommu_domain_alloc() is still remaining to allocate an identity
domain. However, it will soon disappear as we are about to convert the
identity domain to a global static one.
Signed-off-by: Lu Baolu <baolu.lu@linux.intel.com>
---
drivers/iommu/intel/iommu.c | 50 ++++++++++++++++---------------------
1 file changed, 22 insertions(+), 28 deletions(-)
diff --git a/drivers/iommu/intel/iommu.c b/drivers/iommu/intel/iommu.c
index ccde5f5972e4..eb8e08699b80 100644
--- a/drivers/iommu/intel/iommu.c
+++ b/drivers/iommu/intel/iommu.c
@@ -3708,35 +3708,8 @@ static struct dmar_domain *paging_domain_alloc(struct device *dev, bool first_st
static struct iommu_domain *intel_iommu_domain_alloc(unsigned type)
{
- struct dmar_domain *dmar_domain;
- struct iommu_domain *domain;
-
- switch (type) {
- case IOMMU_DOMAIN_DMA:
- case IOMMU_DOMAIN_UNMANAGED:
- dmar_domain = alloc_domain(type);
- if (!dmar_domain) {
- pr_err("Can't allocate dmar_domain\n");
- return NULL;
- }
- if (md_domain_init(dmar_domain, DEFAULT_DOMAIN_ADDRESS_WIDTH)) {
- pr_err("Domain initialization failed\n");
- domain_exit(dmar_domain);
- return NULL;
- }
-
- domain = &dmar_domain->domain;
- domain->geometry.aperture_start = 0;
- domain->geometry.aperture_end =
- __DOMAIN_MAX_ADDR(dmar_domain->gaw);
- domain->geometry.force_aperture = true;
-
- return domain;
- case IOMMU_DOMAIN_IDENTITY:
+ if (type == IOMMU_DOMAIN_IDENTITY)
return &si_domain->domain;
- default:
- return NULL;
- }
return NULL;
}
@@ -3791,6 +3764,26 @@ intel_iommu_domain_alloc_user(struct device *dev, u32 flags,
return domain;
}
+static struct iommu_domain *intel_iommu_domain_alloc_paging(struct device *dev)
+{
+ struct dmar_domain *dmar_domain;
+ struct device_domain_info *info;
+ struct intel_iommu *iommu;
+
+ /* Do not support the legacy iommu_domain_alloc() interface. */
+ if (!dev)
+ return ERR_PTR(-ENODEV);
+
+ info = dev_iommu_priv_get(dev);
+ iommu = info->iommu;
+ dmar_domain = paging_domain_alloc(dev,
+ sm_supported(iommu) && ecap_flts(iommu->ecap));
+ if (IS_ERR(dmar_domain))
+ return ERR_CAST(dmar_domain);
+
+ return &dmar_domain->domain;
+}
+
static void intel_iommu_domain_free(struct iommu_domain *domain)
{
struct dmar_domain *dmar_domain = to_dmar_domain(domain);
@@ -4650,6 +4643,7 @@ const struct iommu_ops intel_iommu_ops = {
.domain_alloc = intel_iommu_domain_alloc,
.domain_alloc_user = intel_iommu_domain_alloc_user,
.domain_alloc_sva = intel_svm_domain_alloc,
+ .domain_alloc_paging = intel_iommu_domain_alloc_paging,
.probe_device = intel_iommu_probe_device,
.release_device = intel_iommu_release_device,
.get_resv_regions = intel_iommu_get_resv_regions,
--
2.34.1
next prev parent reply other threads:[~2024-05-29 5:36 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-05-29 5:32 [PATCH 00/20] iommu: Refactoring domain allocation interface Lu Baolu
2024-05-29 5:32 ` [PATCH 01/20] iommu: Add iommu_user_domain_alloc() interface Lu Baolu
2024-05-29 5:32 ` [PATCH 02/20] iommufd: Use iommu_user_domain_alloc() Lu Baolu
2024-05-29 5:32 ` [PATCH 03/20] vfio/type1: Use iommu_paging_domain_alloc() Lu Baolu
2024-05-29 5:32 ` [PATCH 04/20] vhost-vdpa: Use iommu_user_domain_alloc() Lu Baolu
2024-05-29 5:32 ` [PATCH 05/20] iommu: Add iommu_paging_domain_alloc() interface Lu Baolu
2024-05-29 9:04 ` Yi Liu
2024-05-30 1:59 ` Baolu Lu
2024-05-30 3:09 ` Baolu Lu
2024-05-29 5:32 ` [PATCH 06/20] drm/msm: Use iommu_paging_domain_alloc() Lu Baolu
2024-05-29 8:21 ` Dmitry Baryshkov
2024-05-30 1:57 ` Baolu Lu
2024-05-30 7:58 ` Dmitry Baryshkov
2024-05-31 1:57 ` Baolu Lu
2024-05-31 8:30 ` Dmitry Baryshkov
2024-05-29 5:32 ` [PATCH 07/20] drm/nouveau/tegra: " Lu Baolu
2024-05-29 5:32 ` [PATCH 08/20] gpu: host1x: " Lu Baolu
2024-05-29 5:32 ` [PATCH 09/20] media: nvidia: tegra: " Lu Baolu
2024-05-29 5:32 ` [PATCH 10/20] media: venus: firmware: " Lu Baolu
2024-05-29 5:32 ` [PATCH 11/20] ath10k: " Lu Baolu
2024-05-29 5:32 ` [PATCH 12/20] wifi: ath11k: " Lu Baolu
2024-05-29 5:32 ` [PATCH 13/20] remoteproc: " Lu Baolu
2024-05-29 5:32 ` [PATCH 14/20] soc/fsl/qbman: " Lu Baolu
2024-05-29 5:32 ` [PATCH 15/20] iommu/vt-d: Add helper to allocate paging domain Lu Baolu
2024-05-29 5:32 ` Lu Baolu [this message]
2024-05-29 5:32 ` [PATCH 17/20] iommu/vt-d: Simplify compatibility check for identity domain Lu Baolu
2024-05-29 5:32 ` [PATCH 18/20] iommu/vt-d: Enhance compatibility check for paging domain attach Lu Baolu
2024-05-29 5:32 ` [PATCH 19/20] iommu/vt-d: Remove domain_update_iommu_cap() Lu Baolu
2024-05-29 5:32 ` [PATCH 20/20] iommu/vt-d: Remove domain_update_iommu_superpage() Lu Baolu
2024-05-29 9:03 ` [PATCH 00/20] iommu: Refactoring domain allocation interface Yi Liu
2024-05-29 12:02 ` Baolu Lu
2024-05-31 3:16 ` Yi Liu
2024-05-31 6:00 ` Baolu Lu
2024-05-31 6:24 ` Yi Liu
2024-06-03 13:35 ` Jason Gunthorpe
2024-06-04 1:02 ` Baolu Lu
2024-05-30 17:59 ` Robin Murphy
2024-05-31 2:52 ` Baolu Lu
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=20240529053250.91284-17-baolu.lu@linux.intel.com \
--to=baolu.lu@linux.intel.com \
--cc=airlied@gmail.com \
--cc=alex.williamson@redhat.com \
--cc=andersson@kernel.org \
--cc=daniel@ffwll.ch \
--cc=dri-devel@lists.freedesktop.org \
--cc=iommu@lists.linux.dev \
--cc=jasowang@redhat.com \
--cc=jgg@ziepe.ca \
--cc=jonathanh@nvidia.com \
--cc=joro@8bytes.org \
--cc=kevin.tian@intel.com \
--cc=kvalo@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mathieu.poirier@linaro.org \
--cc=mperttunen@nvidia.com \
--cc=mst@redhat.com \
--cc=robin.murphy@arm.com \
--cc=thierry.reding@gmail.com \
--cc=will@kernel.org \
--cc=yi.l.liu@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox