Skip to contentSkip to conversation

Fix MMC warnings

PATCH In review Pierre Ossman 2 participants 3 messages Jan 2, 2005 MMC, SD and SDIO

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 Fix MMC warnings

Here's a patch that fixes the compiler warnings in mmc.c.

drivers/mmc/mmc.c +2 -2
Index: linux-wbsd/drivers/mmc/mmc.c
===================================================================
@@ -428,14 +428,14 @@
 
 #define UNSTUFF_BITS(resp,start,size)					\
 	({								\
-		const u32 __mask = (1 << (size)) - 1;			\
+		const u32 __mask = ((size >= 32)?0:(1 << (size))) - 1;	\
 		const int __off = 3 - ((start) / 32);			\
 		const int __shft = (start) & 31;			\
 		u32 __res;						\
 									\
 		__res = resp[__off] >> __shft;				\
 		if ((size) + __shft >= 32)				\
-			__res |= resp[__off-1] << (32 - __shft);	\
+			__res |= resp[__off-1] << ((32 - __shft) % 32);	\
 		__res & __mask;						\
 	})
 
#1 lore raw
Quoted 1 line · Pierre Ossman

Here's a patch that fixes the compiler warnings in mmc.c.

I'd rather the compiler was fixed so that it does proper analysis of the code, rather than blatently issuing warnings for code which is unreachable.

Signature · 4 lines
Russell King
 Linux kernel    2.6 ARM Linux   - http://www.arm.linux.org.uk/
 maintainer of:  2.6 PCMCIA      - http://pcmcia.arm.linux.org.uk/
                 2.6 Serial core
#2 lore raw
Quoted 6 lines · Russell King
Quoted 1 line · Pierre Ossman

Here's a patch that fixes the compiler warnings in mmc.c.

I'd rather the compiler was fixed so that it does proper analysis of the code, rather than blatently issuing warnings for code which is unreachable.

Actually, you're quite correct about the first instance - 'mask' may be generated from 1 << 32 - 1, which is definitely reachable, and gcc will warn about. There's also another bug - an out by one on whether to use the second word to construct the value.

However, the other 5 warnings are due to (corrected version):

	if (16 + 0 > 32)
		__res |= resp[__off-1] << (32 - 0);

Obviously, this code is not reachable since the if condition is false. Therefore, gcc's whinging about the shift being >= 32 is wrong.

That said, the fix doesn't change gcc's code generation, so I think I'll apply the changes. Thanks.

Signature · 4 lines
Russell King
 Linux kernel    2.6 ARM Linux   - http://www.arm.linux.org.uk/
 maintainer of:  2.6 PCMCIA      - http://pcmcia.arm.linux.org.uk/
                 2.6 Serial core