case FETCH_OP_TP_ARG:
                                val = get_event_field(code, rec);
                                break;
-                       case FETCH_OP_IMM:
-                               val = code->immediate;
-                               break;
-                       case FETCH_OP_COMM:
-                               val = (unsigned long)current->comm;
-                               break;
-                       case FETCH_OP_DATA:
-                               val = (unsigned long)code->data;
-                               break;
                        case FETCH_NOP_SYMBOL:  /* Ignore a place holder */
                                code++;
                                goto retry;
                        default:
-                               continue;
+                               if (process_common_fetch_insn(code, &val) < 0)
+                                       continue;
                        }
                        code++;
                        len = process_fetch_insn_bottom(code, val, NULL, NULL);
                   void *base)
 {
        unsigned long val;
+       int ret;
 
  retry:
        switch (code->op) {
        case FETCH_OP_TP_ARG:
                val = get_event_field(code, rec);
                break;
-       case FETCH_OP_IMM:
-               val = code->immediate;
-               break;
-       case FETCH_OP_COMM:
-               val = (unsigned long)current->comm;
-               break;
-       case FETCH_OP_DATA:
-               val = (unsigned long)code->data;
-               break;
        case FETCH_NOP_SYMBOL:  /* Ignore a place holder */
                code++;
                goto retry;
        default:
-               return -EILSEQ;
+               ret = process_common_fetch_insn(code, &val);
+               if (ret < 0)
+                       return ret;
        }
        code++;
        return process_fetch_insn_bottom(code, val, dest, base);
 
 {
        struct pt_regs *regs = rec;
        unsigned long val;
+       int ret;
 
 retry:
        /* 1st stage: get value from context */
        case FETCH_OP_RETVAL:
                val = regs_return_value(regs);
                break;
-       case FETCH_OP_IMM:
-               val = code->immediate;
-               break;
-       case FETCH_OP_COMM:
-               val = (unsigned long)current->comm;
-               break;
-       case FETCH_OP_DATA:
-               val = (unsigned long)code->data;
-               break;
 #ifdef CONFIG_HAVE_FUNCTION_ARG_ACCESS_API
        case FETCH_OP_ARG:
                val = regs_get_kernel_argument(regs, code->param);
                code++;
                goto retry;
        default:
-               return -EILSEQ;
+               ret = process_common_fetch_insn(code, &val);
+               if (ret < 0)
+                       return ret;
        }
        code++;
 
 
        return sprint_symbol(__dest, addr);
 }
 
+/* common part of process_fetch_insn*/
+static nokprobe_inline int
+process_common_fetch_insn(struct fetch_insn *code, unsigned long *val)
+{
+       switch (code->op) {
+       case FETCH_OP_IMM:
+               *val = code->immediate;
+               break;
+       case FETCH_OP_COMM:
+               *val = (unsigned long)current->comm;
+               break;
+       case FETCH_OP_DATA:
+               *val = (unsigned long)code->data;
+               break;
+       default:
+               return -EILSEQ;
+       }
+       return 0;
+}
+
 /* From the 2nd stage, routine is same */
 static nokprobe_inline int
 process_fetch_insn_bottom(struct fetch_insn *code, unsigned long val,
 
 {
        struct pt_regs *regs = rec;
        unsigned long val;
+       int ret;
 
        /* 1st stage: get value from context */
        switch (code->op) {
        case FETCH_OP_RETVAL:
                val = regs_return_value(regs);
                break;
-       case FETCH_OP_IMM:
-               val = code->immediate;
-               break;
        case FETCH_OP_COMM:
                val = FETCH_TOKEN_COMM;
                break;
-       case FETCH_OP_DATA:
-               val = (unsigned long)code->data;
-               break;
        case FETCH_OP_FOFFS:
                val = translate_user_vaddr(code->immediate);
                break;
        default:
-               return -EILSEQ;
+               ret = process_common_fetch_insn(code, &val);
+               if (ret < 0)
+                       return ret;
        }
        code++;