/* SPDX-License-Identifier: GPL-2.0 */ /* * The FRED specific kernel/user entry functions which are invoked from * assembly code and dispatch to the associated handlers.
*/ #include <linux/kernel.h> #include <linux/kdebug.h> #include <linux/nospec.h>
/* Panic on events from a high stack level */ if (regs->fred_cs.sl > 0) {
pr_emerg("PANIC: invalid or fatal FRED event; event type %u " "vector %u error 0x%lx aux 0x%lx at %04x:%016lx\n",
regs->fred_ss.type, regs->fred_ss.vector, error_code,
fred_event_data(regs), regs->cs, regs->ip);
die("invalid or fatal FRED event", regs, error_code);
panic("invalid or fatal FRED event");
} else { unsignedlong flags = oops_begin(); int sig = SIGKILL;
pr_alert("BUG: invalid or fatal FRED event; event type %u " "vector %u error 0x%lx aux 0x%lx at %04x:%016lx\n",
regs->fred_ss.type, regs->fred_ss.vector, error_code,
fred_event_data(regs), regs->cs, regs->ip);
if (__die("Invalid or fatal FRED event", regs, error_code))
sig = 0;
static noinstr void fred_hwexc(struct pt_regs *regs, unsignedlong error_code)
{ /* Optimize for #PF. That's the only exception which matters performance wise */ if (likely(regs->fred_ss.vector == X86_TRAP_PF)) return exc_page_fault(regs, error_code);
switch (regs->fred_ss.vector) { case X86_TRAP_DE: return exc_divide_error(regs); case X86_TRAP_DB: return fred_exc_debug(regs); case X86_TRAP_BR: return exc_bounds(regs); case X86_TRAP_UD: return exc_invalid_op(regs); case X86_TRAP_NM: return exc_device_not_available(regs); case X86_TRAP_DF: return exc_double_fault(regs, error_code); case X86_TRAP_TS: return exc_invalid_tss(regs, error_code); case X86_TRAP_NP: return exc_segment_not_present(regs, error_code); case X86_TRAP_SS: return exc_stack_segment(regs, error_code); case X86_TRAP_GP: return exc_general_protection(regs, error_code); case X86_TRAP_MF: return exc_coprocessor_error(regs); case X86_TRAP_AC: return exc_alignment_check(regs, error_code); case X86_TRAP_XF: return exc_simd_coprocessor_error(regs);
#ifdef CONFIG_X86_MCE case X86_TRAP_MC: return fred_exc_machine_check(regs); #endif #ifdef CONFIG_INTEL_TDX_GUEST case X86_TRAP_VE: return exc_virtualization_exception(regs); #endif #ifdef CONFIG_X86_CET case X86_TRAP_CP: return exc_control_protection(regs, error_code); #endif default: return fred_bad_type(regs, error_code);
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.