mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
NMI: Command line parameter for watchdog timeout
Introduce a command parameter to set the watchtog timeout. Manually specifying "watchdog_timeout=<seconds>" on the command line will also turn the watchdog on. For consistency, move opt_watchdog into nmi.c along with opt_watchdog_timeout. Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com> Committed-by: Keir Fraser <keir@xen.org>
This commit is contained in:
1 parent
338db98dd8
commit
d4faf5a948
4 files changed
+30
-7
No files matched your search
@@ -391,7 +391,17 @@ The optional `keep` parameter causes Xen to continue using the vga console even
|
||||
### watchdog
|
||||
> `= <boolean>`
|
||||
|
||||
Run an NMI watchdog on each processor. Defaults to disabled.
|
||||
> Default: `false`
|
||||
|
||||
Run an NMI watchdog on each processor. If a processor is stuck for longer than the watchdog\_timeout, a panic occurs.
|
||||
|
||||
### watchdog\_timeout
|
||||
> `= <integer>`
|
||||
|
||||
> Default: `5`
|
||||
|
||||
Set the NMI watchdog timeout in seconds. Specifying `0` will turn off the watchdog.
|
||||
|
||||
### x2apic
|
||||
### x2apic\_phys
|
||||
### xencons
|
||||
|
||||
+15
-2
@@ -40,6 +40,19 @@ static unsigned int nmi_p4_cccr_val;
|
||||
static DEFINE_PER_CPU(struct timer, nmi_timer);
|
||||
static DEFINE_PER_CPU(unsigned int, nmi_timer_ticks);
|
||||
|
||||
/* opt_watchdog: If true, run a watchdog NMI on each processor. */
|
||||
bool_t __initdata opt_watchdog = 0;
|
||||
boolean_param("watchdog", opt_watchdog);
|
||||
|
||||
/* opt_watchdog_timeout: Number of seconds to wait before panic. */
|
||||
static unsigned int opt_watchdog_timeout = 5;
|
||||
static void parse_watchdog_timeout(char * s)
|
||||
{
|
||||
opt_watchdog_timeout = simple_strtoull(s, NULL, 0);
|
||||
opt_watchdog = !!opt_watchdog_timeout;
|
||||
}
|
||||
custom_param("watchdog_timeout", parse_watchdog_timeout);
|
||||
|
||||
/*
|
||||
* lapic_nmi_owner tracks the ownership of the lapic NMI hardware:
|
||||
* - it may be reserved by some other driver, or not
|
||||
@@ -425,11 +438,11 @@ void nmi_watchdog_tick(struct cpu_user_regs * regs)
|
||||
!atomic_read(&watchdog_disable_count) )
|
||||
{
|
||||
/*
|
||||
* Ayiee, looks like this CPU is stuck ... wait a few IRQs (5 seconds)
|
||||
* Ayiee, looks like this CPU is stuck ... wait for the timeout
|
||||
* before doing the oops ...
|
||||
*/
|
||||
this_cpu(alert_counter)++;
|
||||
if ( this_cpu(alert_counter) == 5*nmi_hz )
|
||||
if ( this_cpu(alert_counter) == opt_watchdog_timeout*nmi_hz )
|
||||
{
|
||||
console_force_unlock();
|
||||
printk("Watchdog timer detects that CPU%d is stuck!\n",
|
||||
|
||||
@@ -45,6 +45,7 @@
|
||||
#include <asm/mach-generic/mach_apic.h> /* for generic_apic_probe */
|
||||
#include <asm/setup.h>
|
||||
#include <xen/cpu.h>
|
||||
#include <asm/nmi.h>
|
||||
|
||||
/* opt_nosmp: If true, secondary processors are ignored. */
|
||||
static bool_t __initdata opt_nosmp;
|
||||
@@ -54,10 +55,6 @@ boolean_param("nosmp", opt_nosmp);
|
||||
static unsigned int __initdata max_cpus;
|
||||
integer_param("maxcpus", max_cpus);
|
||||
|
||||
/* opt_watchdog: If true, run a watchdog NMI on each processor. */
|
||||
static bool_t __initdata opt_watchdog;
|
||||
boolean_param("watchdog", opt_watchdog);
|
||||
|
||||
/* smep: Enable/disable Supervisor Mode Execution Protection (default on). */
|
||||
static bool_t __initdata disable_smep;
|
||||
invbool_param("smep", disable_smep);
|
||||
|
||||
@@ -5,6 +5,9 @@
|
||||
#include <public/nmi.h>
|
||||
|
||||
struct cpu_user_regs;
|
||||
|
||||
/* Watchdog boolean from the command line */
|
||||
extern bool_t opt_watchdog;
|
||||
|
||||
typedef int (*nmi_callback_t)(struct cpu_user_regs *regs, int cpu);
|
||||
|
||||
|
||||