Lines Matching +full:main +full:- +full:storage

1 // SPDX-License-Identifier: GPL-2.0
14 #include <linux/entry-common.h>
32 #include <asm/asm-offsets.h>
79 return -ENOMEM; in nmi_alloc_mcesa()
108 num = (val >> (64 - 4 * i)) & 0xf; in u64_to_hex()
110 *dest++ = 'A' + num - 10; in u64_to_hex()
129 u64_to_hex(ptr, lc->mcck_interruption_code); in s390_handle_damage()
139 psw_save = lc->mcck_new_psw; in s390_handle_damage()
140 psw_bits(lc->mcck_new_psw).io = 0; in s390_handle_damage()
141 psw_bits(lc->mcck_new_psw).ext = 0; in s390_handle_damage()
142 psw_bits(lc->mcck_new_psw).wait = 1; in s390_handle_damage()
149 lc->mcck_new_psw = psw_save; in s390_handle_damage()
157 * Main machine check handler function. Will be called with interrupts disabled
200 current->comm, current->pid); in s390_handle_mcck()
208 * nmi_registers_valid - verify if registers are valid
230 set_clock_comparator(get_lowcore()->clock_comparator); in nmi_registers_valid()
245 * Two cases for guarded storage registers: in nmi_registers_valid()
246 * - machine check in kernel or userspace in nmi_registers_valid()
247 * - machine check while running SIE (KVM guest) in nmi_registers_valid()
248 * For kernel or userspace the userspace values of guarded storage in nmi_registers_valid()
250 * For SIE the guest values of guarded storage can not be recreated. in nmi_registers_valid()
256 cr2.reg = get_lowcore()->cregs_save_area[2]; in nmi_registers_valid()
274 struct kvm_s390_sie_block *sie_block = phys_to_virt(regs->gprs[14]); in s390_backup_mcck_info()
281 mcck_backup = &sie_page->mcck_info; in s390_backup_mcck_info()
282 mcck_backup->mcic = get_lowcore()->mcck_interruption_code & in s390_backup_mcck_info()
284 mcck_backup->ext_damage_code = get_lowcore()->external_damage_code; in s390_backup_mcck_info()
285 mcck_backup->failing_storage_address = get_lowcore()->failing_storage_address; in s390_backup_mcck_info()
318 mci.val = lc->mcck_interruption_code; in s390_do_machine_check()
328 /* Processing backup -> verify if we can survive this */ in s390_do_machine_check()
348 if (((tmp - last_ipd) >> 12) < MAX_IPD_TIME) in s390_do_machine_check()
357 /* Processing damage -> stopping machine */ in s390_do_machine_check()
366 * user space process -> mark task for termination. in s390_do_machine_check()
368 mcck->kill_task = 1; in s390_do_machine_check()
369 mcck->mcck_code = mci.val; in s390_do_machine_check()
386 if (lc->external_damage_code & (1U << ED_STP_SYNC)) in s390_do_machine_check()
387 mcck->stp_queue |= stp_sync_check(); in s390_do_machine_check()
388 if (lc->external_damage_code & (1U << ED_STP_ISLAND)) in s390_do_machine_check()
389 mcck->stp_queue |= stp_island_check(); in s390_do_machine_check()
393 * Reinject storage related machine checks into the guest if they in s390_do_machine_check()
397 /* Storage error uncorrected */ in s390_do_machine_check()
400 /* Storage key-error uncorrected */ in s390_do_machine_check()
403 /* Storage degradation */ in s390_do_machine_check()
409 mcck->channel_report = 1; in s390_do_machine_check()
414 mcck->warning = 1; in s390_do_machine_check()
427 *((long *)(regs->gprs[15] + __SF_SIE_REASON)) = -EINTR; in s390_do_machine_check()