• Oliver O'Halloran's avatar
    powerpc/process: Fix altivec SPR not being saved · 01d7c2a2
    Oliver O'Halloran authored
    In save_sprs() in process.c contains the following test:
    
    	if (cpu_has_feature(cpu_has_feature(CPU_FTR_ALTIVEC)))
    		t->vrsave = mfspr(SPRN_VRSAVE);
    
    CPU feature with the mask 0x1 is CPU_FTR_COHERENT_ICACHE so the test
    is equivilent to:
    
    	if (cpu_has_feature(CPU_FTR_ALTIVEC) &&
    		cpu_has_feature(CPU_FTR_COHERENT_ICACHE))
    
    On CPUs without support for both (i.e G5) this results in vrsave not
    being saved between context switches. The vector register save/restore
    code doesn't use VRSAVE to determine which registers to save/restore,
    but the value of VRSAVE is used to determine if altivec is being used
    in several code paths.
    
    Fixes: 152d523e ("powerpc: Create context switch helpers save_sprs() and restore_sprs()")
    Cc: stable@vger.kernel.org
    Signed-off-by: default avatarOliver O'Halloran <oohall@gmail.com>
    Signed-off-by: default avatarAnton Blanchard <anton@samba.org>
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    01d7c2a2
process.c 47.7 KB