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

1 // SPDX-License-Identifier: GPL-2.0
15 #include <linux/entry-common.h>
33 #include <asm/asm-offsets.h>
80 return -ENOMEM; in nmi_alloc_mcesa()
109 num = (val >> (64 - 4 * i)) & 0xf; in u64_to_hex()
111 *dest++ = 'A' + num - 10; in u64_to_hex()
130 u64_to_hex(ptr, lc->mcck_interruption_code); in s390_handle_damage()
140 psw_save = lc->mcck_new_psw; in s390_handle_damage()
141 psw_bits(lc->mcck_new_psw).io = 0; in s390_handle_damage()
142 psw_bits(lc->mcck_new_psw).ext = 0; in s390_handle_damage()
143 psw_bits(lc->mcck_new_psw).wait = 1; in s390_handle_damage()
150 lc->mcck_new_psw = psw_save; in s390_handle_damage()
158 * Main machine check handler function. Will be called with interrupts disabled
201 current->comm, current->pid); in s390_handle_mcck()
209 * nmi_registers_valid - verify if registers are valid
231 set_clock_comparator(get_lowcore()->clock_comparator); in nmi_registers_valid()
246 * Two cases for guarded storage registers: in nmi_registers_valid()
247 * - machine check in kernel or userspace in nmi_registers_valid()
248 * - machine check while running SIE (KVM guest) in nmi_registers_valid()
249 * For kernel or userspace the userspace values of guarded storage in nmi_registers_valid()
251 * For SIE the guest values of guarded storage can not be recreated. in nmi_registers_valid()
257 cr2.reg = get_lowcore()->cregs_save_area[2]; in nmi_registers_valid()
275 struct kvm_s390_sie_block *sie_block = phys_to_virt(regs->gprs[14]); in s390_backup_mcck_info()
282 mcck_backup = &sie_page->mcck_info; in s390_backup_mcck_info()
283 mcck_backup->mcic = get_lowcore()->mcck_interruption_code & in s390_backup_mcck_info()
285 mcck_backup->ext_damage_code = get_lowcore()->external_damage_code; in s390_backup_mcck_info()
286 mcck_backup->failing_storage_address = get_lowcore()->failing_storage_address; in s390_backup_mcck_info()
319 mci.val = lc->mcck_interruption_code; in s390_do_machine_check()
329 /* Processing backup -> verify if we can survive this */ in s390_do_machine_check()
349 if (((tmp - last_ipd) >> 12) < MAX_IPD_TIME) in s390_do_machine_check()
358 /* Processing damage -> stopping machine */ in s390_do_machine_check()
367 * user space process -> mark task for termination. in s390_do_machine_check()
369 mcck->kill_task = 1; in s390_do_machine_check()
370 mcck->mcck_code = mci.val; in s390_do_machine_check()
387 if (lc->external_damage_code & (1U << ED_STP_SYNC)) in s390_do_machine_check()
388 mcck->stp_queue |= stp_sync_check(); in s390_do_machine_check()
389 if (lc->external_damage_code & (1U << ED_STP_ISLAND)) in s390_do_machine_check()
390 mcck->stp_queue |= stp_island_check(); in s390_do_machine_check()
394 * Reinject storage related machine checks into the guest if they in s390_do_machine_check()
398 /* Storage error uncorrected */ in s390_do_machine_check()
401 /* Storage key-error uncorrected */ in s390_do_machine_check()
404 /* Storage degradation */ in s390_do_machine_check()
410 mcck->channel_report = 1; in s390_do_machine_check()
415 mcck->warning = 1; in s390_do_machine_check()
428 *((long *)(regs->gprs[15] + __SF_SIE_REASON)) = -EINTR; in s390_do_machine_check()