Linux Headquarters
[ Register ]
[ About us ] [ Home Page ]

Advertisement
[ Kernel ] [ Documentation ] [ Links ] [ Books ]

Advertisement

Kernel v2.6.24 /kernel/panic.c

Filename:/kernel/panic.c
Lines Added:24
Lines Deleted:6
Also changed in: (Previous) 2.6.24-rc8  2.6.24-rc7  2.6.24-rc6  2.6.24-rc5  2.6.24-rc4  2.6.24-rc3 
(Following) 2.6.24-git8  2.6.24-git9  2.6.24-git10  2.6.24-git11  2.6.24-git12  2.6.24-git13 

Location
[  2.6.24
  [  kernel
     o  panic.c

Patch

diff --git a/kernel/panic.c b/kernel/panic.c
index f64f4c1..da4d6ba 100644
--- a/kernel/panic.c
+++ b/kernel/panic.c
@@ -19,6 +19,7 @@
 #include <linux/nmi.h>
 #include <linux/kexec.h>
 #include <linux/debug_locks.h>
+#include <linux/random.h>
 
 int panic_on_oops;
 int tainted;
@@ -56,14 +57,14 @@ EXPORT_SYMBOL(panic_blink);
  *
  *   This function never returns.
  */
- 
+
 NORET_TYPE void panic(const char * fmt, ...)
 {
    long i;
    static char buf[1024];
    va_list args;
 #if defined(CONFIG_S390)
-        unsigned long caller = (unsigned long) __builtin_return_address(0);
+   unsigned long caller = (unsigned long) __builtin_return_address(0);
 #endif
 
    /*
@@ -128,7 +129,7 @@ NORET_TYPE void panic(const char * fmt, ...)
    }
 #endif
 #if defined(CONFIG_S390)
-        disabled_wait(caller);
+   disabled_wait(caller);
 #endif
    local_irq_enable();
    for (i = 0;;) {
@@ -148,13 +149,13 @@ EXPORT_SYMBOL(panic);
  *  'F' - Module has been forcibly loaded.
  *  'S' - SMP with CPUs not designed for SMP.
  *  'R' - User forced a module unload.
- *  'M' - Machine had a machine check experience.
+ *  'M' - System experienced a machine check exception.
  *  'B' - System has hit bad_page.
  *  'U' - Userspace-defined naughtiness.
  *
  *   The string is overwritten by the next call to print_taint().
  */
- 
+
 const char *print_tainted(void)
 {
    static char buf[20];
@@ -164,7 +165,7 @@ const char *print_tainted(void)
          tainted & TAINT_FORCED_MODULE ? 'F' : ' ',
          tainted & TAINT_UNSAFE_SMP ? 'S' : ' ',
          tainted & TAINT_FORCED_RMMOD ? 'R' : ' ',
-          tainted & TAINT_MACHINE_CHECK ? 'M' : ' ',
+         tainted & TAINT_MACHINE_CHECK ? 'M' : ' ',
          tainted & TAINT_BAD_PAGE ? 'B' : ' ',
          tainted & TAINT_USER ? 'U' : ' ',
          tainted & TAINT_DIE ? 'D' : ' ');
@@ -266,12 +267,29 @@ void oops_enter(void)
 }
 
 /*
+ * 64-bit random ID for oopses:
+ */
+static u64 oops_id;
+
+static int init_oops_id(void)
+{
+   if (!oops_id)
+      get_random_bytes(&oops_id, sizeof(oops_id));
+
+   return 0;
+}
+late_initcall(init_oops_id);
+
+/*
  * Called when the architecture exits its oops handler, after printing
  * everything.
  */
 void oops_exit(void)
 {
    do_oops_enter_exit();
+   init_oops_id();
+   printk(KERN_WARNING "---[ end trace %016llx ]---\n",
+      (unsigned long long)oops_id);
 }
 
 #ifdef CONFIG_CC_STACKPROTECTOR


Comments: webmaster (at) linuxhq.com.
Advertising: banners (at) linuxhq.com.
Compilation ©1998-2008 Linux Headquarters, Inc.