The iommu->lock is used to protect changes in root/context/pasid tables
and domain ID allocation. There's no use case to change these resources
in any interrupt context. Hence there's no need to disable interrupts
when helding the spinlock.

Signed-off-by: Lu Baolu <baolu...@linux.intel.com>
---
 drivers/iommu/intel/debugfs.c |  6 ++----
 drivers/iommu/intel/iommu.c   | 17 +++++++----------
 2 files changed, 9 insertions(+), 14 deletions(-)

diff --git a/drivers/iommu/intel/debugfs.c b/drivers/iommu/intel/debugfs.c
index eea8727aa7bc..ca1adceeba19 100644
--- a/drivers/iommu/intel/debugfs.c
+++ b/drivers/iommu/intel/debugfs.c
@@ -263,10 +263,9 @@ static void ctx_tbl_walk(struct seq_file *m, struct 
intel_iommu *iommu, u16 bus)
 
 static void root_tbl_walk(struct seq_file *m, struct intel_iommu *iommu)
 {
-       unsigned long flags;
        u16 bus;
 
-       spin_lock_irqsave(&iommu->lock, flags);
+       spin_lock(&iommu->lock);
        seq_printf(m, "IOMMU %s: Root Table Address: 0x%llx\n", iommu->name,
                   (u64)virt_to_phys(iommu->root_entry));
        seq_puts(m, 
"B.D.F\tRoot_entry\t\t\t\tContext_entry\t\t\t\tPASID\tPASID_table_entry\n");
@@ -278,8 +277,7 @@ static void root_tbl_walk(struct seq_file *m, struct 
intel_iommu *iommu)
         */
        for (bus = 0; bus < 256; bus++)
                ctx_tbl_walk(m, iommu, bus);
-
-       spin_unlock_irqrestore(&iommu->lock, flags);
+       spin_unlock(&iommu->lock);
 }
 
 static int dmar_translation_struct_show(struct seq_file *m, void *unused)
diff --git a/drivers/iommu/intel/iommu.c b/drivers/iommu/intel/iommu.c
index ccf3c7fa26f1..2e195a639502 100644
--- a/drivers/iommu/intel/iommu.c
+++ b/drivers/iommu/intel/iommu.c
@@ -797,13 +797,12 @@ static int device_context_mapped(struct intel_iommu 
*iommu, u8 bus, u8 devfn)
 {
        struct context_entry *context;
        int ret = 0;
-       unsigned long flags;
 
-       spin_lock_irqsave(&iommu->lock, flags);
+       spin_lock(&iommu->lock);
        context = iommu_context_addr(iommu, bus, devfn, 0);
        if (context)
                ret = context_present(context);
-       spin_unlock_irqrestore(&iommu->lock, flags);
+       spin_unlock(&iommu->lock);
        return ret;
 }
 
@@ -2287,16 +2286,15 @@ static void domain_context_clear_one(struct 
device_domain_info *info, u8 bus, u8
 {
        struct intel_iommu *iommu = info->iommu;
        struct context_entry *context;
-       unsigned long flags;
        u16 did_old;
 
        if (!iommu)
                return;
 
-       spin_lock_irqsave(&iommu->lock, flags);
+       spin_lock(&iommu->lock);
        context = iommu_context_addr(iommu, bus, devfn, 0);
        if (!context) {
-               spin_unlock_irqrestore(&iommu->lock, flags);
+               spin_unlock(&iommu->lock);
                return;
        }
 
@@ -2311,7 +2309,7 @@ static void domain_context_clear_one(struct 
device_domain_info *info, u8 bus, u8
 
        context_clear_entry(context);
        __iommu_flush_cache(iommu, context, sizeof(*context));
-       spin_unlock_irqrestore(&iommu->lock, flags);
+       spin_unlock(&iommu->lock);
        iommu->flush.flush_context(iommu,
                                   did_old,
                                   (((u16)bus) << 8) | devfn,
@@ -2764,7 +2762,6 @@ static int copy_translation_tables(struct intel_iommu 
*iommu)
        struct root_entry *old_rt;
        phys_addr_t old_rt_phys;
        int ctxt_table_entries;
-       unsigned long flags;
        u64 rtaddr_reg;
        int bus, ret;
        bool new_ext, ext;
@@ -2807,7 +2804,7 @@ static int copy_translation_tables(struct intel_iommu 
*iommu)
                }
        }
 
-       spin_lock_irqsave(&iommu->lock, flags);
+       spin_lock(&iommu->lock);
 
        /* Context tables are copied, now write them to the root_entry table */
        for (bus = 0; bus < 256; bus++) {
@@ -2826,7 +2823,7 @@ static int copy_translation_tables(struct intel_iommu 
*iommu)
                iommu->root_entry[bus].hi = val;
        }
 
-       spin_unlock_irqrestore(&iommu->lock, flags);
+       spin_unlock(&iommu->lock);
 
        kfree(ctxt_tbls);
 
-- 
2.25.1

_______________________________________________
iommu mailing list
iommu@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/iommu

Reply via email to