Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

xen/arm: sync_bitops

sync_bitops functions are equivalent to the SMP implementation of the
original functions, independently from CONFIG_SMP being defined.

We need them because _set_bit etc are not SMP safe if !CONFIG_SMP. But
under Xen you might be communicating with a completely external entity
who might be on another CPU (e.g. two uniprocessor guests communicating
via event channels and grant tables). So we need a variant of the bit
ops which are SMP safe even on a UP kernel.

Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Acked-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>

+27
+27
arch/arm/include/asm/sync_bitops.h
··· 1 + #ifndef __ASM_SYNC_BITOPS_H__ 2 + #define __ASM_SYNC_BITOPS_H__ 3 + 4 + #include <asm/bitops.h> 5 + #include <asm/system.h> 6 + 7 + /* sync_bitops functions are equivalent to the SMP implementation of the 8 + * original functions, independently from CONFIG_SMP being defined. 9 + * 10 + * We need them because _set_bit etc are not SMP safe if !CONFIG_SMP. But 11 + * under Xen you might be communicating with a completely external entity 12 + * who might be on another CPU (e.g. two uniprocessor guests communicating 13 + * via event channels and grant tables). So we need a variant of the bit 14 + * ops which are SMP safe even on a UP kernel. 15 + */ 16 + 17 + #define sync_set_bit(nr, p) _set_bit(nr, p) 18 + #define sync_clear_bit(nr, p) _clear_bit(nr, p) 19 + #define sync_change_bit(nr, p) _change_bit(nr, p) 20 + #define sync_test_and_set_bit(nr, p) _test_and_set_bit(nr, p) 21 + #define sync_test_and_clear_bit(nr, p) _test_and_clear_bit(nr, p) 22 + #define sync_test_and_change_bit(nr, p) _test_and_change_bit(nr, p) 23 + #define sync_test_bit(nr, addr) test_bit(nr, addr) 24 + #define sync_cmpxchg cmpxchg 25 + 26 + 27 + #endif