s390/flags: fix flag handling
authorHeiko Carstens <heiko.carstens@de.ibm.com>
Tue, 6 Oct 2015 14:23:29 +0000 (16:23 +0200)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Wed, 14 Oct 2015 12:32:14 +0000 (14:32 +0200)
The cpu flags and pt_regs flags fields are each 64 bits in size. A flag can
be set with helper functions like set_cpu_flags().

These functions create a mask using "1U << flag". This doesn't work if flag
is larger than 31, since 1U << 32 == 0.

So fix this in case we ever will have such flag numbers.

Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Reviewed-by: Hendrik Brueckner <brueckner@linux.vnet.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
arch/s390/include/asm/processor.h
arch/s390/include/asm/ptrace.h

index 9e1cdcf8d12418cd0b396b59b0df6934edaac03a..eefe543f84c9264d69dfd40474833f4c38a12fcd 100644 (file)
 
 static inline void set_cpu_flag(int flag)
 {
-       S390_lowcore.cpu_flags |= (1U << flag);
+       S390_lowcore.cpu_flags |= (1UL << flag);
 }
 
 static inline void clear_cpu_flag(int flag)
 {
-       S390_lowcore.cpu_flags &= ~(1U << flag);
+       S390_lowcore.cpu_flags &= ~(1UL << flag);
 }
 
 static inline int test_cpu_flag(int flag)
 {
-       return !!(S390_lowcore.cpu_flags & (1U << flag));
+       return !!(S390_lowcore.cpu_flags & (1UL << flag));
 }
 
 #define arch_needs_cpu() test_cpu_flag(CIF_NOHZ_DELAY)
index 6feda25992823de0d8d9b5fb1218191d4a502f62..b60f840f601d4f61d34f51d3a7cbec68453aab00 100644 (file)
@@ -128,17 +128,17 @@ struct per_struct_kernel {
 
 static inline void set_pt_regs_flag(struct pt_regs *regs, int flag)
 {
-       regs->flags |= (1U << flag);
+       regs->flags |= (1UL << flag);
 }
 
 static inline void clear_pt_regs_flag(struct pt_regs *regs, int flag)
 {
-       regs->flags &= ~(1U << flag);
+       regs->flags &= ~(1UL << flag);
 }
 
 static inline int test_pt_regs_flag(struct pt_regs *regs, int flag)
 {
-       return !!(regs->flags & (1U << flag));
+       return !!(regs->flags & (1UL << flag));
 }
 
 /*