From: Rusty Russell <rusty@rustcorp.com.au>
To: davidm@hpl.hp.com
Cc: linux-kernel@vger.kernel.org, torvalds@transmeta.com, ak@suse.de
Subject: Re: per_cpu fixes
Date: Fri, 11 Jul 2003 12:01:08 +1000 [thread overview]
Message-ID: <20030711020147.96A282C113@lists.samba.org> (raw)
In-Reply-To: Your message of "Thu, 10 Jul 2003 10:55:06 MST." <16141.43130.657025.952793@napali.hpl.hp.com>
In message <16141.43130.657025.952793@napali.hpl.hp.com> you write:
> You mean there would be three primitives:
>
> (1) get value from a per-CPU variable
> (2) set value of a per-CPU variable
> (3) get the (canonical) address of a per-CPU variable
>
> ?
Almost, #3 would actually be "get lvalue", as now.
The only problem is that a quick audit of 2.5.75 reveals 16 places in
generic code where set/get primitives would work without jumping
through hoops, out of 43.
New idea:
Provide cpu_local_inc(var)/cpu_local_dec(var) and __cpu_local_inc(var)
and __cpu_local_dec(var). Generic implementation:
/* This is local.h */
typedef atomic_t local_t;
#define local_inc(l) atomic_inc(l)
#define local_dec(l) atomic_dec(l)
/* l is a per-cpu local_t. Increment it atomically. */
#define cpu_local_inc(l) local_inc(&__get_cpu_var(l))
#define cpu_local_dec(l) local_dec(&__get_cpu_var(l))
/* Increment non-atomically (must have preempt disabled) */
#define __cpu_local_inc(l) \
atomic_set(&__get_cpu_var(l), atomic_read(&__get_cpu_var(l)) + 1)
#define __cpu_local_dec(l) \
atomic_set(&__get_cpu_var(l), atomic_read(&__get_cpu_var(l)) - 1)
This catches one common case for ia64 to use the magic pinned area,
and also allows x86 to use its incl/decl instructions, which both
networking stats and module refcounts have wanted for a while.
Thoughts?
Rusty.
--
Anyone who quotes me in their sig is an idiot. -- Rusty Russell.
next prev parent reply other threads:[~2003-07-11 1:47 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2003-07-09 21:20 per_cpu fixes David Mosberger
2003-07-09 21:56 ` David Mosberger
2003-07-10 1:41 ` Rusty Russell
2003-07-10 9:37 ` Andi Kleen
2003-07-10 17:55 ` David Mosberger
2003-07-10 18:15 ` Linus Torvalds
2003-07-10 18:22 ` David Mosberger
2003-07-11 2:01 ` Rusty Russell [this message]
2003-07-11 2:08 ` David Mosberger
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=20030711020147.96A282C113@lists.samba.org \
--to=rusty@rustcorp.com.au \
--cc=ak@suse.de \
--cc=davidm@hpl.hp.com \
--cc=linux-kernel@vger.kernel.org \
--cc=torvalds@transmeta.com \
/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.