Whamcloud - gitweb
Branch HEAD
authorjohann <johann>
Thu, 22 Oct 2009 12:08:51 +0000 (12:08 +0000)
committerjohann <johann>
Thu, 22 Oct 2009 12:08:51 +0000 (12:08 +0000)
b=20633
i=green
i=eeb

disable irq in trace_lock_tcd only when needed.

libcfs/libcfs/linux/linux-tracefile.c

index 392e972..c7c2a21 100644 (file)
@@ -150,17 +150,24 @@ trace_buf_idx_get()
 int trace_lock_tcd(struct trace_cpu_data *tcd)
 {
        __LASSERT(tcd->tcd_type < TCD_TYPE_MAX);
 int trace_lock_tcd(struct trace_cpu_data *tcd)
 {
        __LASSERT(tcd->tcd_type < TCD_TYPE_MAX);
-
-       spin_lock_irqsave(&tcd->tcd_lock, tcd->tcd_lock_flags);
-
+        if (tcd->tcd_type == TCD_TYPE_IRQ)
+                spin_lock_irqsave(&tcd->tcd_lock, tcd->tcd_lock_flags);
+        else if (tcd->tcd_type == TCD_TYPE_SOFTIRQ)
+                spin_lock_bh(&tcd->tcd_lock);
+        else
+                spin_lock(&tcd->tcd_lock);
        return 1;
 }
 
 void trace_unlock_tcd(struct trace_cpu_data *tcd)
 {
        __LASSERT(tcd->tcd_type < TCD_TYPE_MAX);
        return 1;
 }
 
 void trace_unlock_tcd(struct trace_cpu_data *tcd)
 {
        __LASSERT(tcd->tcd_type < TCD_TYPE_MAX);
-
-       spin_unlock_irqrestore(&tcd->tcd_lock, tcd->tcd_lock_flags);
+        if (tcd->tcd_type == TCD_TYPE_IRQ)
+                spin_unlock_irqrestore(&tcd->tcd_lock, tcd->tcd_lock_flags);
+        else if (tcd->tcd_type == TCD_TYPE_SOFTIRQ)
+                spin_unlock_bh(&tcd->tcd_lock);
+        else
+                spin_unlock(&tcd->tcd_lock);
 }
 
 int tcd_owns_tage(struct trace_cpu_data *tcd, struct trace_page *tage)
 }
 
 int tcd_owns_tage(struct trace_cpu_data *tcd, struct trace_page *tage)