X-Git-Url: http://git.liburcu.org/?p=urcu.git;a=blobdiff_plain;f=arch_x86.h;h=e7d945e3859393edece5eb4b2aee4c99538083e2;hp=9e0079d6a5a7fc8fee6e81e0ea26d80995446450;hb=ebb22fff4a06b0661b55726ad332c4c53f6603fe;hpb=ca9a18e1de82400d47549d01621a637a0b8765b7 diff --git a/arch_x86.h b/arch_x86.h index 9e0079d..e7d945e 100644 --- a/arch_x86.h +++ b/arch_x86.h @@ -84,11 +84,24 @@ /* Nop everywhere except on alpha. */ #define smp_read_barrier_depends() +static inline void rep_nop(void) +{ + asm volatile("rep; nop" : : : "memory"); +} + static inline void cpu_relax(void) { rep_nop(); } +/* + * Serialize core instruction execution. Also acts as a compiler barrier. + */ +static inline void sync_core(void) +{ + asm volatile("cpuid" : : : "memory", "eax", "ebx", "ecx", "edx"); +} + #define rdtscll(val) \ do { \ unsigned int __a, __d; \