Patch from "Randy.Dunlap" <rddunlap@osdl.org>

Adds an oops counter to the oops messages, such as:

	Oops: 0002 [#2]

So we can tell whether oops reports refer to the first oops, or to some
less-interesting followon oops.



 arch/arm/kernel/traps.c    |    3 ++-
 arch/i386/kernel/traps.c   |    4 +++-
 arch/ia64/kernel/traps.c   |    4 +++-
 arch/mips/kernel/traps.c   |    3 ++-
 arch/mips64/kernel/traps.c |    3 ++-
 arch/ppc/kernel/traps.c    |    3 ++-
 arch/ppc64/kernel/traps.c  |    3 ++-
 arch/s390/kernel/traps.c   |    3 ++-
 arch/s390x/kernel/traps.c  |    3 ++-
 arch/sh/kernel/traps.c     |    3 ++-
 arch/x86_64/kernel/traps.c |    3 ++-
 11 files changed, 24 insertions(+), 11 deletions(-)

diff -puN arch/arm/kernel/traps.c~oops-counters arch/arm/kernel/traps.c
--- 25/arch/arm/kernel/traps.c~oops-counters	2003-03-13 02:36:23.000000000 -0800
+++ 25-akpm/arch/arm/kernel/traps.c	2003-03-13 02:36:23.000000000 -0800
@@ -208,12 +208,13 @@ spinlock_t die_lock = SPIN_LOCK_UNLOCKED
 NORET_TYPE void die(const char *str, struct pt_regs *regs, int err)
 {
 	struct task_struct *tsk = current;
+	static int die_counter;
 
 	console_verbose();
 	spin_lock_irq(&die_lock);
 	bust_spinlocks(1);
 
-	printk("Internal error: %s: %x\n", str, err);
+	printk("Internal error: %s: %x [#%d]\n", str, err, ++die_counter);
 	print_modules();
 	printk("CPU: %d\n", smp_processor_id());
 	show_regs(regs);
diff -puN arch/i386/kernel/traps.c~oops-counters arch/i386/kernel/traps.c
--- 25/arch/i386/kernel/traps.c~oops-counters	2003-03-13 02:36:23.000000000 -0800
+++ 25-akpm/arch/i386/kernel/traps.c	2003-03-13 02:38:18.000000000 -0800
@@ -265,11 +265,13 @@ spinlock_t die_lock = SPIN_LOCK_UNLOCKED
 
 void die(const char * str, struct pt_regs * regs, long err)
 {
+	static int die_counter;
+
 	console_verbose();
 	spin_lock_irq(&die_lock);
 	bust_spinlocks(1);
 	handle_BUG(regs);
-	printk("%s: %04lx\n", str, err & 0xffff);
+	printk("%s: %04lx [#%d]\n", str, err & 0xffff, ++die_counter);
 	CHK_REMOTE_DEBUG(1,SIGTRAP,err,regs,)
 	show_registers(regs);
 	bust_spinlocks(0);
diff -puN arch/ia64/kernel/traps.c~oops-counters arch/ia64/kernel/traps.c
--- 25/arch/ia64/kernel/traps.c~oops-counters	2003-03-13 02:36:23.000000000 -0800
+++ 25-akpm/arch/ia64/kernel/traps.c	2003-03-13 02:36:23.000000000 -0800
@@ -101,6 +101,7 @@ die (const char *str, struct pt_regs *re
 		.lock_owner =		-1,
 		.lock_owner_depth =	0
 	};
+	static int die_counter;
 
 	if (die.lock_owner != smp_processor_id()) {
 		console_verbose();
@@ -111,7 +112,8 @@ die (const char *str, struct pt_regs *re
 	}
 
 	if (++die.lock_owner_depth < 3) {
-		printk("%s[%d]: %s %ld\n", current->comm, current->pid, str, err);
+		printk("%s[%d]: %s %ld [%d]\n",
+			current->comm, current->pid, str, err, ++die_counter);
 		show_regs(regs);
   	} else
 		printk(KERN_ERR "Recursive die() failure, output suppressed\n");
diff -puN arch/mips64/kernel/traps.c~oops-counters arch/mips64/kernel/traps.c
--- 25/arch/mips64/kernel/traps.c~oops-counters	2003-03-13 02:36:23.000000000 -0800
+++ 25-akpm/arch/mips64/kernel/traps.c	2003-03-13 02:36:23.000000000 -0800
@@ -161,12 +161,13 @@ spinlock_t die_lock;
 
 void die(const char * str, struct pt_regs * regs, unsigned long err)
 {
+	static int die_counter;
 	if (user_mode(regs))	/* Just return if in user mode.  */
 		return;
 
 	console_verbose();
 	spin_lock_irq(&die_lock);
-	printk("%s: %04lx\n", str, err & 0xffff);
+	printk("%s: %04lx [#%d]\n", str, err & 0xffff, ++die_counter);
 	show_regs(regs);
 	printk("Process %s (pid: %d, stackpage=%08lx)\n",
 		current->comm, current->pid, (unsigned long) current);
diff -puN arch/mips/kernel/traps.c~oops-counters arch/mips/kernel/traps.c
--- 25/arch/mips/kernel/traps.c~oops-counters	2003-03-13 02:36:23.000000000 -0800
+++ 25-akpm/arch/mips/kernel/traps.c	2003-03-13 02:36:23.000000000 -0800
@@ -191,12 +191,13 @@ spinlock_t die_lock;
 extern void __die(const char * str, struct pt_regs * regs, const char *where,
                   unsigned long line)
 {
+	static int die_counter;
 	console_verbose();
 	spin_lock_irq(&die_lock);
 	printk("%s", str);
 	if (where)
 		printk(" in %s, line %ld", where, line);
-	printk(":\n");
+	printk("[#%d]:\n", ++die_counter);
 	show_regs(regs);
 	printk("Process %s (pid: %d, stackpage=%08lx)\n",
 		current->comm, current->pid, (unsigned long) current);
diff -puN arch/ppc64/kernel/traps.c~oops-counters arch/ppc64/kernel/traps.c
--- 25/arch/ppc64/kernel/traps.c~oops-counters	2003-03-13 02:36:23.000000000 -0800
+++ 25-akpm/arch/ppc64/kernel/traps.c	2003-03-13 02:36:23.000000000 -0800
@@ -62,10 +62,11 @@ static spinlock_t die_lock = SPIN_LOCK_U
 
 void die(const char *str, struct pt_regs *regs, long err)
 {
+	static int die_counter;
 	console_verbose();
 	spin_lock_irq(&die_lock);
 	bust_spinlocks(1);
-	printk("Oops: %s, sig: %ld\n", str, err);
+	printk("Oops: %s, sig: %ld [#%d]\n", str, err, ++die_counter);
 	show_regs(regs);
 	bust_spinlocks(0);
 	spin_unlock_irq(&die_lock);
diff -puN arch/ppc/kernel/traps.c~oops-counters arch/ppc/kernel/traps.c
--- 25/arch/ppc/kernel/traps.c~oops-counters	2003-03-13 02:36:23.000000000 -0800
+++ 25-akpm/arch/ppc/kernel/traps.c	2003-03-13 02:36:23.000000000 -0800
@@ -86,13 +86,14 @@ spinlock_t die_lock = SPIN_LOCK_UNLOCKED
 
 void die(const char * str, struct pt_regs * fp, long err)
 {
+	static int die_counter;
 	console_verbose();
 	spin_lock_irq(&die_lock);
 #ifdef CONFIG_PMAC_BACKLIGHT
 	set_backlight_enable(1);
 	set_backlight_level(BACKLIGHT_MAX);
 #endif
-	printk("Oops: %s, sig: %ld\n", str, err);
+	printk("Oops: %s, sig: %ld [#%d]\n", str, err, ++die_counter);
 	show_regs(fp);
 	spin_unlock_irq(&die_lock);
 	/* do_exit() should take care of panic'ing from an interrupt
diff -puN arch/s390/kernel/traps.c~oops-counters arch/s390/kernel/traps.c
--- 25/arch/s390/kernel/traps.c~oops-counters	2003-03-13 02:36:23.000000000 -0800
+++ 25-akpm/arch/s390/kernel/traps.c	2003-03-13 02:36:23.000000000 -0800
@@ -226,10 +226,11 @@ spinlock_t die_lock = SPIN_LOCK_UNLOCKED
 
 void die(const char * str, struct pt_regs * regs, long err)
 {
+	static int die_counter;
         console_verbose();
         spin_lock_irq(&die_lock);
 	bust_spinlocks(1);
-        printk("%s: %04lx\n", str, err & 0xffff);
+	printk("%s: %04lx [#%d]\n", str, err & 0xffff, ++die_counter);
         show_regs(regs);
 	bust_spinlocks(0);
         spin_unlock_irq(&die_lock);
diff -puN arch/s390x/kernel/traps.c~oops-counters arch/s390x/kernel/traps.c
--- 25/arch/s390x/kernel/traps.c~oops-counters	2003-03-13 02:36:23.000000000 -0800
+++ 25-akpm/arch/s390x/kernel/traps.c	2003-03-13 02:36:23.000000000 -0800
@@ -228,10 +228,11 @@ spinlock_t die_lock = SPIN_LOCK_UNLOCKED
 
 void die(const char * str, struct pt_regs * regs, long err)
 {
+	static int die_counter;
         console_verbose();
         spin_lock_irq(&die_lock);
 	bust_spinlocks(1);
-        printk("%s: %04lx\n", str, err & 0xffff);
+	printk("%s: %04lx [#%d]\n", str, err & 0xffff, ++die_counter);
         show_regs(regs);
 	bust_spinlocks(0);
         spin_unlock_irq(&die_lock);
diff -puN arch/sh/kernel/traps.c~oops-counters arch/sh/kernel/traps.c
--- 25/arch/sh/kernel/traps.c~oops-counters	2003-03-13 02:36:23.000000000 -0800
+++ 25-akpm/arch/sh/kernel/traps.c	2003-03-13 02:36:23.000000000 -0800
@@ -58,9 +58,10 @@ spinlock_t die_lock;
 
 void die(const char * str, struct pt_regs * regs, long err)
 {
+	static int die_counter;
 	console_verbose();
 	spin_lock_irq(&die_lock);
-	printk("%s: %04lx\n", str, err & 0xffff);
+	printk("%s: %04lx [#%d]\n", str, err & 0xffff, ++die_counter);
 	show_regs(regs);
 	spin_unlock_irq(&die_lock);
 	do_exit(SIGSEGV);
diff -puN arch/x86_64/kernel/traps.c~oops-counters arch/x86_64/kernel/traps.c
--- 25/arch/x86_64/kernel/traps.c~oops-counters	2003-03-13 02:36:23.000000000 -0800
+++ 25-akpm/arch/x86_64/kernel/traps.c	2003-03-13 02:36:23.000000000 -0800
@@ -325,11 +325,12 @@ void die(const char * str, struct pt_reg
 {
 	int cpu;
 	struct die_args args = { regs, str, err };
+	static int die_counter;
 	console_verbose();
 	notifier_call_chain(&die_chain,  DIE_DIE, &args); 
 	bust_spinlocks(1);
 	handle_BUG(regs); 
-	printk("%s: %04lx\n", str, err & 0xffff);
+	printk("%s: %04lx [#%d]\n", str, err & 0xffff, ++die_counter);
 	cpu = safe_smp_processor_id(); 
 	/* racy, but better than risking deadlock. */ 
 	local_irq_disable();

_