Skip to content

Commit 3d6f4a2

Browse files
davem330torvalds
authored andcommitted
endian: Always evaluate arguments.
Changeset 7fa897b ("ide: trivial sparse annotations") created an IDE bootup regression on big-endian systems. In drivers/ide/ide-iops.c, function ide_fixstring() we now have the loop: for (p = end ; p != s;) be16_to_cpus((u16 *)(p -= 2)); which will never terminate on big-endian because in such a configuration be16_to_cpus() evaluates to "do { } while (0)" Therefore, always evaluate the arguments to nop endian transformation operations. Signed-off-by: David S. Miller <davem@davemloft.net> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
1 parent 43de804 commit 3d6f4a2

File tree

2 files changed

+12
-12
lines changed

2 files changed

+12
-12
lines changed

include/linux/byteorder/big_endian.h

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -94,12 +94,12 @@ static inline __u16 __be16_to_cpup(const __be16 *p)
9494
#define __le32_to_cpus(x) __swab32s((x))
9595
#define __cpu_to_le16s(x) __swab16s((x))
9696
#define __le16_to_cpus(x) __swab16s((x))
97-
#define __cpu_to_be64s(x) do {} while (0)
98-
#define __be64_to_cpus(x) do {} while (0)
99-
#define __cpu_to_be32s(x) do {} while (0)
100-
#define __be32_to_cpus(x) do {} while (0)
101-
#define __cpu_to_be16s(x) do {} while (0)
102-
#define __be16_to_cpus(x) do {} while (0)
97+
#define __cpu_to_be64s(x) do { (void)(x); } while (0)
98+
#define __be64_to_cpus(x) do { (void)(x); } while (0)
99+
#define __cpu_to_be32s(x) do { (void)(x); } while (0)
100+
#define __be32_to_cpus(x) do { (void)(x); } while (0)
101+
#define __cpu_to_be16s(x) do { (void)(x); } while (0)
102+
#define __be16_to_cpus(x) do { (void)(x); } while (0)
103103

104104
#ifdef __KERNEL__
105105
#include <linux/byteorder/generic.h>

include/linux/byteorder/little_endian.h

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -88,12 +88,12 @@ static inline __u16 __be16_to_cpup(const __be16 *p)
8888
{
8989
return __swab16p((__u16 *)p);
9090
}
91-
#define __cpu_to_le64s(x) do {} while (0)
92-
#define __le64_to_cpus(x) do {} while (0)
93-
#define __cpu_to_le32s(x) do {} while (0)
94-
#define __le32_to_cpus(x) do {} while (0)
95-
#define __cpu_to_le16s(x) do {} while (0)
96-
#define __le16_to_cpus(x) do {} while (0)
91+
#define __cpu_to_le64s(x) do { (void)(x); } while (0)
92+
#define __le64_to_cpus(x) do { (void)(x); } while (0)
93+
#define __cpu_to_le32s(x) do { (void)(x); } while (0)
94+
#define __le32_to_cpus(x) do { (void)(x); } while (0)
95+
#define __cpu_to_le16s(x) do { (void)(x); } while (0)
96+
#define __le16_to_cpus(x) do { (void)(x); } while (0)
9797
#define __cpu_to_be64s(x) __swab64s((x))
9898
#define __be64_to_cpus(x) __swab64s((x))
9999
#define __cpu_to_be32s(x) __swab32s((x))

0 commit comments

Comments
 (0)