s390/boot: fix absolute zero lowcore corruption on boot
Crash dump always starts on CPU0. In case CPU0 is offline the
prefix page is not installed and the absolute zero lowcore is
used. However, struct lowcore::mcesad is never assigned and
stays zero. That leads to __machine_kdump() -> save_vx_regs()
call silently stores vector registers to the absolute lowcore
at 0x11b0 offset.
Fixes: a62bc07392
("s390/kdump: add support for vector extension")
Reviewed-by: Heiko Carstens <hca@linux.ibm.com>
Signed-off-by: Alexander Gordeev <agordeev@linux.ibm.com>
Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
This commit is contained in:
parent
7c8d42fdf1
commit
12dd19c159
|
@ -64,7 +64,7 @@ static inline unsigned long nmi_get_mcesa_size(void)
|
||||||
* structure. The structure is required for machine check happening
|
* structure. The structure is required for machine check happening
|
||||||
* early in the boot process.
|
* early in the boot process.
|
||||||
*/
|
*/
|
||||||
static struct mcesa boot_mcesa __initdata __aligned(MCESA_MAX_SIZE);
|
static struct mcesa boot_mcesa __aligned(MCESA_MAX_SIZE);
|
||||||
|
|
||||||
void __init nmi_alloc_mcesa_early(u64 *mcesad)
|
void __init nmi_alloc_mcesa_early(u64 *mcesad)
|
||||||
{
|
{
|
||||||
|
|
|
@ -479,6 +479,7 @@ static void __init setup_lowcore_dat_off(void)
|
||||||
put_abs_lowcore(restart_data, lc->restart_data);
|
put_abs_lowcore(restart_data, lc->restart_data);
|
||||||
put_abs_lowcore(restart_source, lc->restart_source);
|
put_abs_lowcore(restart_source, lc->restart_source);
|
||||||
put_abs_lowcore(restart_psw, lc->restart_psw);
|
put_abs_lowcore(restart_psw, lc->restart_psw);
|
||||||
|
put_abs_lowcore(mcesad, lc->mcesad);
|
||||||
|
|
||||||
mcck_stack = (unsigned long)memblock_alloc(THREAD_SIZE, THREAD_SIZE);
|
mcck_stack = (unsigned long)memblock_alloc(THREAD_SIZE, THREAD_SIZE);
|
||||||
if (!mcck_stack)
|
if (!mcck_stack)
|
||||||
|
|
Loading…
Reference in New Issue