s390/ipl: correct kdump reipl block checksum calculation
authorVasily Gorbik <gor@linux.ibm.com>
Wed, 4 Apr 2018 12:42:41 +0000 (14:42 +0200)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Tue, 10 Apr 2018 05:39:00 +0000 (07:39 +0200)
commit3b9678472bab86ae654cf2c18d5dd551558045be
treea952f6901e8b0bec9f84e60099c502b4e13cf78f
parent0649685073422af82ab8e7d9119b9991403851a6
s390/ipl: correct kdump reipl block checksum calculation

s390 kdump reipl implementation relies on os_info kernel structure
residing in old memory being dumped. os_info contains reipl block,
which is used (if valid) by the kdump kernel for reipl parameters.

The problem is that the reipl block and its checksum inside
os_info is updated only when /sys/firmware/reipl/reipl_type is
written. This sets an offset of a reipl block for "reipl_type" and
re-calculates reipl block checksum. Any further alteration of values
under /sys/firmware/reipl/{reipl_type}/ without subsequent write to
/sys/firmware/reipl/reipl_type lead to incorrect os_info reipl block
checksum. In such a case kdump kernel ignores it and reboots using
default logic.

To fix this, os_info reipl block update is moved right before kdump
execution.

Reviewed-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
arch/s390/include/asm/ipl.h
arch/s390/kernel/ipl.c
arch/s390/kernel/machine_kexec.c