From 6db1b834fe2992bf7f0e47f2a80945a02d6d003b Mon Sep 17 00:00:00 2001 From: Corey Minyard Date: Mon, 8 May 2006 15:17:22 +0200 Subject: [PATCH] --- yaml --- r: 26559 b: refs/heads/master c: cdc60a4c8e71c4bcf67e83fac6c0cabd0ff19bfe h: refs/heads/master i: 26557: edd9457fe29a9393503d9b2eae68ba0a89daaa00 26555: da57f358e4b7241e9243e7f075632b200e6c911e 26551: fc6783055d0326183feb4ab276846ba14e825144 26543: ffcd929936131649263a6efdf742735b9992c348 26527: c5140eab86067cc4179d92df5e697ef12f8cf28f 26495: 7bd44c44f08374b089a47ba19fb8caffdc7c9e8d v: v3 --- [refs] | 2 +- trunk/arch/x86_64/kernel/traps.c | 10 +++++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index 31a6766a1d86..ba015cc9e571 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 5192d84e4c32cd335fd572e5ff0712041f45f7e7 +refs/heads/master: cdc60a4c8e71c4bcf67e83fac6c0cabd0ff19bfe diff --git a/trunk/arch/x86_64/kernel/traps.c b/trunk/arch/x86_64/kernel/traps.c index 2700b1375c1f..0ebb281aa178 100644 --- a/trunk/arch/x86_64/kernel/traps.c +++ b/trunk/arch/x86_64/kernel/traps.c @@ -385,6 +385,7 @@ void out_of_line_bug(void) static DEFINE_SPINLOCK(die_lock); static int die_owner = -1; +static unsigned int die_nest_count; unsigned __kprobes long oops_begin(void) { @@ -399,6 +400,7 @@ unsigned __kprobes long oops_begin(void) else spin_lock(&die_lock); } + die_nest_count++; die_owner = cpu; console_verbose(); bust_spinlocks(1); @@ -409,7 +411,13 @@ void __kprobes oops_end(unsigned long flags) { die_owner = -1; bust_spinlocks(0); - spin_unlock_irqrestore(&die_lock, flags); + die_nest_count--; + if (die_nest_count) + /* We still own the lock */ + local_irq_restore(flags); + else + /* Nest count reaches zero, release the lock. */ + spin_unlock_irqrestore(&die_lock, flags); if (panic_on_oops) panic("Oops"); }