mirror of
https://github.com/torvalds/linux.git
synced 2026-06-04 04:23:35 +02:00
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: Mikhail Zaslonko <zaslonko@linux.ibm.com> Acked-by: Alexander Gordeev <agordeev@linux.ibm.com> Reviewed-by: Heiko Carstens <hca@linux.ibm.com> Signed-off-by: Alexander Gordeev <agordeev@linux.ibm.com>
This commit is contained in:
parent
d933e5f41e
commit
31e9ccc67c
|
|
@ -16,6 +16,9 @@
|
|||
|
||||
#define OS_INFO_VMCOREINFO 0
|
||||
#define OS_INFO_REIPL_BLOCK 1
|
||||
#define OS_INFO_FLAGS_ENTRY 2
|
||||
|
||||
#define OS_INFO_FLAG_REIPL_CLEAR (1UL << 0)
|
||||
|
||||
struct os_info_entry {
|
||||
u64 addr;
|
||||
|
|
@ -30,8 +33,8 @@ struct os_info {
|
|||
u16 version_minor;
|
||||
u64 crashkernel_addr;
|
||||
u64 crashkernel_size;
|
||||
struct os_info_entry entry[2];
|
||||
u8 reserved[4024];
|
||||
struct os_info_entry entry[3];
|
||||
u8 reserved[4004];
|
||||
} __packed;
|
||||
|
||||
void os_info_init(void);
|
||||
|
|
|
|||
|
|
@ -176,6 +176,8 @@ static bool reipl_fcp_clear;
|
|||
static bool reipl_ccw_clear;
|
||||
static bool reipl_eckd_clear;
|
||||
|
||||
static unsigned long os_info_flags;
|
||||
|
||||
static inline int __diag308(unsigned long subcode, unsigned long addr)
|
||||
{
|
||||
union register_pair r1;
|
||||
|
|
@ -1939,6 +1941,20 @@ static void dump_reipl_run(struct shutdown_trigger *trigger)
|
|||
struct lowcore *abs_lc;
|
||||
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_partial(reipl_block_actual, reipl_block_actual->hdr.len, 0);
|
||||
abs_lc = get_abs_lowcore();
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user