Commit 31e9ccc6 authored by Mikhail Zaslonko's avatar Mikhail Zaslonko Committed by Alexander Gordeev

s390/ipl: add REIPL_CLEAR flag to os_info

Introduce new OS_INFO_FLAGS_ENTRY to os_info pointing to the field
with bit flags.
Add OS_INFO_FLAGS_ENTRY upon dump_reipl shutdown action processing and
set OS_INFO_FLAG_REIPL_CLEAR flag indicating 'clear' sysfs attribute has
been set on the panicked system for specified ipl type. This flag can be
used to inform the dumper whether LOAD_CLEAR or LOAD_NORMAL diag308
subcode to be used for ipl after dumping the memory.
Signed-off-by: default avatarMikhail Zaslonko <zaslonko@linux.ibm.com>
Acked-by: default avatarAlexander Gordeev <agordeev@linux.ibm.com>
Reviewed-by: default avatarHeiko Carstens <hca@linux.ibm.com>
Signed-off-by: default avatarAlexander Gordeev <agordeev@linux.ibm.com>
parent d933e5f4
...@@ -16,6 +16,9 @@ ...@@ -16,6 +16,9 @@
#define OS_INFO_VMCOREINFO 0 #define OS_INFO_VMCOREINFO 0
#define OS_INFO_REIPL_BLOCK 1 #define OS_INFO_REIPL_BLOCK 1
#define OS_INFO_FLAGS_ENTRY 2
#define OS_INFO_FLAG_REIPL_CLEAR (1UL << 0)
struct os_info_entry { struct os_info_entry {
u64 addr; u64 addr;
...@@ -30,8 +33,8 @@ struct os_info { ...@@ -30,8 +33,8 @@ struct os_info {
u16 version_minor; u16 version_minor;
u64 crashkernel_addr; u64 crashkernel_addr;
u64 crashkernel_size; u64 crashkernel_size;
struct os_info_entry entry[2]; struct os_info_entry entry[3];
u8 reserved[4024]; u8 reserved[4004];
} __packed; } __packed;
void os_info_init(void); void os_info_init(void);
......
...@@ -176,6 +176,8 @@ static bool reipl_fcp_clear; ...@@ -176,6 +176,8 @@ static bool reipl_fcp_clear;
static bool reipl_ccw_clear; static bool reipl_ccw_clear;
static bool reipl_eckd_clear; static bool reipl_eckd_clear;
static unsigned long os_info_flags;
static inline int __diag308(unsigned long subcode, unsigned long addr) static inline int __diag308(unsigned long subcode, unsigned long addr)
{ {
union register_pair r1; union register_pair r1;
...@@ -1939,6 +1941,20 @@ static void dump_reipl_run(struct shutdown_trigger *trigger) ...@@ -1939,6 +1941,20 @@ static void dump_reipl_run(struct shutdown_trigger *trigger)
struct lowcore *abs_lc; struct lowcore *abs_lc;
unsigned int csum; unsigned int csum;
/*
* Set REIPL_CLEAR flag in os_info flags entry indicating
* 'clear' sysfs attribute has been set on the panicked system
* for specified reipl type.
* Always set for IPL_TYPE_NSS and IPL_TYPE_UNKNOWN.
*/
if ((reipl_type == IPL_TYPE_CCW && reipl_ccw_clear) ||
(reipl_type == IPL_TYPE_ECKD && reipl_eckd_clear) ||
(reipl_type == IPL_TYPE_FCP && reipl_fcp_clear) ||
(reipl_type == IPL_TYPE_NVME && reipl_nvme_clear) ||
reipl_type == IPL_TYPE_NSS ||
reipl_type == IPL_TYPE_UNKNOWN)
os_info_flags |= OS_INFO_FLAG_REIPL_CLEAR;
os_info_entry_add(OS_INFO_FLAGS_ENTRY, &os_info_flags, sizeof(os_info_flags));
csum = (__force unsigned int) csum = (__force unsigned int)
csum_partial(reipl_block_actual, reipl_block_actual->hdr.len, 0); csum_partial(reipl_block_actual, reipl_block_actual->hdr.len, 0);
abs_lc = get_abs_lowcore(); abs_lc = get_abs_lowcore();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment