From: Akinobu Mita <akinobu.mita@gmail.com> To: linux-kernel@vger.kernel.org, linux-arch@vger.kernel.org, akpm@linux-foundation.org Cc: Akinobu Mita <akinobu.mita@gmail.com>, Benjamin Herrenschmidt <benh@kernel.crashing.org>, Paul Mackerras <paulus@samba.org>, linuxppc-dev@lists.ozlabs.org Subject: [PATCH -mm 2/6] powerpc: convert little-endian bitops macros to static inline functions Date: Thu, 27 Jan 2011 22:56:19 +0900 [thread overview] Message-ID: <1296136583-13815-3-git-send-email-akinobu.mita@gmail.com> (raw) In-Reply-To: <1296136583-13815-1-git-send-email-akinobu.mita@gmail.com> (This patch is intended to be folded into the patch in -mm: powerpc-introduce-little-endian-bitops.patch) The little-endian bitops on powerpc are written as preprocessor macros with the cast to "unsigned long *". This means that even non-pointers will be accepted without an error, and that is a Very Bad Thing. This converts the little-endian bitops macros to static inline functions with proper prototypes. Suggested-by: "H. Peter Anvin" <hpa@zytor.com> Signed-off-by: Akinobu Mita <akinobu.mita@gmail.com> Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> Cc: Paul Mackerras <paulus@samba.org> Cc: linuxppc-dev@lists.ozlabs.org --- arch/powerpc/include/asm/bitops.h | 43 +++++++++++++++++++++++++------------ 1 files changed, 29 insertions(+), 14 deletions(-) diff --git a/arch/powerpc/include/asm/bitops.h b/arch/powerpc/include/asm/bitops.h index fe67024..2e56187 100644 --- a/arch/powerpc/include/asm/bitops.h +++ b/arch/powerpc/include/asm/bitops.h @@ -288,20 +288,35 @@ static __inline__ int test_bit_le(unsigned long nr, return (tmp[nr >> 3] >> (nr & 7)) & 1; } -#define __set_bit_le(nr, addr) \ - __set_bit((nr) ^ BITOP_LE_SWIZZLE, (unsigned long *)(addr)) -#define __clear_bit_le(nr, addr) \ - __clear_bit((nr) ^ BITOP_LE_SWIZZLE, (unsigned long *)(addr)) - -#define test_and_set_bit_le(nr, addr) \ - test_and_set_bit((nr) ^ BITOP_LE_SWIZZLE, (unsigned long *)(addr)) -#define test_and_clear_bit_le(nr, addr) \ - test_and_clear_bit((nr) ^ BITOP_LE_SWIZZLE, (unsigned long *)(addr)) - -#define __test_and_set_bit_le(nr, addr) \ - __test_and_set_bit((nr) ^ BITOP_LE_SWIZZLE, (unsigned long *)(addr)) -#define __test_and_clear_bit_le(nr, addr) \ - __test_and_clear_bit((nr) ^ BITOP_LE_SWIZZLE, (unsigned long *)(addr)) +static inline void __set_bit_le(int nr, void *addr) +{ + __set_bit(nr ^ BITOP_LE_SWIZZLE, addr); +} + +static inline void __clear_bit_le(int nr, void *addr) +{ + __clear_bit(nr ^ BITOP_LE_SWIZZLE, addr); +} + +static inline int test_and_set_bit_le(int nr, void *addr) +{ + return test_and_set_bit(nr ^ BITOP_LE_SWIZZLE, addr); +} + +static inline int test_and_clear_bit_le(int nr, void *addr) +{ + return test_and_clear_bit(nr ^ BITOP_LE_SWIZZLE, addr); +} + +static inline int __test_and_set_bit_le(int nr, void *addr) +{ + return __test_and_set_bit(nr ^ BITOP_LE_SWIZZLE, addr); +} + +static inline int __test_and_clear_bit_le(int nr, void *addr) +{ + return __test_and_clear_bit(nr ^ BITOP_LE_SWIZZLE, addr); +} #define find_first_zero_bit_le(addr, size) \ find_next_zero_bit_le((addr), (size), 0) -- 1.7.3.4
WARNING: multiple messages have this Message-ID (diff)
From: Akinobu Mita <akinobu.mita@gmail.com> To: linux-kernel@vger.kernel.org, linux-arch@vger.kernel.org, akpm@linux-foundation.org Cc: linuxppc-dev@lists.ozlabs.org, Paul Mackerras <paulus@samba.org>, Akinobu Mita <akinobu.mita@gmail.com> Subject: [PATCH -mm 2/6] powerpc: convert little-endian bitops macros to static inline functions Date: Thu, 27 Jan 2011 22:56:19 +0900 [thread overview] Message-ID: <1296136583-13815-3-git-send-email-akinobu.mita@gmail.com> (raw) In-Reply-To: <1296136583-13815-1-git-send-email-akinobu.mita@gmail.com> (This patch is intended to be folded into the patch in -mm: powerpc-introduce-little-endian-bitops.patch) The little-endian bitops on powerpc are written as preprocessor macros with the cast to "unsigned long *". This means that even non-pointers will be accepted without an error, and that is a Very Bad Thing. This converts the little-endian bitops macros to static inline functions with proper prototypes. Suggested-by: "H. Peter Anvin" <hpa@zytor.com> Signed-off-by: Akinobu Mita <akinobu.mita@gmail.com> Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> Cc: Paul Mackerras <paulus@samba.org> Cc: linuxppc-dev@lists.ozlabs.org --- arch/powerpc/include/asm/bitops.h | 43 +++++++++++++++++++++++++------------ 1 files changed, 29 insertions(+), 14 deletions(-) diff --git a/arch/powerpc/include/asm/bitops.h b/arch/powerpc/include/asm/bitops.h index fe67024..2e56187 100644 --- a/arch/powerpc/include/asm/bitops.h +++ b/arch/powerpc/include/asm/bitops.h @@ -288,20 +288,35 @@ static __inline__ int test_bit_le(unsigned long nr, return (tmp[nr >> 3] >> (nr & 7)) & 1; } -#define __set_bit_le(nr, addr) \ - __set_bit((nr) ^ BITOP_LE_SWIZZLE, (unsigned long *)(addr)) -#define __clear_bit_le(nr, addr) \ - __clear_bit((nr) ^ BITOP_LE_SWIZZLE, (unsigned long *)(addr)) - -#define test_and_set_bit_le(nr, addr) \ - test_and_set_bit((nr) ^ BITOP_LE_SWIZZLE, (unsigned long *)(addr)) -#define test_and_clear_bit_le(nr, addr) \ - test_and_clear_bit((nr) ^ BITOP_LE_SWIZZLE, (unsigned long *)(addr)) - -#define __test_and_set_bit_le(nr, addr) \ - __test_and_set_bit((nr) ^ BITOP_LE_SWIZZLE, (unsigned long *)(addr)) -#define __test_and_clear_bit_le(nr, addr) \ - __test_and_clear_bit((nr) ^ BITOP_LE_SWIZZLE, (unsigned long *)(addr)) +static inline void __set_bit_le(int nr, void *addr) +{ + __set_bit(nr ^ BITOP_LE_SWIZZLE, addr); +} + +static inline void __clear_bit_le(int nr, void *addr) +{ + __clear_bit(nr ^ BITOP_LE_SWIZZLE, addr); +} + +static inline int test_and_set_bit_le(int nr, void *addr) +{ + return test_and_set_bit(nr ^ BITOP_LE_SWIZZLE, addr); +} + +static inline int test_and_clear_bit_le(int nr, void *addr) +{ + return test_and_clear_bit(nr ^ BITOP_LE_SWIZZLE, addr); +} + +static inline int __test_and_set_bit_le(int nr, void *addr) +{ + return __test_and_set_bit(nr ^ BITOP_LE_SWIZZLE, addr); +} + +static inline int __test_and_clear_bit_le(int nr, void *addr) +{ + return __test_and_clear_bit(nr ^ BITOP_LE_SWIZZLE, addr); +} #define find_first_zero_bit_le(addr, size) \ find_next_zero_bit_le((addr), (size), 0) -- 1.7.3.4
next prev parent reply other threads:[~2011-01-27 13:55 UTC|newest] Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top 2011-01-27 13:56 [PATCH -mm 0/6] convert little-endian bitops macros to inline functions Akinobu Mita 2011-01-27 13:56 ` [PATCH -mm 1/6] asm-generic: convert little-endian bitops macros to static " Akinobu Mita 2011-01-27 13:56 ` Akinobu Mita 2011-01-27 13:56 ` Akinobu Mita [this message] 2011-01-27 13:56 ` [PATCH -mm 2/6] powerpc: " Akinobu Mita 2011-02-06 23:14 ` Benjamin Herrenschmidt 2011-02-06 23:14 ` Benjamin Herrenschmidt 2011-02-07 3:08 ` Akinobu Mita 2011-02-07 3:08 ` Akinobu Mita 2011-01-27 13:56 ` [PATCH -mm 3/6] s390: " Akinobu Mita 2011-01-27 13:56 ` [PATCH -mm 4/6] arm: " Akinobu Mita 2011-01-27 13:56 ` [PATCH -mm 5/6] m68k: " Akinobu Mita 2011-01-27 13:56 ` [PATCH -mm 6/6] m68knommu: " Akinobu Mita 2011-01-28 0:36 ` Greg Ungerer 2011-01-28 0:36 ` Greg Ungerer
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=1296136583-13815-3-git-send-email-akinobu.mita@gmail.com \ --to=akinobu.mita@gmail.com \ --cc=akpm@linux-foundation.org \ --cc=benh@kernel.crashing.org \ --cc=linux-arch@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linuxppc-dev@lists.ozlabs.org \ --cc=paulus@samba.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.