| Message ID | - |
|---|---|
| State | Accepted |
| Delegated to: | Ralf Baechle |
| Headers | show |
On 08/22/2016 03:07 PM, Aaro Koskinen wrote: > Commit 1685ddbe35cd ("MIPS: Octeon: Changes to support readq()/writeq() > usage.") added bitwise shift operations that assume that unsigned long > is always 64-bits. This broke the build of VDSO code, as it gets compiled > also in "faked" 32-bit mode. Althought the failing inline functions are > never executed in 32-bit mode, they still need to pass the compilation. > Fix by using 64-bit types explicitly. > > The patch fixes the following build failure: > > CC arch/mips/vdso/gettimeofday-o32.o > In file included from los/git/devel/linux/arch/mips/include/asm/io.h:32:0, > from los/git/devel/linux/arch/mips/include/asm/page.h:194, > from los/git/devel/linux/arch/mips/vdso/vdso.h:26, > from los/git/devel/linux/arch/mips/vdso/gettimeofday.c:11: > los/git/devel/linux/arch/mips/include/asm/mach-cavium-octeon/mangle-port.h: In function '__should_swizzle_bits': > los/git/devel/linux/arch/mips/include/asm/mach-cavium-octeon/mangle-port.h:19:40: error: right shift count >= width of type [-Werror=shift-count-overflow] > unsigned long did = ((unsigned long)a >> 40) & 0xff; > ^~ > > Fixes: 1685ddbe35cd ("MIPS: Octeon: Changes to support readq()/writeq() usage.") > Signed-off-by: Aaro Koskinen <> This looks like it should work. Steven, can you test this patch for us to get independent confirmation that it works? If testing shows that it is good, please add Acked-by: David Daney <> > --- > arch/mips/include/asm/mach-cavium-octeon/mangle-port.h | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/arch/mips/include/asm/mach-cavium-octeon/mangle-port.h b/arch/mips/include/asm/mach-cavium-octeon/mangle-port.h > index 0cf5ac1..8ff2cbd 100644 > --- a/arch/mips/include/asm/mach-cavium-octeon/mangle-port.h > +++ b/arch/mips/include/asm/mach-cavium-octeon/mangle-port.h > @@ -15,8 +15,8 @@ > static inline bool __should_swizzle_bits(volatile void *a) > { > extern const bool octeon_should_swizzle_table[]; > + u64 did = ((u64)(uintptr_t)a >> 40) & 0xff; > > - unsigned long did = ((unsigned long)a >> 40) & 0xff; > return octeon_should_swizzle_table[did]; > } > > @@ -29,7 +29,7 @@ static inline bool __should_swizzle_bits(volatile void *a) > > #define __should_swizzle_bits(a) false > > -static inline bool __should_swizzle_addr(unsigned long p) > +static inline bool __should_swizzle_addr(u64 p) > { > /* boot bus? */ > return ((p >> 40) & 0xff) == 0; >
On 08/22/2016 05:55 PM, David Daney wrote: > > This looks like it should work. > > Steven, can you test this patch for us to get independent confirmation > that it works? > > If testing shows that it is good, please add Acked-by: David Daney > <> > Hey Aaro. Patch tests out good. Go ahead add David's ack. Thanks. Steve
diff --git a/arch/mips/include/asm/mach-cavium-octeon/mangle-port.h b/arch/mips/include/asm/mach-cavium-octeon/mangle-port.h index 0cf5ac1..8ff2cbd 100644 --- a/arch/mips/include/asm/mach-cavium-octeon/mangle-port.h +++ b/arch/mips/include/asm/mach-cavium-octeon/mangle-port.h @@ -15,8 +15,8 @@ static inline bool __should_swizzle_bits(volatile void *a) { extern const bool octeon_should_swizzle_table[]; + u64 did = ((u64)(uintptr_t)a >> 40) & 0xff; - unsigned long did = ((unsigned long)a >> 40) & 0xff; return octeon_should_swizzle_table[did]; } @@ -29,7 +29,7 @@ static inline bool __should_swizzle_bits(volatile void *a) #define __should_swizzle_bits(a) false -static inline bool __should_swizzle_addr(unsigned long p) +static inline bool __should_swizzle_addr(u64 p) { /* boot bus? */ return ((p >> 40) & 0xff) == 0;
Commit 1685ddbe35cd ("MIPS: Octeon: Changes to support readq()/writeq() usage.") added bitwise shift operations that assume that unsigned long is always 64-bits. This broke the build of VDSO code, as it gets compiled also in "faked" 32-bit mode. Althought the failing inline functions are never executed in 32-bit mode, they still need to pass the compilation. Fix by using 64-bit types explicitly. The patch fixes the following build failure: CC arch/mips/vdso/gettimeofday-o32.o In file included from los/git/devel/linux/arch/mips/include/asm/io.h:32:0, from los/git/devel/linux/arch/mips/include/asm/page.h:194, from los/git/devel/linux/arch/mips/vdso/vdso.h:26, from los/git/devel/linux/arch/mips/vdso/gettimeofday.c:11: los/git/devel/linux/arch/mips/include/asm/mach-cavium-octeon/mangle-port.h: In function '__should_swizzle_bits': los/git/devel/linux/arch/mips/include/asm/mach-cavium-octeon/mangle-port.h:19:40: error: right shift count >= width of type [-Werror=shift-count-overflow] unsigned long did = ((unsigned long)a >> 40) & 0xff; ^~ Fixes: 1685ddbe35cd ("MIPS: Octeon: Changes to support readq()/writeq() usage.") Signed-off-by: Aaro Koskinen <> --- arch/mips/include/asm/mach-cavium-octeon/mangle-port.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)