diff options
author | Michael Holzheu <holzheu@linux.vnet.ibm.com> | 2011-05-10 17:13:39 +0200 |
---|---|---|
committer | Martin Schwidefsky <sky@mschwide.boeblingen.de.ibm.com> | 2011-05-10 17:13:42 +0200 |
commit | 8eb4bd666ffdca7171cd8118138a91842012b028 (patch) | |
tree | c362b8e8ea64731854a2e894777252f315eca1dc /arch/s390/kernel/dis.c | |
parent | [S390] dasd: prevent IO error during reserve/release loop (diff) | |
download | linux-8eb4bd666ffdca7171cd8118138a91842012b028.tar.xz linux-8eb4bd666ffdca7171cd8118138a91842012b028.zip |
[S390] kernel: Initialize register 14 when starting new CPU
When starting a new CPU we currently jump to start_secondary() without
setting register 14 (the return address) correctly. Therefore on the stack
frame for start_secondary an invalid return address is stored. This leads
to wrong stack back traces in kernel dumps.
Example:
#00 [1f33fe48] cpu_idle at 10614a
#01 [1f33fe90] start_secondary at 54fa88
#02 [1f33feb8] (null) at 0 <--- invalid
To fix this start_secondary() is called now with basr/brasl that sets
register 14 correctly. The output of the stack backtrace looks then
like the following:
#00 [1f33fe48] cpu_idle at 10614a
#01 [1f33fe90] start_secondary at 54fa88
#02 [1f33feb8] restart_base at 54f41e <--- correct
Signed-off-by: Michael Holzheu <holzheu@linux.vnet.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Diffstat (limited to 'arch/s390/kernel/dis.c')
0 files changed, 0 insertions, 0 deletions