Fix MMC warnings
PATCH 1/1 Fix MMC warnings
Here's a patch that fixes the compiler warnings in mmc.c.
drivers/mmc/mmc.c +2 -2
@@ -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; \ })
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 coreQuoted 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