361c564eef
We will need it for atomic.h, so move it from the ad-hoc tools/perf/ place to a tools/ subset of the kernel arch/ hierarchy. Other aches will follow, each in a cset. Cc: Adrian Hunter <adrian.hunter@intel.com> Cc: Borislav Petkov <bp@suse.de> Cc: David Ahern <dsahern@gmail.com> Cc: Don Zickus <dzickus@redhat.com> Cc: Frederic Weisbecker <fweisbec@gmail.com> Cc: Jiri Olsa <jolsa@redhat.com> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Stephane Eranian <eranian@google.com> Link: http://lkml.kernel.org/n/tip-vy6bqmsvm6puibpay2cy4wid@git.kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
28 lines
907 B
C
28 lines
907 B
C
#ifndef _TOOLS_LINUX_ASM_X86_BARRIER_H
|
|
#define _TOOLS_LINUX_ASM_X86_BARRIER_H
|
|
|
|
/*
|
|
* Copied from the Linux kernel sources, and also moving code
|
|
* out from tools/perf/perf-sys.h so as to make it be located
|
|
* in a place similar as in the kernel sources.
|
|
*
|
|
* Force strict CPU ordering.
|
|
* And yes, this is required on UP too when we're talking
|
|
* to devices.
|
|
*/
|
|
|
|
#if defined(__i386__)
|
|
/*
|
|
* Some non-Intel clones support out of order store. wmb() ceases to be a
|
|
* nop for these.
|
|
*/
|
|
#define mb() asm volatile("lock; addl $0,0(%%esp)" ::: "memory")
|
|
#define rmb() asm volatile("lock; addl $0,0(%%esp)" ::: "memory")
|
|
#define wmb() asm volatile("lock; addl $0,0(%%esp)" ::: "memory")
|
|
#elif defined(__x86_64__)
|
|
#define mb() asm volatile("mfence":::"memory")
|
|
#define rmb() asm volatile("lfence":::"memory")
|
|
#define wmb() asm volatile("sfence" ::: "memory")
|
|
#endif
|
|
|
|
#endif /* _TOOLS_LINUX_ASM_X86_BARRIER_H */
|