mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-12-29 09:16:33 +00:00
mm: delete checks for xor_unlock_is_negative_byte()
Architectures which don't define their own use the one in asm-generic/bitops/lock.h. Get rid of all the ifdefs around "maybe we don't have it". Link: https://lkml.kernel.org/r/20231004165317.1061855-15-willy@infradead.org Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org> Acked-by: Geert Uytterhoeven <geert@linux-m68k.org> Cc: Albert Ou <aou@eecs.berkeley.edu> Cc: Alexander Gordeev <agordeev@linux.ibm.com> Cc: Andreas Dilger <adilger.kernel@dilger.ca> Cc: Christian Borntraeger <borntraeger@linux.ibm.com> Cc: Christophe Leroy <christophe.leroy@csgroup.eu> Cc: Heiko Carstens <hca@linux.ibm.com> Cc: Ivan Kokshaysky <ink@jurassic.park.msu.ru> Cc: Matt Turner <mattst88@gmail.com> Cc: Michael Ellerman <mpe@ellerman.id.au> Cc: Nicholas Piggin <npiggin@gmail.com> Cc: Palmer Dabbelt <palmer@dabbelt.com> Cc: Paul Walmsley <paul.walmsley@sifive.com> Cc: Richard Henderson <richard.henderson@linaro.org> Cc: Sven Schnelle <svens@linux.ibm.com> Cc: "Theodore Ts'o" <tytso@mit.edu> Cc: Thomas Bogendoerfer <tsbogend@alpha.franken.de> Cc: Vasily Gorbik <gor@linux.ibm.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
parent
12010aa89f
commit
f12fb73b74
@ -305,7 +305,6 @@ static inline bool xor_unlock_is_negative_byte(unsigned long mask,
|
||||
|
||||
return (old & BIT(7)) != 0;
|
||||
}
|
||||
#define xor_unlock_is_negative_byte xor_unlock_is_negative_byte
|
||||
|
||||
/*
|
||||
* ffz = Find First Zero in word. Undefined if no zero exists,
|
||||
|
@ -339,7 +339,6 @@ static inline bool xor_unlock_is_negative_byte(unsigned long mask,
|
||||
return result;
|
||||
#endif
|
||||
}
|
||||
#define xor_unlock_is_negative_byte xor_unlock_is_negative_byte
|
||||
|
||||
/*
|
||||
* The true 68020 and more advanced processors support the "bfffo"
|
||||
|
@ -301,7 +301,6 @@ static inline bool xor_unlock_is_negative_byte(unsigned long mask,
|
||||
|
||||
return res;
|
||||
}
|
||||
#define xor_unlock_is_negative_byte xor_unlock_is_negative_byte
|
||||
|
||||
#undef __bit_op
|
||||
#undef __test_bit_op
|
||||
|
@ -202,7 +202,6 @@ static inline bool xor_unlock_is_negative_byte(unsigned long mask,
|
||||
: "memory");
|
||||
return (res & BIT(7)) != 0;
|
||||
}
|
||||
#define xor_unlock_is_negative_byte xor_unlock_is_negative_byte
|
||||
|
||||
#undef __test_and_op_bit
|
||||
#undef __op_bit
|
||||
|
@ -58,7 +58,6 @@ static inline bool test_and_set_bit_lock(long nr, volatile unsigned long *addr)
|
||||
return arch_test_and_set_bit_lock(nr, addr);
|
||||
}
|
||||
|
||||
#if defined(arch_xor_unlock_is_negative_byte)
|
||||
/**
|
||||
* xor_unlock_is_negative_byte - XOR a single byte in memory and test if
|
||||
* it is negative, for unlock.
|
||||
@ -80,8 +79,4 @@ static inline bool xor_unlock_is_negative_byte(unsigned long mask,
|
||||
instrument_atomic_write(addr, sizeof(long));
|
||||
return arch_xor_unlock_is_negative_byte(mask, addr);
|
||||
}
|
||||
/* Let everybody know we have it. */
|
||||
#define xor_unlock_is_negative_byte xor_unlock_is_negative_byte
|
||||
#endif
|
||||
|
||||
#endif /* _ASM_GENERIC_BITOPS_INSTRUMENTED_LOCK_H */
|
||||
|
@ -75,7 +75,6 @@ static inline bool arch_xor_unlock_is_negative_byte(unsigned long mask,
|
||||
old = raw_atomic_long_fetch_xor_release(mask, (atomic_long_t *)p);
|
||||
return !!(old & BIT(7));
|
||||
}
|
||||
#define arch_xor_unlock_is_negative_byte arch_xor_unlock_is_negative_byte
|
||||
#endif
|
||||
|
||||
#include <asm-generic/bitops/instrumented-lock.h>
|
||||
|
@ -699,12 +699,9 @@ static void test_barrier_nothreads(struct kunit *test)
|
||||
KCSAN_EXPECT_RW_BARRIER(spin_unlock(&test_spinlock), true);
|
||||
KCSAN_EXPECT_RW_BARRIER(mutex_lock(&test_mutex), false);
|
||||
KCSAN_EXPECT_RW_BARRIER(mutex_unlock(&test_mutex), true);
|
||||
|
||||
#ifdef xor_unlock_is_negative_byte
|
||||
KCSAN_EXPECT_READ_BARRIER(xor_unlock_is_negative_byte(1, &test_var), true);
|
||||
KCSAN_EXPECT_WRITE_BARRIER(xor_unlock_is_negative_byte(1, &test_var), true);
|
||||
KCSAN_EXPECT_RW_BARRIER(xor_unlock_is_negative_byte(1, &test_var), true);
|
||||
#endif
|
||||
kcsan_nestable_atomic_end();
|
||||
}
|
||||
|
||||
|
@ -227,12 +227,9 @@ static bool __init test_barrier(void)
|
||||
KCSAN_CHECK_RW_BARRIER(arch_spin_unlock(&arch_spinlock));
|
||||
spin_lock(&test_spinlock);
|
||||
KCSAN_CHECK_RW_BARRIER(spin_unlock(&test_spinlock));
|
||||
|
||||
#ifdef xor_unlock_is_negative_byte
|
||||
KCSAN_CHECK_RW_BARRIER(xor_unlock_is_negative_byte(1, &test_var));
|
||||
KCSAN_CHECK_READ_BARRIER(xor_unlock_is_negative_byte(1, &test_var));
|
||||
KCSAN_CHECK_WRITE_BARRIER(xor_unlock_is_negative_byte(1, &test_var));
|
||||
#endif
|
||||
kcsan_nestable_atomic_end();
|
||||
|
||||
return ret;
|
||||
|
30
mm/filemap.c
30
mm/filemap.c
@ -1482,34 +1482,6 @@ void folio_add_wait_queue(struct folio *folio, wait_queue_entry_t *waiter)
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(folio_add_wait_queue);
|
||||
|
||||
#ifdef xor_unlock_is_negative_byte
|
||||
#define clear_bit_unlock_is_negative_byte(nr, p) \
|
||||
xor_unlock_is_negative_byte(1 << nr, p)
|
||||
#endif
|
||||
|
||||
#ifndef clear_bit_unlock_is_negative_byte
|
||||
|
||||
/*
|
||||
* PG_waiters is the high bit in the same byte as PG_lock.
|
||||
*
|
||||
* On x86 (and on many other architectures), we can clear PG_lock and
|
||||
* test the sign bit at the same time. But if the architecture does
|
||||
* not support that special operation, we just do this all by hand
|
||||
* instead.
|
||||
*
|
||||
* The read of PG_waiters has to be after (or concurrently with) PG_locked
|
||||
* being cleared, but a memory barrier should be unnecessary since it is
|
||||
* in the same byte as PG_locked.
|
||||
*/
|
||||
static inline bool clear_bit_unlock_is_negative_byte(long nr, volatile void *mem)
|
||||
{
|
||||
clear_bit_unlock(nr, mem);
|
||||
/* smp_mb__after_atomic(); */
|
||||
return test_bit(PG_waiters, mem);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
/**
|
||||
* folio_unlock - Unlock a locked folio.
|
||||
* @folio: The folio.
|
||||
@ -1525,7 +1497,7 @@ void folio_unlock(struct folio *folio)
|
||||
BUILD_BUG_ON(PG_waiters != 7);
|
||||
BUILD_BUG_ON(PG_locked > 7);
|
||||
VM_BUG_ON_FOLIO(!folio_test_locked(folio), folio);
|
||||
if (clear_bit_unlock_is_negative_byte(PG_locked, folio_flags(folio, 0)))
|
||||
if (xor_unlock_is_negative_byte(1 << PG_locked, folio_flags(folio, 0)))
|
||||
folio_wake_bit(folio, PG_locked);
|
||||
}
|
||||
EXPORT_SYMBOL(folio_unlock);
|
||||
|
@ -1098,12 +1098,9 @@ static void kasan_bitops_test_and_modify(struct kunit *test, int nr, void *addr)
|
||||
KUNIT_EXPECT_KASAN_FAIL(test, test_and_change_bit(nr, addr));
|
||||
KUNIT_EXPECT_KASAN_FAIL(test, __test_and_change_bit(nr, addr));
|
||||
KUNIT_EXPECT_KASAN_FAIL(test, kasan_int_result = test_bit(nr, addr));
|
||||
|
||||
#if defined(xor_unlock_is_negative_byte)
|
||||
if (nr < 7)
|
||||
KUNIT_EXPECT_KASAN_FAIL(test, kasan_int_result =
|
||||
xor_unlock_is_negative_byte(1 << nr, addr));
|
||||
#endif
|
||||
}
|
||||
|
||||
static void kasan_bitops_generic(struct kunit *test)
|
||||
|
Loading…
Reference in New Issue
Block a user