Skip to content

Commit 12f4a66

Browse files
geertupalmer-dabbelt
authored andcommitted
RISC-V: Fix hartid mask handling for hartid 31 and up
Jessica reports that using "1 << hartid" causes undefined behavior for hartid 31 and up. Fix this by using the BIT() helper instead of an explicit shift. Reported-by: Jessica Clarke <jrtc27@jrtc27.com> Fixes: 26fb751 ("RISC-V: Do not use cpumask data structure for hartid bitmap") Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org> Reviewed-by: Atish Patra <atishp@rivosinc.com> Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com>
1 parent 6df2a01 commit 12f4a66

1 file changed

Lines changed: 4 additions & 3 deletions

File tree

arch/riscv/kernel/sbi.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
* Copyright (c) 2020 Western Digital Corporation or its affiliates.
66
*/
77

8+
#include <linux/bits.h>
89
#include <linux/init.h>
910
#include <linux/pm.h>
1011
#include <linux/reboot.h>
@@ -85,7 +86,7 @@ static unsigned long __sbi_v01_cpumask_to_hartmask(const struct cpumask *cpu_mas
8586
pr_warn("Unable to send any request to hartid > BITS_PER_LONG for SBI v0.1\n");
8687
break;
8788
}
88-
hmask |= 1 << hartid;
89+
hmask |= BIT(hartid);
8990
}
9091

9192
return hmask;
@@ -268,7 +269,7 @@ static int __sbi_send_ipi_v02(const struct cpumask *cpu_mask)
268269
}
269270
if (!hmask)
270271
hbase = hartid;
271-
hmask |= 1UL << (hartid - hbase);
272+
hmask |= BIT(hartid - hbase);
272273
}
273274

274275
if (hmask) {
@@ -362,7 +363,7 @@ static int __sbi_rfence_v02(int fid, const struct cpumask *cpu_mask,
362363
}
363364
if (!hmask)
364365
hbase = hartid;
365-
hmask |= 1UL << (hartid - hbase);
366+
hmask |= BIT(hartid - hbase);
366367
}
367368

368369
if (hmask) {

0 commit comments

Comments
 (0)