From: Ravikiran G Thirumalai <kiran@scalex86.org>
To: Andrew Morton <akpm@osdl.org>
Cc: linux-kernel@vger.kernel.org, davem@davemloft.net,
netdev@vger.kernel.org, shai@scalex86.org
Subject: Re: [patch 1/4] net: percpufy frequently used vars -- add percpu_counter_mod_bh
Date: Wed, 8 Mar 2006 12:26:56 -0800 [thread overview]
Message-ID: <20060308202656.GA4493@localhost.localdomain> (raw)
In-Reply-To: <20060307181301.4dd6aa96.akpm@osdl.org>
On Tue, Mar 07, 2006 at 06:13:01PM -0800, Andrew Morton wrote:
> Ravikiran G Thirumalai <kiran@scalex86.org> wrote:
> >
> > +static inline void percpu_counter_mod_bh(struct percpu_counter *fbc, long amount)
> > +{
> > + local_bh_disable();
> > + percpu_counter_mod(fbc, amount);
> > + local_bh_enable();
> > +}
> > +
>
> percpu_counter_mod() does preempt_disable(), which is redundant in this
> context. So just do fbc->count += amount; here.
OK. Here is the revised patch.
Add percpu_counter_mod_bh for using these counters safely from
both softirq and process context.
Signed-off by: Pravin B. Shelar <pravins@calsoftinc.com>
Signed-off by: Ravikiran G Thirumalai <kiran@scalex86.org>
Signed-off by: Shai Fultheim <shai@scalex86.org>
Index: linux-2.6.16-rc5mm3/include/linux/percpu_counter.h
===================================================================
--- linux-2.6.16-rc5mm3.orig/include/linux/percpu_counter.h 2006-03-07 15:08:00.000000000 -0800
+++ linux-2.6.16-rc5mm3/include/linux/percpu_counter.h 2006-03-08 10:53:13.000000000 -0800
@@ -11,6 +11,7 @@
#include <linux/smp.h>
#include <linux/threads.h>
#include <linux/percpu.h>
+#include <linux/interrupt.h>
#ifdef CONFIG_SMP
@@ -40,6 +41,7 @@ static inline void percpu_counter_destro
void percpu_counter_mod(struct percpu_counter *fbc, long amount);
long percpu_counter_sum(struct percpu_counter *fbc);
+void percpu_counter_mod_bh(struct percpu_counter *fbc, long amount);
static inline long percpu_counter_read(struct percpu_counter *fbc)
{
@@ -98,6 +100,12 @@ static inline long percpu_counter_sum(st
return percpu_counter_read_positive(fbc);
}
+static inline void percpu_counter_mod_bh(struct percpu_counter *fbc, long amount)
+{
+ local_bh_disable();
+ fbc->count += amount;
+ local_bh_enable();
+}
#endif /* CONFIG_SMP */
static inline void percpu_counter_inc(struct percpu_counter *fbc)
@@ -110,4 +118,5 @@ static inline void percpu_counter_dec(st
percpu_counter_mod(fbc, -1);
}
+
#endif /* _LINUX_PERCPU_COUNTER_H */
Index: linux-2.6.16-rc5mm3/mm/swap.c
===================================================================
--- linux-2.6.16-rc5mm3.orig/mm/swap.c 2006-03-07 15:08:01.000000000 -0800
+++ linux-2.6.16-rc5mm3/mm/swap.c 2006-03-08 12:11:19.000000000 -0800
@@ -521,11 +521,11 @@ static int cpu_swap_callback(struct noti
#endif /* CONFIG_SMP */
#ifdef CONFIG_SMP
-void percpu_counter_mod(struct percpu_counter *fbc, long amount)
+static void __percpu_counter_mod(struct percpu_counter *fbc, long amount)
{
long count;
long *pcount;
- int cpu = get_cpu();
+ int cpu = smp_processor_id();
pcount = per_cpu_ptr(fbc->counters, cpu);
count = *pcount + amount;
@@ -537,9 +537,21 @@ void percpu_counter_mod(struct percpu_co
} else {
*pcount = count;
}
- put_cpu();
}
-EXPORT_SYMBOL(percpu_counter_mod);
+
+void percpu_counter_mod(struct percpu_counter *fbc, long amount)
+{
+ preempt_disable();
+ __percpu_counter_mod(fbc, amount);
+ preempt_enable();
+}
+
+void percpu_counter_mod_bh(struct percpu_counter *fbc, long amount)
+{
+ local_bh_disable();
+ __percpu_counter_mod(fbc, amount);
+ local_bh_enable();
+}
/*
* Add up all the per-cpu counts, return the result. This is a more accurate
@@ -559,6 +571,9 @@ long percpu_counter_sum(struct percpu_co
spin_unlock(&fbc->lock);
return ret < 0 ? 0 : ret;
}
+
+EXPORT_SYMBOL(percpu_counter_mod);
+EXPORT_SYMBOL(percpu_counter_mod_bh);
EXPORT_SYMBOL(percpu_counter_sum);
#endif
next prev parent reply other threads:[~2006-03-08 20:26 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-03-08 1:58 [patch 0/4] net: percpufy frequently used vars on struct proto Ravikiran G Thirumalai
2006-03-08 1:59 ` [patch 1/4] net: percpufy frequently used vars -- add percpu_counter_mod_bh Ravikiran G Thirumalai
2006-03-08 2:13 ` Andrew Morton
2006-03-08 20:26 ` Ravikiran G Thirumalai [this message]
2006-03-08 20:36 ` Benjamin LaHaise
2006-03-08 21:07 ` Ravikiran G Thirumalai
2006-03-08 21:17 ` Benjamin LaHaise
2006-03-08 22:25 ` Ravikiran G Thirumalai
2006-03-08 22:41 ` Benjamin LaHaise
2006-03-08 23:43 ` Andrew Morton
2006-03-09 0:18 ` Ravikiran G Thirumalai
2006-03-09 0:32 ` Andrew Morton
2006-03-09 8:06 ` Ravikiran G Thirumalai
2006-03-09 4:14 ` Andi Kleen
2006-03-09 8:14 ` Nick Piggin
2006-03-09 8:22 ` Ravikiran G Thirumalai
2006-03-09 8:41 ` Nick Piggin
2006-03-09 18:39 ` Benjamin LaHaise
2006-03-08 23:06 ` Andrew Morton
2006-03-08 23:12 ` Andrew Morton
2006-03-09 2:21 ` Andi Kleen
2006-03-09 2:32 ` Andrew Morton
2006-03-08 2:01 ` [patch 2/4] net: percpufy frequently used vars -- struct proto.memory_allocated Ravikiran G Thirumalai
2006-03-08 2:14 ` Andrew Morton
2006-03-08 3:08 ` Ravikiran G Thirumalai
2006-03-08 3:22 ` Andrew Morton
2006-03-08 20:54 ` Ravikiran G Thirumalai
2006-03-08 2:02 ` [patch 3/4] net: percpufy frequently used vars -- proto.sockets_allocated Ravikiran G Thirumalai
2006-03-08 2:16 ` Andrew Morton
2006-03-08 20:56 ` Ravikiran G Thirumalai
2006-03-08 2:03 ` [patch 4/4] net: percpufy frequently used vars -- proto.inuse Ravikiran G Thirumalai
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20060308202656.GA4493@localhost.localdomain \
--to=kiran@scalex86.org \
--cc=akpm@osdl.org \
--cc=davem@davemloft.net \
--cc=linux-kernel@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=shai@scalex86.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.