From: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
To: Christoph Lameter <cl@linux.com>
Cc: akpm@linux-foundation.org, Pekka Enberg <penberg@cs.helsinki.fi>,
linux-kernel@vger.kernel.org,
Eric Dumazet <eric.dumazet@gmail.com>, Tejun Heo <tj@kernel.org>
Subject: Re: [thisops uV2 09/10] x86: this_cpu_cmpxchg and this_cpu_cmpxchg_double operations
Date: Sat, 27 Nov 2010 10:20:26 -0500 [thread overview]
Message-ID: <20101127152026.GA15758@Krystal> (raw)
In-Reply-To: <20101126210954.166783984@linux.com>
* Christoph Lameter (cl@linux.com) wrote:
> Provide support as far as the hardware capabilities of the x86 cpus
> allow.
>
> V1->V2:
> - Mark %rdx clobbering during cmpxchg16b
> - Provide emulation of cmpxchg16b for early AMD processors
>
> Signed-off-by: Christoph Lameter <cl@linux.com>
[...]
> +/*
> + * Something is screwed up with alternate instruction creation. This one
> + * fails with a mysterious asm error about a byte val > 255.
Hrm, "interesting" ;) Does each of these work if expressed directly in inline
assembly without the alternatives ? Can you give us more information about the
failure ?
> + */
> +#define percpu_cmpxchg16b(pcp, o1, o2, n1, n2) \
> +({ \
> + char __ret; \
> + typeof(o1) __o1 = o1; \
> + typeof(o1) __n1 = n1; \
> + typeof(o2) __o2 = o2; \
> + typeof(o2) __n2 = n2; \
> + typeof(o2) __dummy; \
> + VM_BUG_ON(((unsigned long)pcp) % 16); \
Restricting typing on "pcp" at build time might be more appropriate. E.g.
creating a "struct doublecas" that would be forcefully aligned on 16 bytes. We
could check that with __builtin_types_compatible_p and generate a build failure
if necessary.
Thanks,
Mathieu
> + alternative_io("call cmpxchg16b_local\n\t" P6_NOP4, \
> + "cmpxchg16b %%gs:(%%rsi)\n\tsetz %0\n\t", \
> + X86_FEATURE_CX16, \
> + ASM_OUTPUT2("=a"(__ret), "=d"(__dummy)), \
> + "S" (pcp), "b"(__n1), "c"(__n2), \
> + "a"(__o1), "d"(__o2)); \
> + __ret; \
> +})
--
Mathieu Desnoyers
Operating System Efficiency R&D Consultant
EfficiOS Inc.
http://www.efficios.com
next prev parent reply other threads:[~2010-11-27 15:20 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-11-26 21:09 [thisops uV2 00/10] Upgrade of this_cpu_ops V2 Christoph Lameter
2010-11-26 21:09 ` [thisops uV2 01/10] percpucounter: Optimize __percpu_counter_add a bit through the use of this_cpu() options Christoph Lameter
2010-11-27 14:42 ` Mathieu Desnoyers
2010-11-26 21:09 ` [thisops uV2 02/10] vmstat: Optimize zone counter modifications through the use of this cpu operations Christoph Lameter
2010-11-27 8:00 ` Pekka Enberg
2010-11-27 14:49 ` Mathieu Desnoyers
2010-11-29 16:16 ` Christoph Lameter
2010-11-29 17:13 ` Christoph Lameter
2010-11-29 19:28 ` Mathieu Desnoyers
2010-11-29 20:07 ` Christoph Lameter
2010-11-29 20:59 ` Christoph Lameter
2010-11-26 21:09 ` [thisops uV2 03/10] percpu: Generic support for this_cpu_add,sub,dec,inc_return Christoph Lameter
2010-11-27 14:58 ` Mathieu Desnoyers
2010-11-29 16:08 ` Christoph Lameter
2010-11-26 21:09 ` [thisops uV2 04/10] x86: Support " Christoph Lameter
2010-11-27 8:06 ` Pekka Enberg
2010-11-29 16:03 ` Christoph Lameter
2010-11-27 15:00 ` Mathieu Desnoyers
2010-11-29 16:31 ` Christoph Lameter
2010-11-29 18:33 ` Mathieu Desnoyers
2010-11-29 18:54 ` Christoph Lameter
2010-11-29 19:22 ` Mathieu Desnoyers
2010-11-29 20:09 ` Christoph Lameter
2010-11-26 21:09 ` [thisops uV2 05/10] x86: Use this_cpu_inc_return for nmi counter Christoph Lameter
2010-11-27 8:07 ` Pekka Enberg
2010-11-27 15:00 ` Mathieu Desnoyers
2010-11-26 21:09 ` [thisops uV2 06/10] vmstat: Use this_cpu_inc_return for vm statistics Christoph Lameter
2010-11-27 8:09 ` Pekka Enberg
2010-11-29 16:04 ` Christoph Lameter
2010-11-26 21:09 ` [thisops uV2 07/10] highmem: Use this_cpu_xx_return() operations Christoph Lameter
2010-11-26 21:09 ` [thisops uV2 08/10] percpu: generic this_cpu_cmpxchg() and this_cpu_cmpxchg_double support Christoph Lameter
2010-11-26 21:09 ` [thisops uV2 09/10] x86: this_cpu_cmpxchg and this_cpu_cmpxchg_double operations Christoph Lameter
2010-11-27 6:30 ` Eric Dumazet
2010-11-27 15:20 ` Mathieu Desnoyers [this message]
2010-11-29 16:11 ` Christoph Lameter
2010-11-26 21:09 ` [thisops uV2 10/10] slub: Lockless fastpaths Christoph Lameter
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=20101127152026.GA15758@Krystal \
--to=mathieu.desnoyers@efficios.com \
--cc=akpm@linux-foundation.org \
--cc=cl@linux.com \
--cc=eric.dumazet@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=penberg@cs.helsinki.fi \
--cc=tj@kernel.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