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

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

index d5f74fadbc3a04c0fb64af82c6fda9ba12159be3..b76a691d0d9aafc739541585341b3606d4d551af 100644 (file)
@@ -41,19 +41,16 @@ bool __kprobes simulate_jal(u32 opcode, unsigned long addr, struct pt_regs *regs
         *     1         10          1           8       5    JAL/J
         */
        bool ret;
-       u32 imm;
+       s32 imm;
        u32 index = (opcode >> 7) & 0x1f;
 
        ret = rv_insn_reg_set_val(regs, index, addr + 4);
        if (!ret)
                return ret;
 
-       imm  = ((opcode >> 21) & 0x3ff) << 1;
-       imm |= ((opcode >> 20) & 0x1)   << 11;
-       imm |= ((opcode >> 12) & 0xff)  << 12;
-       imm |= ((opcode >> 31) & 0x1)   << 20;
+       imm = RV_EXTRACT_JTYPE_IMM(opcode);
 
-       instruction_pointer_set(regs, addr + sign_extend32((imm), 20));
+       instruction_pointer_set(regs, addr + imm);
 
        return ret;
 }