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) {