/* * 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.
*/
#ifdefined(__i386__) /* * Some non-Intel clones support out of order store. wmb() ceases to be a * nop for these.
*/ #define mb() asmvolatile("lock; addl $0,0(%%esp)" ::: "memory") #define rmb() asmvolatile("lock; addl $0,0(%%esp)" ::: "memory") #define wmb() asmvolatile("lock; addl $0,0(%%esp)" ::: "memory") #elifdefined(__x86_64__) #define mb() asmvolatile("mfence" ::: "memory") #define rmb() asmvolatile("lfence" ::: "memory") #define wmb() asmvolatile("sfence" ::: "memory") #define smp_rmb() barrier() #define smp_wmb() barrier() #define smp_mb() asmvolatile("lock; addl $0,-132(%%rsp)" ::: "memory", "cc") #endif
#ifdefined(__x86_64__) #define smp_store_release(p, v) \ do { \
barrier(); \
WRITE_ONCE(*p, v); \
} while (0)
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.