mirror of
https://github.com/tbsdtv/linux_media.git
synced 2025-07-23 20:51:03 +02:00
asm-generic/bitops, kcsan: Add instrumentation for barriers
Adds the required KCSAN instrumentation for barriers of atomic bitops. Signed-off-by: Marco Elver <elver@google.com> Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
This commit is contained in:
committed by
Paul E. McKenney
parent
e87c4f6642
commit
04def1b9b4
@@ -67,6 +67,7 @@ static inline void change_bit(long nr, volatile unsigned long *addr)
|
|||||||
*/
|
*/
|
||||||
static inline bool test_and_set_bit(long nr, volatile unsigned long *addr)
|
static inline bool test_and_set_bit(long nr, volatile unsigned long *addr)
|
||||||
{
|
{
|
||||||
|
kcsan_mb();
|
||||||
instrument_atomic_read_write(addr + BIT_WORD(nr), sizeof(long));
|
instrument_atomic_read_write(addr + BIT_WORD(nr), sizeof(long));
|
||||||
return arch_test_and_set_bit(nr, addr);
|
return arch_test_and_set_bit(nr, addr);
|
||||||
}
|
}
|
||||||
@@ -80,6 +81,7 @@ static inline bool test_and_set_bit(long nr, volatile unsigned long *addr)
|
|||||||
*/
|
*/
|
||||||
static inline bool test_and_clear_bit(long nr, volatile unsigned long *addr)
|
static inline bool test_and_clear_bit(long nr, volatile unsigned long *addr)
|
||||||
{
|
{
|
||||||
|
kcsan_mb();
|
||||||
instrument_atomic_read_write(addr + BIT_WORD(nr), sizeof(long));
|
instrument_atomic_read_write(addr + BIT_WORD(nr), sizeof(long));
|
||||||
return arch_test_and_clear_bit(nr, addr);
|
return arch_test_and_clear_bit(nr, addr);
|
||||||
}
|
}
|
||||||
@@ -93,6 +95,7 @@ static inline bool test_and_clear_bit(long nr, volatile unsigned long *addr)
|
|||||||
*/
|
*/
|
||||||
static inline bool test_and_change_bit(long nr, volatile unsigned long *addr)
|
static inline bool test_and_change_bit(long nr, volatile unsigned long *addr)
|
||||||
{
|
{
|
||||||
|
kcsan_mb();
|
||||||
instrument_atomic_read_write(addr + BIT_WORD(nr), sizeof(long));
|
instrument_atomic_read_write(addr + BIT_WORD(nr), sizeof(long));
|
||||||
return arch_test_and_change_bit(nr, addr);
|
return arch_test_and_change_bit(nr, addr);
|
||||||
}
|
}
|
||||||
|
@@ -22,6 +22,7 @@
|
|||||||
*/
|
*/
|
||||||
static inline void clear_bit_unlock(long nr, volatile unsigned long *addr)
|
static inline void clear_bit_unlock(long nr, volatile unsigned long *addr)
|
||||||
{
|
{
|
||||||
|
kcsan_release();
|
||||||
instrument_atomic_write(addr + BIT_WORD(nr), sizeof(long));
|
instrument_atomic_write(addr + BIT_WORD(nr), sizeof(long));
|
||||||
arch_clear_bit_unlock(nr, addr);
|
arch_clear_bit_unlock(nr, addr);
|
||||||
}
|
}
|
||||||
@@ -37,6 +38,7 @@ static inline void clear_bit_unlock(long nr, volatile unsigned long *addr)
|
|||||||
*/
|
*/
|
||||||
static inline void __clear_bit_unlock(long nr, volatile unsigned long *addr)
|
static inline void __clear_bit_unlock(long nr, volatile unsigned long *addr)
|
||||||
{
|
{
|
||||||
|
kcsan_release();
|
||||||
instrument_write(addr + BIT_WORD(nr), sizeof(long));
|
instrument_write(addr + BIT_WORD(nr), sizeof(long));
|
||||||
arch___clear_bit_unlock(nr, addr);
|
arch___clear_bit_unlock(nr, addr);
|
||||||
}
|
}
|
||||||
@@ -71,6 +73,7 @@ static inline bool test_and_set_bit_lock(long nr, volatile unsigned long *addr)
|
|||||||
static inline bool
|
static inline bool
|
||||||
clear_bit_unlock_is_negative_byte(long nr, volatile unsigned long *addr)
|
clear_bit_unlock_is_negative_byte(long nr, volatile unsigned long *addr)
|
||||||
{
|
{
|
||||||
|
kcsan_release();
|
||||||
instrument_atomic_write(addr + BIT_WORD(nr), sizeof(long));
|
instrument_atomic_write(addr + BIT_WORD(nr), sizeof(long));
|
||||||
return arch_clear_bit_unlock_is_negative_byte(nr, addr);
|
return arch_clear_bit_unlock_is_negative_byte(nr, addr);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user