lkml.org 
[lkml]   [2003]   [Mar]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH] OOPS counters
    On Wed, 12 Mar 2003 07:07:26 +0100 (MET) Szakacsits Szabolcs <szaka@sienet.hu> wrote:

    | And in general, an oops counter would be also useful, not spending too
    | much time decoding potentialy bogus oopses.

    Hi,

    This patch (to 2.5.64) adds an Oops counter to all die() and __die()
    functions that I could find and prints the counter on each Oops: message
    that looks like so (the "[#n]" part):

    Oops: 0002 [#2]

    Comments?

    --
    ~Randy


    patch_name: oops_counter.patch
    patch_version: 2003-03-12.14:50:05
    author: Randy.Dunlap <rddunlap@osdl.org>
    description: Add an Oops counter to oops messages.
    product: Linux
    product_versions: 2.5.64
    changelog: Add an oops counter message in all die() or __die() functions.
    diffstat: =
    arch/arm/kernel/traps.c | 3 ++-
    arch/i386/kernel/traps.c | 3 ++-
    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, 23 insertions(+), 11 deletions(-)


    diff -Naur ./arch/ppc/kernel/traps.c%OOPSC ./arch/ppc/kernel/traps.c
    --- ./arch/ppc/kernel/traps.c%OOPSC Tue Mar 4 19:29:03 2003
    +++ ./arch/ppc/kernel/traps.c Wed Mar 12 14:48:47 2003
    @@ -86,13 +86,14 @@

    void die(const char * str, struct pt_regs * fp, long err)
    {
    + static int die_counter = 0;
    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 -Naur ./arch/i386/kernel/traps.c%OOPSC ./arch/i386/kernel/traps.c
    --- ./arch/i386/kernel/traps.c%OOPSC Tue Mar 4 19:29:01 2003
    +++ ./arch/i386/kernel/traps.c Wed Mar 12 13:10:33 2003
    @@ -247,11 +247,12 @@

    void die(const char * str, struct pt_regs * regs, long err)
    {
    + static int die_counter = 0;
    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);
    show_registers(regs);
    bust_spinlocks(0);
    spin_unlock_irq(&die_lock);
    diff -Naur ./arch/mips/kernel/traps.c%OOPSC ./arch/mips/kernel/traps.c
    --- ./arch/mips/kernel/traps.c%OOPSC Tue Mar 4 19:29:17 2003
    +++ ./arch/mips/kernel/traps.c Wed Mar 12 14:38:40 2003
    @@ -191,12 +191,13 @@
    extern void __die(const char * str, struct pt_regs * regs, const char *where,
    unsigned long line)
    {
    + static int die_counter = 0;
    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 -Naur ./arch/ppc64/kernel/traps.c%OOPSC ./arch/ppc64/kernel/traps.c
    --- ./arch/ppc64/kernel/traps.c%OOPSC Tue Mar 4 19:29:19 2003
    +++ ./arch/ppc64/kernel/traps.c Wed Mar 12 14:47:46 2003
    @@ -62,10 +62,11 @@

    void die(const char *str, struct pt_regs *regs, long err)
    {
    + static int die_counter = 0;
    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 -Naur ./arch/mips64/kernel/traps.c%OOPSC ./arch/mips64/kernel/traps.c
    --- ./arch/mips64/kernel/traps.c%OOPSC Tue Mar 4 19:29:30 2003
    +++ ./arch/mips64/kernel/traps.c Wed Mar 12 14:47:11 2003
    @@ -161,12 +161,13 @@

    void die(const char * str, struct pt_regs * regs, unsigned long err)
    {
    + static int die_counter = 0;
    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 -Naur ./arch/ia64/kernel/traps.c%OOPSC ./arch/ia64/kernel/traps.c
    --- ./arch/ia64/kernel/traps.c%OOPSC Tue Mar 4 19:29:52 2003
    +++ ./arch/ia64/kernel/traps.c Wed Mar 12 14:46:28 2003
    @@ -101,6 +101,7 @@
    .lock_owner = -1,
    .lock_owner_depth = 0
    };
    + static int die_counter = 0;

    if (die.lock_owner != smp_processor_id()) {
    console_verbose();
    @@ -111,7 +112,8 @@
    }

    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 -Naur ./arch/arm/kernel/traps.c%OOPSC ./arch/arm/kernel/traps.c
    --- ./arch/arm/kernel/traps.c%OOPSC Tue Mar 4 19:29:17 2003
    +++ ./arch/arm/kernel/traps.c Wed Mar 12 14:45:13 2003
    @@ -208,12 +208,13 @@
    NORET_TYPE void die(const char *str, struct pt_regs *regs, int err)
    {
    struct task_struct *tsk = current;
    + static int die_counter = 0;

    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 -Naur ./arch/x86_64/kernel/traps.c%OOPSC ./arch/x86_64/kernel/traps.c
    --- ./arch/x86_64/kernel/traps.c%OOPSC Tue Mar 4 19:28:53 2003
    +++ ./arch/x86_64/kernel/traps.c Wed Mar 12 14:44:07 2003
    @@ -325,11 +325,12 @@
    {
    int cpu;
    struct die_args args = { regs, str, err };
    + static int die_counter = 0;
    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();
    diff -Naur ./arch/s390x/kernel/traps.c%OOPSC ./arch/s390x/kernel/traps.c
    --- ./arch/s390x/kernel/traps.c%OOPSC Tue Mar 4 19:29:32 2003
    +++ ./arch/s390x/kernel/traps.c Wed Mar 12 14:43:29 2003
    @@ -228,10 +228,11 @@

    void die(const char * str, struct pt_regs * regs, long err)
    {
    + static int die_counter = 0;
    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 -Naur ./arch/sh/kernel/traps.c%OOPSC ./arch/sh/kernel/traps.c
    --- ./arch/sh/kernel/traps.c%OOPSC Tue Mar 4 19:28:56 2003
    +++ ./arch/sh/kernel/traps.c Wed Mar 12 14:43:03 2003
    @@ -58,9 +58,10 @@

    void die(const char * str, struct pt_regs * regs, long err)
    {
    + static int die_counter = 0;
    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 -Naur ./arch/s390/kernel/traps.c%OOPSC ./arch/s390/kernel/traps.c
    --- ./arch/s390/kernel/traps.c%OOPSC Tue Mar 4 19:29:15 2003
    +++ ./arch/s390/kernel/traps.c Wed Mar 12 14:42:21 2003
    @@ -226,10 +226,11 @@

    void die(const char * str, struct pt_regs * regs, long err)
    {
    + static int die_counter = 0;
    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);
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/
    \
     
     \ /
      Last update: 2005-03-22 13:33    [W:0.038 / U:1.144 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site