mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-02 00:24:12 +08:00
c0df108128
Now that the generic atomic headers provide instrumented wrappers of all the atomics implemented by arm64, let's migrate arm64 over to these. The additional instrumentation will help to find bugs (e.g. when fuzzing with Syzkaller). Mostly this change involves adding an arch_ prefix to a number of function names and macro definitions. When LSE atomics are used, the out-of-line LL/SC atomics will be named __ll_sc_arch_atomic_${OP}. Adding the arch_ prefix requires some whitespace fixups to keep things aligned. Some other unusual whitespace is fixed up at the same time (e.g. in the cmpxchg wrappers). Signed-off-by: Mark Rutland <mark.rutland@arm.com> Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Acked-by: Will Deacon <will.deacon@arm.com> Cc: linux-arm-kernel@lists.infradead.org Cc: Catalin Marinas <catalin.marinas@arm.com> Cc: linuxdrivers@attotech.com Cc: dvyukov@google.com Cc: boqun.feng@gmail.com Cc: arnd@arndb.de Cc: aryabinin@virtuozzo.com Cc: glider@google.com Link: http://lkml.kernel.org/r/20180904104830.2975-7-mark.rutland@arm.com Signed-off-by: Ingo Molnar <mingo@kernel.org>
28 lines
1.1 KiB
C
28 lines
1.1 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
#ifndef __ASM_SYNC_BITOPS_H__
|
|
#define __ASM_SYNC_BITOPS_H__
|
|
|
|
#include <asm/bitops.h>
|
|
#include <asm/cmpxchg.h>
|
|
|
|
/* 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.
|
|
*/
|
|
|
|
#define sync_set_bit(nr, p) set_bit(nr, p)
|
|
#define sync_clear_bit(nr, p) clear_bit(nr, p)
|
|
#define sync_change_bit(nr, p) change_bit(nr, p)
|
|
#define sync_test_and_set_bit(nr, p) test_and_set_bit(nr, p)
|
|
#define sync_test_and_clear_bit(nr, p) test_and_clear_bit(nr, p)
|
|
#define sync_test_and_change_bit(nr, p) test_and_change_bit(nr, p)
|
|
#define sync_test_bit(nr, addr) test_bit(nr, addr)
|
|
#define arch_sync_cmpxchg arch_cmpxchg
|
|
|
|
#endif
|