]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
riscv: errata: Fix bitwise vs logical AND in MIPS errata patching
authorMichael Neuling <mikey@neuling.org>
Thu, 9 Apr 2026 09:11:39 +0000 (09:11 +0000)
committerPaul Walmsley <pjw@kernel.org>
Fri, 1 May 2026 02:00:14 +0000 (20:00 -0600)
The condition checking whether a specific errata needs patching uses
logical AND (&&) instead of bitwise AND (&). Since logical AND only
checks that both operands are non-zero, this causes all errata patches
to be applied whenever any single errata is detected, rather than only
applying the matching one.

The SiFive errata implementation correctly uses bitwise AND for the same
check.

Fixes: 0b0ca959d206 ("riscv: errata: Fix the PAUSE Opcode for MIPS P8700")
Signed-off-by: Michael Neuling <mikey@neuling.org>
Assisted-by: Cursor:claude-4.6-opus-high-thinking
Link: https://patch.msgid.link/20260409091143.1348853-2-mikey@neuling.org
[pjw@kernel.org: fixed checkpatch warning]
Signed-off-by: Paul Walmsley <pjw@kernel.org>
arch/riscv/errata/mips/errata.c

index e984a8152208c34690f89d8101571b097485c360..2c3dc2259e93e9e5181d60843e66da5625bda56f 100644 (file)
@@ -57,7 +57,7 @@ void mips_errata_patch_func(struct alt_entry *begin, struct alt_entry *end,
                }
 
                tmp = (1U << alt->patch_id);
-               if (cpu_req_errata && tmp) {
+               if (cpu_req_errata & tmp) {
                        mutex_lock(&text_mutex);
                        patch_text_nosync(ALT_OLD_PTR(alt), ALT_ALT_PTR(alt),
                                          alt->alt_len);