From: Lu Baolu <baolu.lu@linux.intel.com>
To: iommu@lists.linux-foundation.org, iommu@lists.linux.dev
Cc: Kevin Tian <kevin.tian@intel.com>,
Ashok Raj <ashok.raj@intel.com>,
linux-kernel@vger.kernel.org,
Jacob jun Pan <jacob.jun.pan@intel.com>
Subject: [PATCH v3 04/11] iommu/vt-d: Unnecessary spinlock for root table alloc and free
Date: Wed, 29 Jun 2022 15:47:18 +0800 [thread overview]
Message-ID: <20220629074725.2331441-5-baolu.lu@linux.intel.com> (raw)
In-Reply-To: <20220629074725.2331441-1-baolu.lu@linux.intel.com>
The IOMMU root table is allocated and freed in the IOMMU initialization
code in static boot or hot-remove paths. There's no need for a spinlock.
Signed-off-by: Lu Baolu <baolu.lu@linux.intel.com>
Reviewed-by: Kevin Tian <kevin.tian@intel.com>
---
drivers/iommu/intel/iommu.c | 18 +++++-------------
1 file changed, 5 insertions(+), 13 deletions(-)
diff --git a/drivers/iommu/intel/iommu.c b/drivers/iommu/intel/iommu.c
index 77915d61f7ec..ff49c9460ede 100644
--- a/drivers/iommu/intel/iommu.c
+++ b/drivers/iommu/intel/iommu.c
@@ -809,14 +809,12 @@ static int device_context_mapped(struct intel_iommu *iommu, u8 bus, u8 devfn)
static void free_context_table(struct intel_iommu *iommu)
{
- int i;
- unsigned long flags;
struct context_entry *context;
+ int i;
+
+ if (!iommu->root_entry)
+ return;
- spin_lock_irqsave(&iommu->lock, flags);
- if (!iommu->root_entry) {
- goto out;
- }
for (i = 0; i < ROOT_ENTRY_NR; i++) {
context = iommu_context_addr(iommu, i, 0, 0);
if (context)
@@ -828,12 +826,10 @@ static void free_context_table(struct intel_iommu *iommu)
context = iommu_context_addr(iommu, i, 0x80, 0);
if (context)
free_pgtable_page(context);
-
}
+
free_pgtable_page(iommu->root_entry);
iommu->root_entry = NULL;
-out:
- spin_unlock_irqrestore(&iommu->lock, flags);
}
#ifdef CONFIG_DMAR_DEBUG
@@ -1232,7 +1228,6 @@ static void domain_unmap(struct dmar_domain *domain, unsigned long start_pfn,
static int iommu_alloc_root_entry(struct intel_iommu *iommu)
{
struct root_entry *root;
- unsigned long flags;
root = (struct root_entry *)alloc_pgtable_page(iommu->node);
if (!root) {
@@ -1242,10 +1237,7 @@ static int iommu_alloc_root_entry(struct intel_iommu *iommu)
}
__iommu_flush_cache(iommu, root, ROOT_SIZE);
-
- spin_lock_irqsave(&iommu->lock, flags);
iommu->root_entry = root;
- spin_unlock_irqrestore(&iommu->lock, flags);
return 0;
}
--
2.25.1
_______________________________________________
iommu mailing list
iommu@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/iommu
WARNING: multiple messages have this Message-ID (diff)
From: Lu Baolu <baolu.lu@linux.intel.com>
To: iommu@lists.linux-foundation.org, iommu@lists.linux.dev
Cc: Kevin Tian <kevin.tian@intel.com>,
Ashok Raj <ashok.raj@intel.com>, Liu Yi L <yi.l.liu@intel.com>,
Jacob jun Pan <jacob.jun.pan@intel.com>,
linux-kernel@vger.kernel.org, Lu Baolu <baolu.lu@linux.intel.com>
Subject: [PATCH v3 04/11] iommu/vt-d: Unnecessary spinlock for root table alloc and free
Date: Wed, 29 Jun 2022 15:47:18 +0800 [thread overview]
Message-ID: <20220629074725.2331441-5-baolu.lu@linux.intel.com> (raw)
Message-ID: <20220629074718.LFJuSa9EgTfPDPJym0XsWO5MQPZNmPmlkPW5pJ1OrTQ@z> (raw)
In-Reply-To: <20220629074725.2331441-1-baolu.lu@linux.intel.com>
The IOMMU root table is allocated and freed in the IOMMU initialization
code in static boot or hot-remove paths. There's no need for a spinlock.
Signed-off-by: Lu Baolu <baolu.lu@linux.intel.com>
Reviewed-by: Kevin Tian <kevin.tian@intel.com>
---
drivers/iommu/intel/iommu.c | 18 +++++-------------
1 file changed, 5 insertions(+), 13 deletions(-)
diff --git a/drivers/iommu/intel/iommu.c b/drivers/iommu/intel/iommu.c
index 77915d61f7ec..ff49c9460ede 100644
--- a/drivers/iommu/intel/iommu.c
+++ b/drivers/iommu/intel/iommu.c
@@ -809,14 +809,12 @@ static int device_context_mapped(struct intel_iommu *iommu, u8 bus, u8 devfn)
static void free_context_table(struct intel_iommu *iommu)
{
- int i;
- unsigned long flags;
struct context_entry *context;
+ int i;
+
+ if (!iommu->root_entry)
+ return;
- spin_lock_irqsave(&iommu->lock, flags);
- if (!iommu->root_entry) {
- goto out;
- }
for (i = 0; i < ROOT_ENTRY_NR; i++) {
context = iommu_context_addr(iommu, i, 0, 0);
if (context)
@@ -828,12 +826,10 @@ static void free_context_table(struct intel_iommu *iommu)
context = iommu_context_addr(iommu, i, 0x80, 0);
if (context)
free_pgtable_page(context);
-
}
+
free_pgtable_page(iommu->root_entry);
iommu->root_entry = NULL;
-out:
- spin_unlock_irqrestore(&iommu->lock, flags);
}
#ifdef CONFIG_DMAR_DEBUG
@@ -1232,7 +1228,6 @@ static void domain_unmap(struct dmar_domain *domain, unsigned long start_pfn,
static int iommu_alloc_root_entry(struct intel_iommu *iommu)
{
struct root_entry *root;
- unsigned long flags;
root = (struct root_entry *)alloc_pgtable_page(iommu->node);
if (!root) {
@@ -1242,10 +1237,7 @@ static int iommu_alloc_root_entry(struct intel_iommu *iommu)
}
__iommu_flush_cache(iommu, root, ROOT_SIZE);
-
- spin_lock_irqsave(&iommu->lock, flags);
iommu->root_entry = root;
- spin_unlock_irqrestore(&iommu->lock, flags);
return 0;
}
--
2.25.1
next prev parent reply other threads:[~2022-06-29 7:52 UTC|newest]
Thread overview: 47+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-06-29 7:47 [PATCH v3 00/11] iommu/vt-d: Optimize the use of locks Lu Baolu
2022-06-29 7:47 ` Lu Baolu
2022-06-29 7:47 ` [PATCH v3 01/11] iommu/vt-d: debugfs: Remove device_domain_lock usage Lu Baolu
2022-06-29 7:47 ` Lu Baolu
2022-07-01 7:55 ` Tian, Kevin
2022-07-01 7:55 ` Tian, Kevin
2022-06-29 7:47 ` [PATCH v3 02/11] iommu/vt-d: Remove clearing translation data in disable_dmar_iommu() Lu Baolu
2022-06-29 7:47 ` Lu Baolu
2022-07-01 7:58 ` Tian, Kevin
2022-07-01 7:58 ` Tian, Kevin
2022-07-03 4:34 ` Baolu Lu
2022-07-03 4:34 ` Baolu Lu
2022-07-07 1:02 ` Tian, Kevin
2022-06-29 7:47 ` [PATCH v3 03/11] iommu/vt-d: Use pci_get_domain_bus_and_slot() in pgtable_walk() Lu Baolu
2022-06-29 7:47 ` Lu Baolu
2022-06-29 7:47 ` Lu Baolu [this message]
2022-06-29 7:47 ` [PATCH v3 04/11] iommu/vt-d: Unnecessary spinlock for root table alloc and free Lu Baolu
2022-06-29 7:47 ` [PATCH v3 05/11] iommu/vt-d: Replace spin_lock_irqsave() with spin_lock() Lu Baolu
2022-06-29 7:47 ` Lu Baolu
2022-06-29 7:47 ` [PATCH v3 06/11] iommu/vt-d: Acquiring lock in domain ID allocation helpers Lu Baolu
2022-06-29 7:47 ` Lu Baolu
2022-07-01 8:06 ` Tian, Kevin
2022-07-01 8:06 ` Tian, Kevin
2022-06-29 7:47 ` [PATCH v3 07/11] iommu/vt-d: Acquiring lock in pasid manipulation helpers Lu Baolu
2022-06-29 7:47 ` Lu Baolu
2022-06-29 7:47 ` [PATCH v3 08/11] iommu/vt-d: Check device list of domain in domain free path Lu Baolu
2022-06-29 7:47 ` Lu Baolu
2022-06-29 7:47 ` [PATCH v3 09/11] iommu/vt-d: Fold __dmar_remove_one_dev_info() into its caller Lu Baolu
2022-06-29 7:47 ` Lu Baolu
2022-07-01 8:08 ` Tian, Kevin
2022-07-01 8:08 ` Tian, Kevin
2022-06-29 7:47 ` [PATCH v3 10/11] iommu/vt-d: Use device_domain_lock accurately Lu Baolu
2022-06-29 7:47 ` Lu Baolu
2022-07-01 8:15 ` Tian, Kevin
2022-07-01 8:15 ` Tian, Kevin
2022-07-01 9:12 ` Baolu Lu
2022-07-01 9:12 ` Baolu Lu
2022-07-03 4:35 ` Baolu Lu
2022-07-03 4:35 ` Baolu Lu
2022-06-29 7:47 ` [PATCH v3 11/11] iommu/vt-d: Convert global spinlock into per domain lock Lu Baolu
2022-06-29 7:47 ` Lu Baolu
2022-07-01 8:18 ` Tian, Kevin
2022-07-01 8:18 ` Tian, Kevin
2022-07-01 7:53 ` [PATCH v3 00/11] iommu/vt-d: Optimize the use of locks Tian, Kevin
2022-07-01 7:53 ` Tian, Kevin
2022-07-01 8:12 ` Baolu Lu
2022-07-01 8:12 ` 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=20220629074725.2331441-5-baolu.lu@linux.intel.com \
--to=baolu.lu@linux.intel.com \
--cc=ashok.raj@intel.com \
--cc=iommu@lists.linux-foundation.org \
--cc=iommu@lists.linux.dev \
--cc=jacob.jun.pan@intel.com \
--cc=kevin.tian@intel.com \
--cc=linux-kernel@vger.kernel.org \
/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.