1*c865f654SCornelia Huck #ifndef _ASMX86_BARRIER_H_ 2*c865f654SCornelia Huck #define _ASMX86_BARRIER_H_ 38226c540SAlexander Gordeev /* 48226c540SAlexander Gordeev * Copyright (C) 2016, Red Hat Inc, Alexander Gordeev <agordeev@redhat.com> 58226c540SAlexander Gordeev * 68226c540SAlexander Gordeev * This work is licensed under the terms of the GNU LGPL, version 2. 78226c540SAlexander Gordeev */ 88226c540SAlexander Gordeev 98226c540SAlexander Gordeev #define mb() asm volatile("mfence":::"memory") 108226c540SAlexander Gordeev #define rmb() asm volatile("lfence":::"memory") 118226c540SAlexander Gordeev #define wmb() asm volatile("sfence":::"memory") 128226c540SAlexander Gordeev 1353776986SRoman Kagan #define smp_rmb() barrier() 1453776986SRoman Kagan #define smp_wmb() barrier() 1553776986SRoman Kagan 16d77d128fSPeter Xu /* REP NOP (PAUSE) is a good thing to insert into busy-wait loops. */ rep_nop(void)17d77d128fSPeter Xustatic inline void rep_nop(void) 18d77d128fSPeter Xu { 19d77d128fSPeter Xu asm volatile("rep; nop" ::: "memory"); 20d77d128fSPeter Xu } 21d77d128fSPeter Xu cpu_relax(void)22d77d128fSPeter Xustatic inline void cpu_relax(void) 23d77d128fSPeter Xu { 24d77d128fSPeter Xu rep_nop(); 25d77d128fSPeter Xu } 26d77d128fSPeter Xu 278226c540SAlexander Gordeev #endif 28