aboutsummaryrefslogtreecommitdiff
path: root/arch/powerpc/oprofile
diff options
context:
space:
mode:
authorPaul Mackerras <paulus@samba.org>2011-05-01 19:46:44 +0000
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>2011-05-04 15:19:27 +1000
commit1977b502120d44b9b4897703adfb2e2fab346880 (patch)
treedfe0e5cc29b409e7638b5e33528b7c4bc003f5e7 /arch/powerpc/oprofile
parent851d2e2fe8dbcbe3afcad6fc4569c881d8ad4ce9 (diff)
downloadlinaro-lsk-1977b502120d44b9b4897703adfb2e2fab346880.tar.gz
powerpc: Save register r9-r13 values accurately on interrupt with bad stack
When we take an interrupt or exception from kernel mode and the stack pointer is obviously not a kernel address (i.e. the top bit is 0), we switch to an emergency stack, save register values and panic. However, on 64-bit server machines, we don't actually save the values of r9 - r13 at the time of the interrupt, but rather values corrupted by the exception entry code for r12-r13, and nothing at all for r9-r11. This fixes it by passing a pointer to the register save area in the paca through to the bad_stack code in r3. The register values are saved in one of the paca register save areas (depending on which exception this is). Using the pointer in r3, the bad_stack code now retrieves the saved values of r9 - r13 and stores them in the exception frame on the emergency stack. This also stores the normal exception frame marker ("regshere") in the exception frame. Signed-off-by: Paul Mackerras <paulus@samba.org> Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Diffstat (limited to 'arch/powerpc/oprofile')
0 files changed, 0 insertions, 0 deletions