locking, x86, iommu: Annotate qi->q_lock as raw
authorThomas Gleixner <tglx@linutronix.de>
Tue, 19 Jul 2011 15:02:07 +0000 (17:02 +0200)
committerIngo Molnar <mingo@elte.hu>
Tue, 13 Sep 2011 09:12:20 +0000 (11:12 +0200)
The qi->q_lock lock can be taken in atomic context and therefore
cannot be preempted on -rt - annotate it.

In mainline this change documents the low level nature of
the lock - otherwise there's no functional difference. Lockdep
and Sparse checking will work as usual.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
drivers/iommu/dmar.c
include/linux/intel-iommu.h

index be4164b3ebe86a87868566d11a0e46a992fd5d06..388a1189e55273e968cedba1245336bab47ad2d8 100644 (file)
@@ -921,11 +921,11 @@ int qi_submit_sync(struct qi_desc *desc, struct intel_iommu *iommu)
 restart:
        rc = 0;
 
-       spin_lock_irqsave(&qi->q_lock, flags);
+       raw_spin_lock_irqsave(&qi->q_lock, flags);
        while (qi->free_cnt < 3) {
-               spin_unlock_irqrestore(&qi->q_lock, flags);
+               raw_spin_unlock_irqrestore(&qi->q_lock, flags);
                cpu_relax();
-               spin_lock_irqsave(&qi->q_lock, flags);
+               raw_spin_lock_irqsave(&qi->q_lock, flags);
        }
 
        index = qi->free_head;
@@ -965,15 +965,15 @@ restart:
                if (rc)
                        break;
 
-               spin_unlock(&qi->q_lock);
+               raw_spin_unlock(&qi->q_lock);
                cpu_relax();
-               spin_lock(&qi->q_lock);
+               raw_spin_lock(&qi->q_lock);
        }
 
        qi->desc_status[index] = QI_DONE;
 
        reclaim_free_desc(qi);
-       spin_unlock_irqrestore(&qi->q_lock, flags);
+       raw_spin_unlock_irqrestore(&qi->q_lock, flags);
 
        if (rc == -EAGAIN)
                goto restart;
@@ -1159,7 +1159,7 @@ int dmar_enable_qi(struct intel_iommu *iommu)
        qi->free_head = qi->free_tail = 0;
        qi->free_cnt = QI_LENGTH;
 
-       spin_lock_init(&qi->q_lock);
+       raw_spin_lock_init(&qi->q_lock);
 
        __dmar_enable_qi(iommu);
 
index 19728c462399040da731a3d79c0990244a513f3e..8b9b5d365f4e16728b564741a0bfd49b470319e8 100644 (file)
@@ -271,7 +271,7 @@ struct qi_desc {
 };
 
 struct q_inval {
-       spinlock_t      q_lock;
+       raw_spinlock_t  q_lock;
        struct qi_desc  *desc;          /* invalidation queue */
        int             *desc_status;   /* desc status */
        int             free_head;      /* first free entry */