From b32590e9b1b400b8d0e7e1d60a5eb78edb65b513 Mon Sep 17 00:00:00 2001 From: johann Date: Wed, 14 Oct 2009 00:16:13 +0000 Subject: [PATCH] Branch b1_8 b=20633 i=oleg i=eric disable irq in trace_lock_tcd only when needed. --- lnet/libcfs/linux/linux-tracefile.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/lnet/libcfs/linux/linux-tracefile.c b/lnet/libcfs/linux/linux-tracefile.c index 1096cf4..45fed5f 100644 --- a/lnet/libcfs/linux/linux-tracefile.c +++ b/lnet/libcfs/linux/linux-tracefile.c @@ -196,17 +196,24 @@ trace_put_tcd (struct trace_cpu_data *tcd) 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