From: Eric Dumazet <eric.dumazet@gmail.com>
To: Christoph Lameter <cl@linux.com>
Cc: akpm@linux-foundation.org, linux-mm@kvack.org
Subject: Re: percpu: Implement this_cpu_add,sub,dec,inc_return
Date: Wed, 17 Nov 2010 19:28:47 +0100 [thread overview]
Message-ID: <1290018527.2687.108.camel@edumazet-laptop> (raw)
In-Reply-To: <alpine.DEB.2.00.1011100939530.23566@router.home>
Le mercredi 10 novembre 2010 A 09:40 -0600, Christoph Lameter a A(C)crit :
> Tried it. This is the result.
>
>
> Implement this_cpu_add_return and friends and supply an optimized
> implementation for x86.
>
> Use this_cpu_add_return for vmstats and nmi processing.
>
> There is no win in terms of code size (stays the same because xadd is a
> longer instruction thaninc and requires loading a constant in a register first)
> but we eliminate one memory access.
>
> Plus we introduce a more flexible way of per cpu atomic operations.
>
> Signed-off-by: Christoph Lameter <cl@linux.com>
>
> ---
I believe this new xx_return stuff would be useful on x86_32 :
#if defined(CONFIG_HIGHMEM) || defined(CONFIG_X86_32)
kmap_atomic_idx_push() / kmap_atomic_idx_pop() are a bit expensive
because :
c102a652: 0f 01 3b invlpg (%ebx)
int idx = --__get_cpu_var(__kmap_atomic_idx);
c102a655: 64 03 3d 90 40 5f c1 add %fs:0xc15f4090,%edi
c102a65c: 8b 07 mov (%edi),%eax
c102a65e: 83 e8 01 sub $0x1,%eax
c102a661: 85 c0 test %eax,%eax
c102a663: 89 07 mov %eax,(%edi)
diff --git a/include/linux/highmem.h b/include/linux/highmem.h
index b676c58..bb5db26 100644
--- a/include/linux/highmem.h
+++ b/include/linux/highmem.h
@@ -91,7 +91,7 @@ static inline int kmap_atomic_idx_push(void)
static inline int kmap_atomic_idx(void)
{
- return __get_cpu_var(__kmap_atomic_idx) - 1;
+ return __this_cpu_read(__kmap_atomic_idx) - 1;
}
static inline int kmap_atomic_idx_pop(void)
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Fight unfair telecom policy in Canada: sign http://dissolvethecrtc.ca/
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
next prev parent reply other threads:[~2010-11-17 18:28 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-11-09 17:27 vmstat: Optimize zone counter modifications through the use of this cpu operations Christoph Lameter
2010-11-10 15:40 ` percpu: Implement this_cpu_add,sub,dec,inc_return Christoph Lameter
2010-11-17 18:28 ` Eric Dumazet [this message]
2010-11-19 15:42 ` Christoph Lameter
2010-11-19 15:51 ` Eric Dumazet
2010-11-19 15:59 ` Christoph Lameter
2010-11-19 16:12 ` Eric Dumazet
2010-11-19 17:09 ` Christoph Lameter
2010-11-19 17:59 ` Christoph Lameter
2010-11-20 9:50 ` Eric Dumazet
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=1290018527.2687.108.camel@edumazet-laptop \
--to=eric.dumazet@gmail.com \
--cc=akpm@linux-foundation.org \
--cc=cl@linux.com \
--cc=linux-mm@kvack.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox