linux/arch/x86/xen
Ingo Molnar 6dbde35308 percpu: add optimized generic percpu accessors
It is an optimization and a cleanup, and adds the following new
generic percpu methods:

  percpu_read()
  percpu_write()
  percpu_add()
  percpu_sub()
  percpu_and()
  percpu_or()
  percpu_xor()

and implements support for them on x86. (other architectures will fall
back to a default implementation)

The advantage is that for example to read a local percpu variable,
instead of this sequence:

 return __get_cpu_var(var);

 ffffffff8102ca2b:	48 8b 14 fd 80 09 74 	mov    -0x7e8bf680(,%rdi,8),%rdx
 ffffffff8102ca32:	81
 ffffffff8102ca33:	48 c7 c0 d8 59 00 00 	mov    $0x59d8,%rax
 ffffffff8102ca3a:	48 8b 04 10          	mov    (%rax,%rdx,1),%rax

We can get a single instruction by using the optimized variants:

 return percpu_read(var);

 ffffffff8102ca3f:	65 48 8b 05 91 8f fd 	mov    %gs:0x7efd8f91(%rip),%rax

I also cleaned up the x86-specific APIs and made the x86 code use
these new generic percpu primitives.

tj: * fixed generic percpu_sub() definition as Roel Kluin pointed out
    * added percpu_and() for completeness's sake
    * made generic percpu ops atomic against preemption

Signed-off-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Tejun Heo <tj@kernel.org>
2009-01-16 14:20:31 +01:00
..
debugfs.c xen: add debugfs support 2008-08-21 13:52:58 +02:00
debugfs.h xen: add debugfs support 2008-08-21 13:52:58 +02:00
enlighten.c percpu: add optimized generic percpu accessors 2009-01-16 14:20:31 +01:00
grant-table.c xen: make grant table arch portable 2008-04-24 23:57:32 +02:00
irq.c percpu: add optimized generic percpu accessors 2009-01-16 14:20:31 +01:00
Kconfig xen: make CONFIG_XEN_SAVE_RESTORE depend on CONFIG_XEN 2008-09-30 09:58:05 +02:00
Makefile ftrace: rename FTRACE to FUNCTION_TRACER 2008-10-20 18:27:03 +02:00
mmu.c percpu: add optimized generic percpu accessors 2009-01-16 14:20:31 +01:00
mmu.h xen: use spin_lock_nest_lock when pinning a pagetable 2008-10-09 14:25:19 +02:00
multicalls.c xen: whitespace/checkpatch cleanup 2008-12-16 21:05:01 +01:00
multicalls.h percpu: add optimized generic percpu accessors 2009-01-16 14:20:31 +01:00
setup.c xen: whitespace/checkpatch cleanup 2008-12-16 21:05:01 +01:00
smp.c percpu: add optimized generic percpu accessors 2009-01-16 14:20:31 +01:00
spinlock.c genirq: revert dynarray 2008-10-16 16:53:15 +02:00
suspend.c xen: convert to cpumask_var_t and new cpumask primitives. 2008-12-16 17:40:57 -08:00
time.c Merge branch 'cputime' of git://git390.osdl.marist.edu/pub/scm/linux-2.6 2009-01-03 11:56:24 -08:00
vdso.h
xen-asm_32.S xen: compile irq functions without -pg for ftrace 2008-07-31 12:39:39 +02:00
xen-asm_64.S xen: clean up x86-64 warnings 2008-10-03 10:04:10 +02:00
xen-head.S xen64: add xen-head code to head_64.S 2008-07-16 10:58:41 +02:00
xen-ops.h xen: convert to cpumask_var_t and new cpumask primitives. 2008-12-16 17:40:57 -08:00