Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=2c3b20e91fe3a083c5d9bc79437c485866ea251c
Commit:     2c3b20e91fe3a083c5d9bc79437c485866ea251c
Parent:     67e2be02328b9a61a9c799fbdd4ec94d7da0c323
Author:     Arjan van de Ven <[EMAIL PROTECTED]>
AuthorDate: Thu Dec 20 15:01:17 2007 +0100
Committer:  Ingo Molnar <[EMAIL PROTECTED]>
CommitDate: Thu Dec 20 15:01:17 2007 +0100

    debug: add end-of-oops marker
    
    Right now it's nearly impossible for parsers that collect kernel crashes
    from logs or emails (such as www.kerneloops.org) to detect the
    end-of-oops condition. In addition, it's not currently possible to
    detect whether or not 2 oopses that look alike are actually the same
    oops reported twice, or are truly two unique oopses.
    
    This patch adds an end-of-oops marker, and makes the end marker include
    a very simple 64-bit random ID to be able to detect duplicate reports.
    
    Normally, this ID is calculated as a late_initcall() (in the hope that
    at that time there is enough entropy to get a unique enough ID); however
    for early oopses the oops_exit() function needs to generate the ID on
    the fly.
    
    We do this all at the _end_ of an oops printout, so this does not impact
    our ability to get the most important portions of a crash out to the
    console first.
    
    [ Sidenote: the already existing oopses-since-bootup counter we print
      during crashes serves as the differentiator between multiple oopses
      that trigger during the same bootup. ]
    
    Tested on 32-bit and 64-bit x86. Artificially injected very early
    crashes as well, as expected they result in this constant ID after
    multiple bootups:
    
      ---[ end trace ca143223eefdc828 ]---
      ---[ end trace ca143223eefdc828 ]---
    
    because the random pools are still all zero. But it all still works
    fine and causes no additional problems (which is the main goal of
    instrumentation code).
    
    Signed-off-by: Arjan van de Ven <[EMAIL PROTECTED]>
    Signed-off-by: Ingo Molnar <[EMAIL PROTECTED]>
---
 kernel/panic.c |   18 ++++++++++++++++++
 1 files changed, 18 insertions(+), 0 deletions(-)

diff --git a/kernel/panic.c b/kernel/panic.c
index 6f6e03e..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;
@@ -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
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to