return 0;
 }
 
-static int emulate_mrs(struct pt_regs *regs, u32 insn)
+int do_emulate_mrs(struct pt_regs *regs, u32 sys_reg, u32 rt)
 {
        int rc;
-       u32 sys_reg, dst;
        u64 val;
 
-       /*
-        * sys_reg values are defined as used in mrs/msr instruction.
-        * shift the imm value to get the encoding.
-        */
-       sys_reg = (u32)aarch64_insn_decode_immediate(AARCH64_INSN_IMM_16, insn) << 5;
        rc = emulate_sys_reg(sys_reg, &val);
        if (!rc) {
-               dst = aarch64_insn_decode_register(AARCH64_INSN_REGTYPE_RT, insn);
-               pt_regs_write_reg(regs, dst, val);
+               pt_regs_write_reg(regs, rt, val);
                arm64_skip_faulting_instruction(regs, AARCH64_INSN_SIZE);
        }
-
        return rc;
 }
 
+static int emulate_mrs(struct pt_regs *regs, u32 insn)
+{
+       u32 sys_reg, rt;
+
+       /*
+        * sys_reg values are defined as used in mrs/msr instruction.
+        * shift the imm value to get the encoding.
+        */
+       sys_reg = (u32)aarch64_insn_decode_immediate(AARCH64_INSN_IMM_16, insn) << 5;
+       rt = aarch64_insn_decode_register(AARCH64_INSN_REGTYPE_RT, insn);
+       return do_emulate_mrs(regs, sys_reg, rt);
+}
+
 static struct undef_hook mrs_hook = {
        .instr_mask = 0xfff00000,
        .instr_val  = 0xd5300000,