powerpc: Fix asm offsets to point to actual FP and VMX regs
authorMichael Neuling <mikey@neuling.org>
Mon, 8 May 2017 06:23:31 +0000 (16:23 +1000)
committerMichael Ellerman <mpe@ellerman.id.au>
Tue, 27 Jun 2017 02:09:08 +0000 (12:09 +1000)
The asm code assumes the FP regs are at the start of fp_state. While
this is true now, it may not always be the case and there is nothing
enforcing it.

This fixes the asm-offsets to point to the actual FP registers inside
the fp_state.  Similarly for VMX.

Signed-off-by: Michael Neuling <mikey@neuling.org>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
arch/powerpc/kernel/asm-offsets.c

index 9624851ca2768cc22f0d75456fa325bad5dd9ad6..a7b5af32b89e54b7193fed03c6fbcb728624a712 100644 (file)
@@ -100,12 +100,12 @@ int main(void)
        OFFSET(THREAD_NORMSAVES, thread_struct, normsave[0]);
 #endif
        OFFSET(THREAD_FPEXC_MODE, thread_struct, fpexc_mode);
-       OFFSET(THREAD_FPSTATE, thread_struct, fp_state);
+       OFFSET(THREAD_FPSTATE, thread_struct, fp_state.fpr);
        OFFSET(THREAD_FPSAVEAREA, thread_struct, fp_save_area);
        OFFSET(FPSTATE_FPSCR, thread_fp_state, fpscr);
        OFFSET(THREAD_LOAD_FP, thread_struct, load_fp);
 #ifdef CONFIG_ALTIVEC
-       OFFSET(THREAD_VRSTATE, thread_struct, vr_state);
+       OFFSET(THREAD_VRSTATE, thread_struct, vr_state.vr);
        OFFSET(THREAD_VRSAVEAREA, thread_struct, vr_save_area);
        OFFSET(THREAD_VRSAVE, thread_struct, vrsave);
        OFFSET(THREAD_USED_VR, thread_struct, used_vr);
@@ -145,9 +145,9 @@ int main(void)
        OFFSET(THREAD_TM_PPR, thread_struct, tm_ppr);
        OFFSET(THREAD_TM_DSCR, thread_struct, tm_dscr);
        OFFSET(PT_CKPT_REGS, thread_struct, ckpt_regs);
-       OFFSET(THREAD_CKVRSTATE, thread_struct, ckvr_state);
+       OFFSET(THREAD_CKVRSTATE, thread_struct, ckvr_state.vr);
        OFFSET(THREAD_CKVRSAVE, thread_struct, ckvrsave);
-       OFFSET(THREAD_CKFPSTATE, thread_struct, ckfp_state);
+       OFFSET(THREAD_CKFPSTATE, thread_struct, ckfp_state.fpr);
        /* Local pt_regs on stack for Transactional Memory funcs. */
        DEFINE(TM_FRAME_SIZE, STACK_FRAME_OVERHEAD +
               sizeof(struct pt_regs) + 16);