• Michael Neuling's avatar
    powerpc: Avoid link stack corruption for MMU on exceptions · bc2e6c6a
    Michael Neuling authored
    When we have MMU on exceptions (POWER8) and a relocatable kernel, we
    need to branch from the initial exception vectors at 0x0 to up high
    where the kernel might be located.  Currently we do this using the link
    register.
    
    Unfortunately this corrupts the link stack and instead we should use the
    count register.  We did this for the syscall entry path in:
      6a404806 powerpc: Avoid link stack corruption in MMU on syscall entry path
    but I stupidly forgot to do the same for other exceptions.
    
    This patch changes the initial exception vectors to use the count
    register instead of the link register when we need to branch up to the
    relocated kernel.
    
    I have a dodgy userspace test which loops calling a function that reads
    the PVR (mfpvr in userspace will be emulated by the kernel via the
    program check exception).  On POWER8 and with CONFIG_RELOCATABLE=y, I
    get a ~10% performance improvement with my userspace test with this
    patch.
    Signed-off-by: default avatarMichael Neuling <mikey@neuling.org>
    Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
    bc2e6c6a
exception-64s.h 17.5 KB