]> www.infradead.org Git - users/hch/misc.git/commitdiff
riscv: kprobes: Remove duplication of RVC_EXTRACT_JTYPE_IMM
authorNam Cao <namcao@linutronix.de>
Sun, 11 May 2025 21:17:58 +0000 (23:17 +0200)
committerPaul Walmsley <pjw@kernel.org>
Wed, 17 Sep 2025 00:46:44 +0000 (18:46 -0600)
Use RVC_EXTRACT_JTYPE_IMM, instead of reimplementing it in simulate_c_j().

Signed-off-by: Nam Cao <namcao@linutronix.de>
Reviewed-by: Alexandre Ghiti <alexghiti@rivosinc.com>
Link: https://lore.kernel.org/linux-riscv/24497deaab06d6b12cb84923606ec26f67e25424.1747215274.git.namcao@linutronix.de/
[pjw@kernel.org: fixed subject line typo]
Signed-off-by: Paul Walmsley <pjw@kernel.org>
arch/riscv/kernel/probes/simulate-insn.c

index 3ba97e79a2a3be22c999e68b506fccd736698e10..5defbde4dd50da7ffc336e9f89f687de018504d1 100644 (file)
@@ -170,24 +170,9 @@ bool __kprobes simulate_branch(u32 opcode, unsigned long addr, struct pt_regs *r
 
 bool __kprobes simulate_c_j(u32 opcode, unsigned long addr, struct pt_regs *regs)
 {
-       /*
-        *  15    13 12                            2 1      0
-        * | funct3 | offset[11|4|9:8|10|6|7|3:1|5] | opcode |
-        *     3                   11                    2
-        */
-
-       s32 offset;
-
-       offset  = ((opcode >> 3)  & 0x7) << 1;
-       offset |= ((opcode >> 11) & 0x1) << 4;
-       offset |= ((opcode >> 2)  & 0x1) << 5;
-       offset |= ((opcode >> 7)  & 0x1) << 6;
-       offset |= ((opcode >> 6)  & 0x1) << 7;
-       offset |= ((opcode >> 9)  & 0x3) << 8;
-       offset |= ((opcode >> 8)  & 0x1) << 10;
-       offset |= ((opcode >> 12) & 0x1) << 11;
+       s32 offset = RVC_EXTRACT_JTYPE_IMM(opcode);
 
-       instruction_pointer_set(regs, addr + sign_extend32(offset, 11));
+       instruction_pointer_set(regs, addr + offset);
 
        return true;
 }