#[derive(Default, Debug, Copy, Clone, Ord, PartialOrd, Eq, PartialEq, Hash)]
#[derive(Deserialize, Serialize)]
#[serde(default, deny_unknown_fields)]
pub struct GlobalKernelPanicConfiguration
{
pub panic_timout_in_seconds: Option<KernelPanicRebootAction>,
pub panic_on_oops: Option<bool>,
pub panic_on_rcu_stall: Option<bool>,
pub panic_on_warn: Option<bool>,
pub panic_on_io_non_maskable_interupt: Option<bool>,
pub panic_on_unknown_non_maskable_interupt: Option<bool>,
pub panic_on_unrecovered_non_maskable_interupt: Option<bool>,
pub panic_on_stack_overflow: Option<bool>,
pub panic_on_hung_task: Option<bool>,
pub panic_on_memory_check_failure: Option<bool>,
pub panic_on_software_watchdog_lockup: Option<bool>,
pub capture_debug_information_on_software_watchdog_lockup: Option<bool>,
pub panic_on_hardware_watchdog_lockup: Option<bool>,
pub capture_debug_information_on_hardware_watchdog_lockup: Option<bool>,
pub what_to_print_on_panic: Option<WhatToPrintOnAKernelPanic>,
pub report_panic_data_to_hyper_v: Option<bool>,
}
impl GlobalKernelPanicConfiguration
{
#[inline(always)]
pub fn configure(&self, proc_path: &ProcPath) -> Result<(), GlobalKernelPanicConfigurationError>
{
use self::GlobalKernelPanicConfigurationError::*;
set_proc_sys_kernel_value(proc_path, "panic", self.panic_timout_in_seconds, CouldNotChangePanicTimeout)?;
set_proc_sys_kernel_value(proc_path, "panic_on_oops", self.panic_timout_in_seconds, CouldNotChangePanicOnOops)?;
set_proc_sys_kernel_value(proc_path, "panic_on_rcu_stall", self.panic_on_rcu_stall, CouldNotChangePanicOnRcuStall)?;
set_proc_sys_kernel_value(proc_path, "panic_on_warn", self.panic_on_warn, CouldNotChangePanicOnWarn)?;
set_proc_sys_kernel_value(proc_path, "panic_on_io_nmi", self.panic_on_io_non_maskable_interupt, CouldNotChangePanicOnIoNonMaskableInterrupt)?;
set_proc_sys_kernel_value(proc_path, "unknown_nmi_panic", self.panic_on_unknown_non_maskable_interupt, CouldNotChangePanicOnUnknownNonMaskableInterrupt)?;
set_proc_sys_kernel_value(proc_path, "panic_on_unrecovered_nmi", self.panic_on_unrecovered_non_maskable_interupt, CouldNotChangePanicOnUnrecoverableNonMaskableInterrupt)?;
set_proc_sys_kernel_value(proc_path, "panic_on_stackoverflow", self.panic_on_stack_overflow, CouldNotChangePanicOnStackOverflow)?;
set_proc_sys_kernel_value(proc_path, "panic_on_hung_task", self.panic_on_stack_overflow, CouldNotChangePanicOnHungTask)?;
set_proc_sys_vm_value(proc_path, "memory_failure_recovery", self.panic_on_memory_check_failure.map(|value| !value), CouldNotChangePanicOnMemoryFailure)?;
set_proc_sys_kernel_value(proc_path, "softlockup_panic", self.panic_on_software_watchdog_lockup, CouldNotChangePanicOnSoftwareWatchdogLockup)?;
set_proc_sys_kernel_value(proc_path, "softlockup_all_cpu_backtrace", self.capture_debug_information_on_software_watchdog_lockup, CouldNotChangeSoftwareWatchdogLockupDebugInformation)?;
set_proc_sys_kernel_value(proc_path, "hardlockup_panic", self.panic_on_hardware_watchdog_lockup, CouldNotChangePanicOnHardwareWatchdogLockup)?;
set_proc_sys_kernel_value(proc_path, "hardlockup_all_cpu_backtrace", self.capture_debug_information_on_hardware_watchdog_lockup, CouldNotChangeHardwareWatchdogLockupDebugInformation)?;
set_proc_sys_kernel_value(proc_path, "panic_print", self.what_to_print_on_panic, CouldNotChangePanicPrint)?;
set_proc_sys_kernel_value(proc_path, "hyperv_record_panic_msg", self.report_panic_data_to_hyper_v, CouldNotChangeReportPanicDataToHyperV)?;
Ok(())
}
}