OSDN Git Service

Merge 4.4.163 into android-4.4
[sagit-ice-cold/kernel_xiaomi_msm8998.git] / arch / mips / kernel / process.c
index dd92540..33984e1 100644 (file)
@@ -211,7 +211,7 @@ static inline int is_ra_save_ins(union mips_instruction *ip, int *poff)
                        if (ip->mm16_r5_format.rt != 31)
                                return 0;
 
-                       *poff = ip->mm16_r5_format.simmediate;
+                       *poff = ip->mm16_r5_format.imm;
                        *poff = (*poff << 2) / sizeof(ulong);
                        return 1;
 
@@ -345,6 +345,7 @@ static int get_frame_info(struct mips_frame_info *info)
        bool is_mmips = IS_ENABLED(CONFIG_CPU_MICROMIPS);
        union mips_instruction insn, *ip, *ip_end;
        const unsigned int max_insns = 128;
+       unsigned int last_insn_size = 0;
        unsigned int i;
 
        info->pc_offset = -1;
@@ -356,15 +357,19 @@ static int get_frame_info(struct mips_frame_info *info)
 
        ip_end = (void *)ip + info->func_size;
 
-       for (i = 0; i < max_insns && ip < ip_end; i++, ip++) {
+       for (i = 0; i < max_insns && ip < ip_end; i++) {
+               ip = (void *)ip + last_insn_size;
                if (is_mmips && mm_insn_16bit(ip->halfword[0])) {
                        insn.halfword[0] = 0;
                        insn.halfword[1] = ip->halfword[0];
+                       last_insn_size = 2;
                } else if (is_mmips) {
                        insn.halfword[0] = ip->halfword[1];
                        insn.halfword[1] = ip->halfword[0];
+                       last_insn_size = 4;
                } else {
                        insn.word = ip->word;
+                       last_insn_size = 4;
                }
 
                if (is_jump_ins(&insn))
@@ -386,8 +391,6 @@ static int get_frame_info(struct mips_frame_info *info)
                                                tmp = (ip->halfword[0] >> 1);
                                                info->frame_size = -(signed short)(tmp & 0xf);
                                        }
-                                       ip = (void *) &ip->halfword[1];
-                                       ip--;
                                } else
 #endif
                                info->frame_size = - ip->i_format.simmediate;