Print this page
10597 would like a way to set NMI behavior at boot
Reviewed by: Robert Mustacchi <rm@joyent.com>
Reviewed by: Andy Fiddaman <andy@omniosce.org>

*** 21,31 **** /* * Copyright (c) 2012 Gary Mills * * Copyright (c) 1993, 2010, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2011 by Delphix. All rights reserved. ! * Copyright 2018 Joyent, Inc. */ /* * Copyright (c) 2010, Intel Corporation. * All rights reserved. */ --- 21,31 ---- /* * Copyright (c) 2012 Gary Mills * * Copyright (c) 1993, 2010, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2011 by Delphix. All rights reserved. ! * Copyright 2019, Joyent, Inc. */ /* * Copyright (c) 2010, Intel Corporation. * All rights reserved. */
*** 59,68 **** --- 59,70 ---- #include <sys/boot_console.h> #include <sys/kdi_machimpl.h> #include <sys/archsystm.h> #include <sys/promif.h> #include <sys/pci_cfgspace.h> + #include <sys/apic.h> + #include <sys/apic_common.h> #include <sys/bootvfs.h> #include <sys/tsc.h> #ifdef __xpv #include <sys/hypervisor.h> #else
*** 77,86 **** --- 79,90 ---- extern uint32_t cpuid_feature_ecx_include; extern uint32_t cpuid_feature_ecx_exclude; extern uint32_t cpuid_feature_edx_include; extern uint32_t cpuid_feature_edx_exclude; + nmi_action_t nmi_action = NMI_ACTION_UNSET; + /* * Set console mode */ static void set_console_mode(uint8_t val)
*** 101,110 **** --- 105,115 ---- */ void mlsetup(struct regs *rp) { u_longlong_t prop_value; + char prop_str[BP_MAX_STRLEN]; extern struct classfuncs sys_classfuncs; extern disp_t cpu0_disp; extern char t0stack[]; extern int post_fastreboot; extern uint64_t plat_dr_options;
*** 147,156 **** --- 152,174 ---- cpuid_feature_edx_exclude = 0; else cpuid_feature_edx_exclude = (uint32_t)prop_value; #if !defined(__xpv) + if (bootprop_getstr("nmi", prop_str, sizeof (prop_str)) == 0) { + if (strcmp(prop_str, "ignore") == 0) { + nmi_action = NMI_ACTION_IGNORE; + } else if (strcmp(prop_str, "panic") == 0) { + nmi_action = NMI_ACTION_PANIC; + } else if (strcmp(prop_str, "kmdb") == 0) { + nmi_action = NMI_ACTION_KMDB; + } else { + prom_printf("unix: ignoring unknown nmi=%s\n", + prop_str); + } + } + /* * Check to see if KPTI has been explicitly enabled or disabled. * We have to check this before init_desctbls(). */ if (bootprop_getval("kpti", &prop_value) == 0) {