Here should return 64-bit types rather than 32-bit types. Or we may get wrong return value if high 32-bit isn't equal to zero. Signed-off-by: Zhi-zhou Zhang <zhizhou.zh@xxxxxxxxx> --- arch/mips/include/asm/bitops.h | 8 ++++---- arch/mips/lib/bitops.c | 10 ++++++---- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/arch/mips/include/asm/bitops.h b/arch/mips/include/asm/bitops.h index 71305a8..7502601 100644 --- a/arch/mips/include/asm/bitops.h +++ b/arch/mips/include/asm/bitops.h @@ -51,13 +51,13 @@ void __mips_set_bit(unsigned long nr, volatile unsigned long *addr); void __mips_clear_bit(unsigned long nr, volatile unsigned long *addr); void __mips_change_bit(unsigned long nr, volatile unsigned long *addr); -int __mips_test_and_set_bit(unsigned long nr, +unsigned long __mips_test_and_set_bit(unsigned long nr, volatile unsigned long *addr); -int __mips_test_and_set_bit_lock(unsigned long nr, +unsigned long __mips_test_and_set_bit_lock(unsigned long nr, volatile unsigned long *addr); -int __mips_test_and_clear_bit(unsigned long nr, +unsigned long __mips_test_and_clear_bit(unsigned long nr, volatile unsigned long *addr); -int __mips_test_and_change_bit(unsigned long nr, +unsigned long __mips_test_and_change_bit(unsigned long nr, volatile unsigned long *addr); diff --git a/arch/mips/lib/bitops.c b/arch/mips/lib/bitops.c index 81f1dcf..f8d14fc 100644 --- a/arch/mips/lib/bitops.c +++ b/arch/mips/lib/bitops.c @@ -83,7 +83,7 @@ EXPORT_SYMBOL(__mips_change_bit); * @nr: Bit to set * @addr: Address to count from */ -int __mips_test_and_set_bit(unsigned long nr, +unsigned long __mips_test_and_set_bit(unsigned long nr, volatile unsigned long *addr) { volatile unsigned long *a = addr; @@ -109,7 +109,7 @@ EXPORT_SYMBOL(__mips_test_and_set_bit); * @nr: Bit to set * @addr: Address to count from */ -int __mips_test_and_set_bit_lock(unsigned long nr, +unsigned long __mips_test_and_set_bit_lock(unsigned long nr, volatile unsigned long *addr) { volatile unsigned long *a = addr; @@ -135,7 +135,8 @@ EXPORT_SYMBOL(__mips_test_and_set_bit_lock); * @nr: Bit to clear * @addr: Address to count from */ -int __mips_test_and_clear_bit(unsigned long nr, volatile unsigned long *addr) +unsigned long __mips_test_and_clear_bit(unsigned long nr, + volatile unsigned long *addr) { volatile unsigned long *a = addr; unsigned bit = nr & SZLONG_MASK; @@ -160,7 +161,8 @@ EXPORT_SYMBOL(__mips_test_and_clear_bit); * @nr: Bit to change * @addr: Address to count from */ -int __mips_test_and_change_bit(unsigned long nr, volatile unsigned long *addr) +unsigned long __mips_test_and_change_bit(unsigned long nr, + volatile unsigned long *addr) { volatile unsigned long *a = addr; unsigned bit = nr & SZLONG_MASK; -- 1.7.9.5