Linux IOMMU Development
 help / color / mirror / Atom feed
From: Vasant Hegde <vasant.hegde@amd.com>
To: <iommu@lists.linux.dev>, <joro@8bytes.org>
Cc: <will@kernel.org>, <robin.murphy@arm.com>,
	<suravee.suthikulpanit@amd.com>, <jgg@ziepe.ca>,
	<yi.l.liu@intel.com>, <baolu.lu@linux.intel.com>,
	<kevin.tian@intel.com>, <jacob.pan@linux.microsoft.com>,
	Vasant Hegde <vasant.hegde@amd.com>
Subject: [PATCH v2 4/8] iommu/amd: Separate page table setup from domain allocation
Date: Wed, 11 Sep 2024 10:19:07 +0000	[thread overview]
Message-ID: <20240911101911.6269-5-vasant.hegde@amd.com> (raw)
In-Reply-To: <20240911101911.6269-1-vasant.hegde@amd.com>

Currently protection_domain_alloc() allocates domain and also sets up
page table. Page table setup is required for PAGING domain only. Domain
type like SVA doesn't need page table. Hence move page table setup code
to separate function.

Also SVA domain allocation path does not call pdom_setup_pgtable().
Hence remove IOMMU_DOMAIN_SVA type check.

Signed-off-by: Vasant Hegde <vasant.hegde@amd.com>
---
 drivers/iommu/amd/iommu.c | 42 ++++++++++++++++++++++++---------------
 1 file changed, 26 insertions(+), 16 deletions(-)

diff --git a/drivers/iommu/amd/iommu.c b/drivers/iommu/amd/iommu.c
index 2d0a681a2052..6844040b3702 100644
--- a/drivers/iommu/amd/iommu.c
+++ b/drivers/iommu/amd/iommu.c
@@ -2264,28 +2264,36 @@ void protection_domain_free(struct protection_domain *domain)
 
 struct protection_domain *protection_domain_alloc(unsigned int type, int nid)
 {
-	struct io_pgtable_ops *pgtbl_ops;
 	struct protection_domain *domain;
-	int pgtable;
 
 	domain = kzalloc(sizeof(*domain), GFP_KERNEL);
 	if (!domain)
 		return NULL;
 
 	domain->id = domain_id_alloc();
-	if (!domain->id)
-		goto err_free;
+	if (!domain->id) {
+		kfree(domain);
+		return NULL;
+	}
 
 	spin_lock_init(&domain->lock);
 	INIT_LIST_HEAD(&domain->dev_list);
 	INIT_LIST_HEAD(&domain->dev_data_list);
 	domain->iop.pgtbl.cfg.amd.nid = nid;
 
+	return domain;
+}
+
+static int pdom_setup_pgtable(struct protection_domain *domain,
+			      unsigned int type)
+{
+	struct io_pgtable_ops *pgtbl_ops;
+	int pgtable;
+
 	switch (type) {
 	/* No need to allocate io pgtable ops in passthrough mode */
 	case IOMMU_DOMAIN_IDENTITY:
-	case IOMMU_DOMAIN_SVA:
-		return domain;
+		return 0;
 	case IOMMU_DOMAIN_DMA:
 		pgtable = amd_iommu_pgtable;
 		break;
@@ -2297,7 +2305,7 @@ struct protection_domain *protection_domain_alloc(unsigned int type, int nid)
 		pgtable = AMD_IOMMU_V1;
 		break;
 	default:
-		goto err_id;
+		return -EINVAL;
 	}
 
 	switch (pgtable) {
@@ -2308,20 +2316,14 @@ struct protection_domain *protection_domain_alloc(unsigned int type, int nid)
 		domain->pd_mode = PD_MODE_V2;
 		break;
 	default:
-		goto err_id;
+		return -EINVAL;
 	}
-
 	pgtbl_ops =
 		alloc_io_pgtable_ops(pgtable, &domain->iop.pgtbl.cfg, domain);
 	if (!pgtbl_ops)
-		goto err_id;
+		return -ENOMEM;
 
-	return domain;
-err_id:
-	domain_id_free(domain->id);
-err_free:
-	kfree(domain);
-	return NULL;
+	return 0;
 }
 
 static inline u64 dma_max_address(void)
@@ -2344,6 +2346,7 @@ static struct iommu_domain *do_iommu_domain_alloc(unsigned int type,
 	bool dirty_tracking = flags & IOMMU_HWPT_ALLOC_DIRTY_TRACKING;
 	struct protection_domain *domain;
 	struct amd_iommu *iommu = NULL;
+	int ret;
 
 	if (dev)
 		iommu = get_amd_iommu_from_dev(dev);
@@ -2363,6 +2366,13 @@ static struct iommu_domain *do_iommu_domain_alloc(unsigned int type,
 	if (!domain)
 		return ERR_PTR(-ENOMEM);
 
+	ret = pdom_setup_pgtable(domain, type);
+	if (ret) {
+		domain_id_free(domain->id);
+		kfree(domain);
+		return ERR_PTR(ret);
+	}
+
 	domain->domain.geometry.aperture_start = 0;
 	domain->domain.geometry.aperture_end   = dma_max_address();
 	domain->domain.geometry.force_aperture = true;
-- 
2.31.1


  parent reply	other threads:[~2024-09-11 10:21 UTC|newest]

Thread overview: 75+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-09-11 10:19 [PATCH v2 0/8] iommu: Domain allocation enhancements Vasant Hegde
2024-09-11 10:19 ` [PATCH v2 1/8] iommu: Refactor __iommu_domain_alloc() Vasant Hegde
2024-09-12  1:50   ` Baolu Lu
2024-09-13  4:02   ` Jacob Pan
2024-09-26 10:17     ` Vasant Hegde
2024-09-30 17:55       ` Jacob Pan
2024-10-01  4:31         ` Vasant Hegde
2024-10-02  5:11           ` Jacob Pan
     [not found]       ` <66fae60d.170a0220.280357.3d11SMTPIN_ADDED_BROKEN@mx.google.com>
2024-10-02 14:19         ` Jason Gunthorpe
2024-10-02 16:16           ` Jacob Pan
2024-10-02 19:09   ` Jason Gunthorpe
2024-10-15  8:12   ` Tian, Kevin
2024-09-11 10:19 ` [PATCH v2 2/8] iommu: Introduce iommu_paging_domain_alloc_flags() Vasant Hegde
2024-09-12  4:04   ` Baolu Lu
2024-09-26 10:43     ` Vasant Hegde
2024-10-15  8:24     ` Tian, Kevin
2024-10-15 12:31       ` Jason Gunthorpe
2024-10-16  2:44         ` Tian, Kevin
2024-10-02 19:12   ` Jason Gunthorpe
2024-10-09 21:14   ` Jacob Pan
2024-10-16 10:14     ` Vasant Hegde
2024-09-11 10:19 ` [PATCH v2 3/8] iommu: Add new flag to explictly request PASID capable domain Vasant Hegde
2024-09-12  4:14   ` Baolu Lu
2024-09-26 10:29     ` Vasant Hegde
2024-09-26 11:01       ` Vasant Hegde
2024-10-02 14:23         ` Jason Gunthorpe
2024-10-02 19:02           ` Jacob Pan
     [not found]           ` <66fd98e3.170a0220.23d7ae.c2a9SMTPIN_ADDED_BROKEN@mx.google.com>
2024-10-02 19:07             ` Jason Gunthorpe
2024-10-03 16:00               ` Jacob Pan
2024-10-02 19:23   ` Jason Gunthorpe
2024-10-04  8:12     ` Vasant Hegde
2024-10-04 12:46       ` Jason Gunthorpe
2024-10-15  8:31   ` Tian, Kevin
2024-09-11 10:19 ` Vasant Hegde [this message]
2024-09-13 17:08   ` [PATCH v2 4/8] iommu/amd: Separate page table setup from domain allocation Jacob Pan
2024-10-02 19:24   ` Jason Gunthorpe
2024-09-11 10:19 ` [PATCH v2 5/8] iommu/amd: Pass page table type as param to pdom_setup_pgtable() Vasant Hegde
2024-09-13 21:39   ` Jacob Pan
2024-09-26 10:25     ` Vasant Hegde
2024-09-30 17:57       ` Jacob Pan
     [not found]   ` <66e4b125.170a0220.2fa213.1e2cSMTPIN_ADDED_BROKEN@mx.google.com>
2024-09-20 13:02     ` Jason Gunthorpe
2024-09-11 10:19 ` [PATCH v2 6/8] iommu/amd: Enhance domain_alloc_user() to allocate PASID capable domain Vasant Hegde
2024-10-02 19:31   ` Jason Gunthorpe
2024-10-04  8:18     ` Vasant Hegde
2024-10-04 12:48       ` Jason Gunthorpe
2024-10-04 14:32         ` Vasant Hegde
2024-10-15  8:41   ` Tian, Kevin
2024-10-15 12:40     ` Jason Gunthorpe
2024-10-16  2:48       ` Tian, Kevin
2024-10-16 15:28         ` Jason Gunthorpe
2024-10-17  6:11           ` Tian, Kevin
2024-10-17 11:03             ` Vasant Hegde
2024-09-11 10:19 ` [PATCH v2 7/8] iommu/amd: Add iommu_ops->domain_alloc_paging support Vasant Hegde
2024-10-02 19:33   ` Jason Gunthorpe
2024-10-04 11:55     ` Vasant Hegde
2024-10-04 12:56       ` Jason Gunthorpe
2024-10-04 14:30         ` Vasant Hegde
2024-10-04 15:31           ` Jason Gunthorpe
2024-10-08 10:08             ` Vasant Hegde
2024-09-11 10:19 ` [PATCH v2 8/8] iommu/amd: Implement global identity domain Vasant Hegde
2024-10-02 19:36   ` Jason Gunthorpe
2024-10-04 11:42     ` Vasant Hegde
2024-10-02  5:30 ` [PATCH v2 0/8] iommu: Domain allocation enhancements Vasant Hegde
2024-10-02 14:24   ` Jason Gunthorpe
2024-10-04  6:11     ` Vasant Hegde
2024-10-09  2:47   ` Baolu Lu
2024-10-09  9:53     ` Vasant Hegde
2024-10-09 12:15       ` Jason Gunthorpe
2024-10-10  6:40         ` Baolu Lu
2024-10-10  6:48           ` Baolu Lu
2024-10-10 11:38             ` Jason Gunthorpe
2024-10-10 14:06               ` Baolu Lu
2024-10-11  5:06         ` Tian, Kevin
2024-10-11 11:39           ` Jason Gunthorpe
2024-10-15  8:10             ` Tian, Kevin

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=20240911101911.6269-5-vasant.hegde@amd.com \
    --to=vasant.hegde@amd.com \
    --cc=baolu.lu@linux.intel.com \
    --cc=iommu@lists.linux.dev \
    --cc=jacob.pan@linux.microsoft.com \
    --cc=jgg@ziepe.ca \
    --cc=joro@8bytes.org \
    --cc=kevin.tian@intel.com \
    --cc=robin.murphy@arm.com \
    --cc=suravee.suthikulpanit@amd.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