memory barriers

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

The memory barrier routines are macros which calls a routine called

alternative, the call is something is like this : (for mb())

#define mb() alternative("lock; addl $0,0(%%esp)", "mfence", X86_FEATURE_XMM2)

can someone please help me understanding the alternative inline assembly, i am finding it a bit confusing.

source is in : include/asm-i386/system.h

#define alternative(oldinstr, newinstr, feature) \

asm volatile ("661:\n\t" oldinstr "\n662:\n" \

".section .altinstructions,\"a\"\n" \

" .align 4\n" \

" .long 661b\n" /* label */ \

" .long 663f\n" /* new instruction */ \

" .byte %c0\n" /* feature bit */ \

" .byte 662b-661b\n" /* sourcelen */ \

" .byte 664f-663f\n" /* replacementlen */ \

".previous\n" \

".section .altinstr_replacement,\"ax\"\n" \

"663:\n\t" newinstr "\n664:\n" /* replacement */ \

".previous" :: "i" (feature) : "memory")


[Index of Archives]     [Newbies FAQ]     [Linux Kernel Mentors]     [Linux Kernel Development]     [IETF Annouce]     [Git]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux SCSI]     [Linux ACPI]
  Powered by Linux