[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 2 of 4 RFC] xen/panic: Introduce panic_in_progress
The panic() function will re-enable NMIs. In addition, because of the private spinlock, panic() is not safe to reentry on the same pcpu, due to an NMI or MCE. We introduce a panic_in_progress flag and is_panic_in_progress() helper, to be used in subsequent patches. (And also fix a whitespace error.) Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> diff -r b15d3ae525af -r 48a60a407e15 xen/drivers/char/console.c --- a/xen/drivers/char/console.c +++ b/xen/drivers/char/console.c @@ -65,6 +65,8 @@ static int __read_mostly sercon_handle = static DEFINE_SPINLOCK(console_lock); +static atomic_t panic_in_progress = ATOMIC_INIT(0); + /* * To control the amount of printing, thresholds are added. * These thresholds correspond to the XENLOG logging levels. @@ -980,13 +982,22 @@ static int __init debugtrace_init(void) * ************************************************************** */ +/* Is a panic() in progress? Used to prevent reentrancy of panic() from + * NMIs/MCEs, as there is potential to deadlock from those contexts. */ +long is_panic_in_progress(void) +{ + return atomic_read(&panic_in_progress); +} + void panic(const char *fmt, ...) { va_list args; unsigned long flags; static DEFINE_SPINLOCK(lock); static char buf[128]; - + + atomic_set(&panic_in_progress, 1); + debugtrace_dump(); /* Protects buf[] and ensure multi-line message prints atomically. */ diff -r b15d3ae525af -r 48a60a407e15 xen/include/xen/lib.h --- a/xen/include/xen/lib.h +++ b/xen/include/xen/lib.h @@ -78,6 +78,7 @@ extern void debugtrace_printk(const char #define _p(_x) ((void *)(unsigned long)(_x)) extern void printk(const char *format, ...) __attribute__ ((format (printf, 1, 2))); +extern long is_panic_in_progress(void); extern void panic(const char *format, ...) __attribute__ ((format (printf, 1, 2))); extern long vm_assist(struct domain *, unsigned int, unsigned int); _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |