From c59316c81ebff4cbfd6ddbead8ad444b9388b02f Mon Sep 17 00:00:00 2001 From: johann Date: Thu, 22 Oct 2009 12:08:51 +0000 Subject: [PATCH 1/1] Branch HEAD b=20633 i=green i=eeb disable irq in trace_lock_tcd only when needed. --- libcfs/libcfs/linux/linux-tracefile.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/libcfs/libcfs/linux/linux-tracefile.c b/libcfs/libcfs/linux/linux-tracefile.c index 392e972..c7c2a21 100644 --- a/libcfs/libcfs/linux/linux-tracefile.c +++ b/libcfs/libcfs/linux/linux-tracefile.c @@ -150,17 +150,24 @@ trace_buf_idx_get() 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); - - 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) -- 1.8.3.1