diff options
author | Paul Mackerras <paulus@samba.org> | 2011-05-01 19:46:44 (GMT) |
---|---|---|
committer | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2011-05-04 05:19:27 (GMT) |
commit | 1977b502120d44b9b4897703adfb2e2fab346880 (patch) | |
tree | dfe0e5cc29b409e7638b5e33528b7c4bc003f5e7 /arch/powerpc/kernel/traps.c | |
parent | 851d2e2fe8dbcbe3afcad6fc4569c881d8ad4ce9 (diff) | |
download | linux-fsl-qoriq-1977b502120d44b9b4897703adfb2e2fab346880.tar.xz |
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/kernel/traps.c')
0 files changed, 0 insertions, 0 deletions