This patch implements new notifier function to panic_notifier_list. We can
change the list of order by debugfs.

Thanks,

---

Signed-off-by: Takenori Nagano <[EMAIL PROTECTED]>

---
diff -uprN linux-2.6.25.orig/arch/alpha/kernel/setup.c 
linux-2.6.25/arch/alpha/kernel/setup.c
--- linux-2.6.25.orig/arch/alpha/kernel/setup.c 2008-04-17 11:49:44.000000000 
+0900
+++ linux-2.6.25/arch/alpha/kernel/setup.c      2008-04-21 17:15:58.208654286 
+0900
@@ -44,14 +44,18 @@
 #include <asm/io.h>
 #include <linux/log2.h>
 
-extern struct atomic_notifier_head panic_notifier_list;
+extern struct tunable_atomic_notifier_head panic_notifier_list;
 static int alpha_panic_event(struct notifier_block *, unsigned long, void *);
-static struct notifier_block alpha_panic_block = {
+static struct notifier_block alpha_panic_block_base = {
        alpha_panic_event,
         NULL,
         INT_MAX /* try to do it first */
 };
 
+static struct tunable_atomic_notifier_block alpha_panic_block = {
+       .nb = &alpha_panic_block_base
+};
+
 #include <asm/uaccess.h>
 #include <asm/pgtable.h>
 #include <asm/system.h>
@@ -521,8 +525,8 @@ setup_arch(char **cmdline_p)
        }
 
        /* Register a call for panic conditions. */
-       atomic_notifier_chain_register(&panic_notifier_list,
-                       &alpha_panic_block);
+       tunable_atomic_notifier_chain_register(&panic_notifier_list,
+                               &alpha_panic_block, "alpha_panic", NULL);
 
 #ifdef CONFIG_ALPHA_GENERIC
        /* Assume that we've booted from SRM if we haven't booted from MILO.
diff -uprN linux-2.6.25.orig/arch/arm/mach-omap1/board-voiceblue.c 
linux-2.6.25/arch/arm/mach-omap1/board-voiceblue.c
--- linux-2.6.25.orig/arch/arm/mach-omap1/board-voiceblue.c     2008-04-17 
11:49:44.000000000 +0900
+++ linux-2.6.25/arch/arm/mach-omap1/board-voiceblue.c  2008-04-21 
17:15:58.252653690 +0900
@@ -226,14 +226,19 @@ static int panic_event(struct notifier_b
        return NOTIFY_DONE;
 }
 
-static struct notifier_block panic_block = {
+static struct notifier_block panic_block_base = {
        .notifier_call  = panic_event,
 };
 
+static struct tunable_atomic_notifier_block panic_block = {
+       .nb             = &panic_block_base
+};
+
 static int __init voiceblue_setup(void)
 {
        /* Setup panic notifier */
-       atomic_notifier_chain_register(&panic_notifier_list, &panic_block);
+       tunable_atomic_notifier_chain_register(&panic_notifier_list,
+                                       &panic_block, "VoiceBlue", NULL);
 
        return 0;
 }
diff -uprN linux-2.6.25.orig/arch/mips/lasat/setup.c 
linux-2.6.25/arch/mips/lasat/setup.c
--- linux-2.6.25.orig/arch/mips/lasat/setup.c   2008-04-17 11:49:44.000000000 
+0900
+++ linux-2.6.25/arch/mips/lasat/setup.c        2008-04-21 17:15:58.288653222 
+0900
@@ -106,7 +106,7 @@ static int lasat_panic_prom_monitor(stru
        return NOTIFY_DONE;
 }
 
-static struct notifier_block lasat_panic_block[] =
+static struct notifier_block lasat_panic_block_base[] =
 {
        {
                .notifier_call  = lasat_panic_display,
@@ -117,6 +117,18 @@ static struct notifier_block lasat_panic
        }
 };
 
+static struct tunable_atomic_notifier_block lasat_panic_block[] = {
+       {
+               .nb             = &lasat_panic_block_base[0]
+       }, {
+               .nb             = &lasat_panic_block_base[1]
+       }
+};
+
+static char* notifier_name[] = {
+       "lasat_panic_display", "lasat_panic_prom_monitor"
+};
+
 void __init plat_time_init(void)
 {
        mips_hpt_frequency = lasat_board_info.li_cpu_hz / 2;
@@ -134,8 +146,8 @@ void __init plat_mem_setup(void)
 
        /* Set up panic notifier */
        for (i = 0; i < ARRAY_SIZE(lasat_panic_block); i++)
-               atomic_notifier_chain_register(&panic_notifier_list,
-                               &lasat_panic_block[i]);
+               tunable_notifier_chain_register(&panic_notifier_list,
+                               &lasat_panic_block[i], notifier_name[i], NULL);
 
        lasat_reboot_setup();
 
diff -uprN linux-2.6.25.orig/arch/mips/sgi-ip22/ip22-reset.c 
linux-2.6.25/arch/mips/sgi-ip22/ip22-reset.c
--- linux-2.6.25.orig/arch/mips/sgi-ip22/ip22-reset.c   2008-04-17 
11:49:44.000000000 +0900
+++ linux-2.6.25/arch/mips/sgi-ip22/ip22-reset.c        2008-04-21 
17:15:58.324653254 +0900
@@ -226,10 +226,14 @@ static int panic_event(struct notifier_b
        return NOTIFY_DONE;
 }
 
-static struct notifier_block panic_block = {
+static struct notifier_block panic_block_base = {
        .notifier_call  = panic_event,
 };
 
+static struct tunable_atomic_notifier_block panic_block = {
+       .nb             = &panic_block_base
+};
+
 static int __init reboot_setup(void)
 {
        int res;
@@ -246,7 +250,8 @@ static int __init reboot_setup(void)
 
        init_timer(&blink_timer);
        blink_timer.function = blink_timeout;
-       atomic_notifier_chain_register(&panic_notifier_list, &panic_block);
+       tunable_atomic_notifier_chain_register(&panic_notifier_list,
+                                              &panic_block, "sgi-ip22", NULL);
 
        return 0;
 }
diff -uprN linux-2.6.25.orig/arch/mips/sgi-ip32/ip32-reset.c 
linux-2.6.25/arch/mips/sgi-ip32/ip32-reset.c
--- linux-2.6.25.orig/arch/mips/sgi-ip32/ip32-reset.c   2008-04-22 
20:34:43.035578599 +0900
+++ linux-2.6.25/arch/mips/sgi-ip32/ip32-reset.c        2008-04-21 
17:15:58.588651552 +0900
@@ -175,10 +175,14 @@ static int panic_event(struct notifier_b
        return NOTIFY_DONE;
 }
 
-static struct notifier_block panic_block = {
+static struct notifier_block panic_block_base = {
        .notifier_call = panic_event,
 };
 
+static struct tunable_atomic_notifier_block panic_block = {
+       .nb             = &panic_block_base
+};
+
 static __init int ip32_reboot_setup(void)
 {
        /* turn on the green led only */
@@ -193,7 +197,8 @@ static __init int ip32_reboot_setup(void
 
        init_timer(&blink_timer);
        blink_timer.function = blink_timeout;
-       atomic_notifier_chain_register(&panic_notifier_list, &panic_block);
+       tunable_atomic_notifier_chain_register(&panic_notifier_list,
+                                              &panic_block, "sgi-ip32", NULL);
 
        if (request_irq(MACEISA_RTC_IRQ, ip32_rtc_int, 0, "rtc", NULL))
                panic("Can't allocate MACEISA RTC IRQ");
diff -uprN linux-2.6.25.orig/arch/parisc/kernel/pdc_chassis.c 
linux-2.6.25/arch/parisc/kernel/pdc_chassis.c
--- linux-2.6.25.orig/arch/parisc/kernel/pdc_chassis.c  2008-04-17 
11:49:44.000000000 +0900
+++ linux-2.6.25/arch/parisc/kernel/pdc_chassis.c       2008-04-21 
17:15:58.604651614 +0900
@@ -101,11 +101,14 @@ static int pdc_chassis_panic_event(struc
 }   
 
 
-static struct notifier_block pdc_chassis_panic_block = {
+static struct notifier_block pdc_chassis_panic_block_base = {
        .notifier_call = pdc_chassis_panic_event,
        .priority = INT_MAX,
 };
 
+static struct tunable_atomic_notifier_block pdc_chassis_panic_block = {
+       .nb             = &pdc_chassis_panic_block_base
+};
 
 /**
  * parisc_reboot_event() - Called by the reboot handler.
@@ -144,8 +147,8 @@ void __init parisc_pdc_chassis_init(void
                                PDC_CHASSIS_VER);
 
                /* initialize panic notifier chain */
-               atomic_notifier_chain_register(&panic_notifier_list,
-                               &pdc_chassis_panic_block);
+               tunable_atomic_notifier_chain_register(&panic_notifier_list,
+                               &pdc_chassis_panic_block, "pdc_chassis", NULL);
 
                /* initialize reboot notifier chain */
                register_reboot_notifier(&pdc_chassis_reboot_block);
diff -uprN linux-2.6.25.orig/arch/powerpc/kernel/setup-common.c 
linux-2.6.25/arch/powerpc/kernel/setup-common.c
--- linux-2.6.25.orig/arch/powerpc/kernel/setup-common.c        2008-04-22 
20:34:43.439575752 +0900
+++ linux-2.6.25/arch/powerpc/kernel/setup-common.c     2008-04-21 
17:15:58.628651402 +0900
@@ -609,14 +609,19 @@ static int ppc_panic_event(struct notifi
        return NOTIFY_DONE;
 }
 
-static struct notifier_block ppc_panic_block = {
+static struct notifier_block ppc_panic_block_base = {
        .notifier_call = ppc_panic_event,
        .priority = INT_MIN /* may not return; must be done last */
 };
 
+static struct tunable_atomic_notifier_block ppc_panic_block = {
+       .nb             = &ppc_panic_block_base
+};
+
 void __init setup_panic(void)
 {
-       atomic_notifier_chain_register(&panic_notifier_list, &ppc_panic_block);
+       tunable_atomic_notifier_chain_register(&panic_notifier_list,
+                                       &ppc_panic_block, "powerpc", NULL);
 }
 
 #ifdef CONFIG_CHECK_CACHE_COHERENCY
diff -uprN linux-2.6.25.orig/arch/ppc/platforms/prep_setup.c 
linux-2.6.25/arch/ppc/platforms/prep_setup.c
--- linux-2.6.25.orig/arch/ppc/platforms/prep_setup.c   2008-04-22 
20:34:44.015572781 +0900
+++ linux-2.6.25/arch/ppc/platforms/prep_setup.c        2008-04-21 
17:15:58.772650588 +0900
@@ -634,12 +634,16 @@ ibm_statusled_panic(struct notifier_bloc
        return NOTIFY_DONE;
 }
 
-static struct notifier_block ibm_statusled_block = {
+static struct notifier_block ibm_statusled_block_base = {
        ibm_statusled_panic,
        NULL,
        INT_MAX /* try to do it first */
 };
 
+static struct tunable_atomic_notifier_block ibm_statusled_block = {
+       .nb = &ibm_statusled_block_base
+};
+
 static void
 ibm_statusled_progress(char *s, unsigned short hex)
 {
@@ -654,8 +658,9 @@ ibm_statusled_progress(char *s, unsigned
                hex = 0xfff;
                if (!notifier_installed) {
                        ++notifier_installed;
-                       atomic_notifier_chain_register(&panic_notifier_list,
-                                               &ibm_statusled_block);
+                       tunable_atomic_notifier_chain_register(
+                               &panic_notifier_list, &ibm_statusled_block,
+                               "IBM_statusLED", NULL);
                }
        }
        else
diff -uprN linux-2.6.25.orig/arch/s390/kernel/ipl.c 
linux-2.6.25/arch/s390/kernel/ipl.c
--- linux-2.6.25.orig/arch/s390/kernel/ipl.c    2008-04-22 20:34:44.103572199 
+0900
+++ linux-2.6.25/arch/s390/kernel/ipl.c 2008-04-21 17:15:58.772650588 +0900
@@ -1372,11 +1372,15 @@ static int on_panic_notify(struct notifi
        return NOTIFY_OK;
 }
 
-static struct notifier_block on_panic_nb = {
+static struct notifier_block on_panic_nb_base = {
        .notifier_call = on_panic_notify,
        .priority = 0,
 };
 
+static struct tunable_atomic_notifier_block on_panic_nb = {
+       .nb = &on_panic_nb_base
+};
+
 void __init setup_ipl(void)
 {
        ipl_info.type = get_ipl_type();
@@ -1402,7 +1406,8 @@ void __init setup_ipl(void)
                /* We have no info to copy */
                break;
        }
-       atomic_notifier_chain_register(&panic_notifier_list, &on_panic_nb);
+       tunable_atomic_notifier_chain_register(&panic_notifier_list,
+                                               &on_panic_nb, "s390_ipl", NULL);
 }
 
 void __init ipl_save_parameters(void)
diff -uprN linux-2.6.25.orig/arch/sparc64/kernel/sstate.c 
linux-2.6.25/arch/sparc64/kernel/sstate.c
--- linux-2.6.25.orig/arch/sparc64/kernel/sstate.c      2008-04-17 
11:49:44.000000000 +0900
+++ linux-2.6.25/arch/sparc64/kernel/sstate.c   2008-04-21 17:15:58.772650588 
+0900
@@ -82,11 +82,15 @@ static int sstate_panic_event(struct not
        return NOTIFY_DONE;
 }
 
-static struct notifier_block sstate_panic_block = {
+static struct notifier_block sstate_panic_block_base = {
        .notifier_call  =       sstate_panic_event,
        .priority       =       INT_MAX,
 };
 
+static struct tunable_atomic_notifier_block sstate_panic_block = {
+       .nb             =       &sstate_panic_block_base
+};
+
 void __init sun4v_sstate_init(void)
 {
        unsigned long major, minor;
@@ -99,6 +103,6 @@ void __init sun4v_sstate_init(void)
        hv_supports_soft_state = 1;
 
        prom_sun4v_guest_soft_state();
-       atomic_notifier_chain_register(&panic_notifier_list,
-                                      &sstate_panic_block);
+       tunable_atomic_notifier_chain_register(&panic_notifier_list,
+                                       &sstate_panic_block, "sstate" ,NULL);
 }
diff -uprN linux-2.6.25.orig/arch/um/drivers/mconsole_kern.c 
linux-2.6.25/arch/um/drivers/mconsole_kern.c
--- linux-2.6.25.orig/arch/um/drivers/mconsole_kern.c   2008-04-17 
11:49:44.000000000 +0900
+++ linux-2.6.25/arch/um/drivers/mconsole_kern.c        2008-04-21 
17:15:58.848643538 +0900
@@ -920,16 +920,20 @@ static int notify_panic(struct notifier_
        return 0;
 }
 
-static struct notifier_block panic_exit_notifier = {
+static struct notifier_block panic_exit_notifier_base = {
        .notifier_call          = notify_panic,
        .next                   = NULL,
        .priority               = 1
 };
 
+static struct tunable_atomic_notifier_block panic_exit_notifier = {
+       .nb                     = &panic_exit_notifier_base
+};
+
 static int add_notifier(void)
 {
-       atomic_notifier_chain_register(&panic_notifier_list,
-                       &panic_exit_notifier);
+       tunable_atomic_notifier_chain_register(&panic_notifier_list,
+                                       &panic_exit_notifier, "mconsole", NULL);
        return 0;
 }
 
diff -uprN linux-2.6.25.orig/arch/um/kernel/um_arch.c 
linux-2.6.25/arch/um/kernel/um_arch.c
--- linux-2.6.25.orig/arch/um/kernel/um_arch.c  2008-04-22 20:34:44.335563438 
+0900
+++ linux-2.6.25/arch/um/kernel/um_arch.c       2008-04-21 17:15:58.848643538 
+0900
@@ -234,12 +234,16 @@ static int panic_exit(struct notifier_bl
        return 0;
 }
 
-static struct notifier_block panic_exit_notifier = {
+static struct notifier_block panic_exit_notifier_base = {
        .notifier_call          = panic_exit,
        .next                   = NULL,
        .priority               = 0
 };
 
+static struct tunable_atomic_notifier_block panic_exit_notifier = {
+       .nb                     = &panic_exit_notifier_base
+};
+
 /* Set during early boot */
 unsigned long task_size;
 EXPORT_SYMBOL(task_size);
@@ -357,8 +361,8 @@ int __init linux_main(int argc, char **a
                printf("Kernel virtual memory size shrunk to %lu bytes\n",
                       virtmem_size);
 
-       atomic_notifier_chain_register(&panic_notifier_list,
-                                      &panic_exit_notifier);
+       tunable_atomic_notifier_chain_register(&panic_notifier_list,
+                                      &panic_exit_notifier, "um", NULL);
 
        uml_postsetup();
 
diff -uprN linux-2.6.25.orig/arch/x86/lguest/boot.c 
linux-2.6.25/arch/x86/lguest/boot.c
--- linux-2.6.25.orig/arch/x86/lguest/boot.c    2008-04-22 20:34:44.807567744 
+0900
+++ linux-2.6.25/arch/x86/lguest/boot.c 2008-04-21 17:15:58.848643538 +0900
@@ -820,17 +820,22 @@ static int lguest_panic(struct notifier_
        return NOTIFY_DONE;
 }
 
-static struct notifier_block paniced = {
+static struct notifier_block paniced_base = {
        .notifier_call = lguest_panic
 };
 
+static struct tunable_atomic_notifier_block paniced = {
+       .nb = = &paniced_base
+};
+
 /* Setting up memory is fairly easy. */
 static __init char *lguest_memory_setup(void)
 {
        /* We do this here and not earlier because lockcheck used to barf if we
         * did it before start_kernel().  I think we fixed that, so it'd be
         * nice to move it back to lguest_init.  Patch welcome... */
-       atomic_notifier_chain_register(&panic_notifier_list, &paniced);
+       tunable_atomic_notifier_chain_register(&panic_notifier_list, &paniced,
+                                                       "lguest", NULL);
 
        /* The Linux bootloader header contains an "e820" memory map: the
         * Launcher populated the first entry with our memory limit. */
diff -uprN linux-2.6.25.orig/arch/xtensa/platforms/iss/setup.c 
linux-2.6.25/arch/xtensa/platforms/iss/setup.c
--- linux-2.6.25.orig/arch/xtensa/platforms/iss/setup.c 2008-04-17 
11:49:44.000000000 +0900
+++ linux-2.6.25/arch/xtensa/platforms/iss/setup.c      2008-04-21 
17:15:58.848643538 +0900
@@ -98,13 +98,18 @@ iss_panic_event(struct notifier_block *t
        return NOTIFY_DONE;
 }
 
-static struct notifier_block iss_panic_block = {
+static struct notifier_block iss_panic_block_base = {
        iss_panic_event,
        NULL,
        0
 };
 
+static struct tunable_atomic_notifier_block iss_panic_block = {
+       .nb = &iss_panic_block_base
+};
+
 void __init platform_setup(char **p_cmdline)
 {
-       atomic_notifier_chain_register(&panic_notifier_list, &iss_panic_block);
+       tunable_atomic_notifier_chain_register(&panic_notifier_list,
+                                       &iss_panic_block, "iss_panic", NULL);
 }
diff -uprN linux-2.6.25.orig/drivers/char/ipmi/ipmi_msghandler.c 
linux-2.6.25/drivers/char/ipmi/ipmi_msghandler.c
--- linux-2.6.25.orig/drivers/char/ipmi/ipmi_msghandler.c       2008-04-22 
20:34:46.675556380 +0900
+++ linux-2.6.25/drivers/char/ipmi/ipmi_msghandler.c    2008-04-21 
17:15:58.972642550 +0900
@@ -4234,12 +4234,16 @@ static int panic_event(struct notifier_b
        return NOTIFY_DONE;
 }
 
-static struct notifier_block panic_block = {
+static struct notifier_block panic_block_base = {
        .notifier_call  = panic_event,
        .next           = NULL,
        .priority       = 200   /* priority: INT_MAX >= x >= 0 */
 };
 
+static struct tunable_atomic_notifier_block panic_block = {
+       .nb             = &panic_block_base
+};
+
 static int ipmi_init_msghandler(void)
 {
        int rv;
@@ -4269,7 +4273,8 @@ static int ipmi_init_msghandler(void)
        setup_timer(&ipmi_timer, ipmi_timeout, 0);
        mod_timer(&ipmi_timer, jiffies + IPMI_TIMEOUT_JIFFIES);
 
-       atomic_notifier_chain_register(&panic_notifier_list, &panic_block);
+       tunable_atomic_notifier_chain_register(&panic_notifier_list,
+                                       &panic_block, "ipmi_msghandler", NULL);
 
        initialized = 1;
 
@@ -4289,7 +4294,8 @@ static __exit void cleanup_ipmi(void)
        if (!initialized)
                return;
 
-       atomic_notifier_chain_unregister(&panic_notifier_list, &panic_block);
+       tunable_atomic_notifier_chain_unregister(&panic_notifier_list,
+                                                &panic_block);
 
        /*
         * This can't be called if any interfaces exist, so no worry
diff -uprN linux-2.6.25.orig/drivers/char/ipmi/ipmi_watchdog.c 
linux-2.6.25/drivers/char/ipmi/ipmi_watchdog.c
--- linux-2.6.25.orig/drivers/char/ipmi/ipmi_watchdog.c 2008-04-22 
20:34:46.691555965 +0900
+++ linux-2.6.25/drivers/char/ipmi/ipmi_watchdog.c      2008-04-21 
17:15:58.988649720 +0900
@@ -1157,12 +1157,15 @@ static int wdog_panic_handler(struct not
        return NOTIFY_OK;
 }
 
-static struct notifier_block wdog_panic_notifier = {
+static struct notifier_block wdog_panic_notifier_base = {
        .notifier_call  = wdog_panic_handler,
        .next           = NULL,
        .priority       = 150   /* priority: INT_MAX >= x >= 0 */
 };
 
+static struct tunable_atomic_notifier_block wdog_panic_notifier = {
+       .nb             = &wdog_panic_notifier_base
+};
 
 static void ipmi_new_smi(int if_num, struct device *device)
 {
@@ -1302,8 +1305,8 @@ static int __init ipmi_wdog_init(void)
        check_parms();
 
        register_reboot_notifier(&wdog_reboot_notifier);
-       atomic_notifier_chain_register(&panic_notifier_list,
-                       &wdog_panic_notifier);
+       tunable_atomic_notifier_chain_register(&panic_notifier_list,
+                               &wdog_panic_notifier, "ipmi_wdog", NULL);
 
        rv = ipmi_smi_watcher_register(&smi_watcher);
        if (rv) {
@@ -1311,8 +1314,8 @@ static int __init ipmi_wdog_init(void)
                if (nmi_handler_registered)
                        unregister_die_notifier(&ipmi_nmi_handler);
 #endif
-               atomic_notifier_chain_unregister(&panic_notifier_list,
-                                                &wdog_panic_notifier);
+               tunable_atomic_notifier_chain_unregister(&panic_notifier_list,
+                                                        &wdog_panic_notifier);
                unregister_reboot_notifier(&wdog_reboot_notifier);
                printk(KERN_WARNING PFX "can't register smi watcher\n");
                return rv;
@@ -1333,8 +1336,8 @@ static void __exit ipmi_wdog_exit(void)
                unregister_die_notifier(&ipmi_nmi_handler);
 #endif
 
-       atomic_notifier_chain_unregister(&panic_notifier_list,
-                                        &wdog_panic_notifier);
+       tunable_atomic_notifier_chain_unregister(&panic_notifier_list,
+                                                &wdog_panic_notifier);
        unregister_reboot_notifier(&wdog_reboot_notifier);
 }
 module_exit(ipmi_wdog_exit);
diff -uprN linux-2.6.25.orig/drivers/misc/ibmasm/heartbeat.c 
linux-2.6.25/drivers/misc/ibmasm/heartbeat.c
--- linux-2.6.25.orig/drivers/misc/ibmasm/heartbeat.c   2008-04-22 
20:34:50.719536142 +0900
+++ linux-2.6.25/drivers/misc/ibmasm/heartbeat.c        2008-04-21 
17:15:59.024649246 +0900
@@ -48,17 +48,22 @@ static int panic_happened(struct notifie
        return 0;
 }
 
-static struct notifier_block panic_notifier = { panic_happened, NULL, 1 };
+static struct notifier_block panic_notifier_base = { panic_happened, NULL, 1 };
+
+static struct tunable_atomic_notifier_block panic_notifier = { 
+       .nb = &panic_notifier_base
+};
 
 void ibmasm_register_panic_notifier(void)
 {
-       atomic_notifier_chain_register(&panic_notifier_list, &panic_notifier);
+       tunable_atomic_notifier_chain_register(&panic_notifier_list,
+                                              &panic_notifier, "ibmasm", NULL);
 }
 
 void ibmasm_unregister_panic_notifier(void)
 {
-       atomic_notifier_chain_unregister(&panic_notifier_list,
-                       &panic_notifier);
+       tunable_atomic_notifier_chain_unregister(&panic_notifier_list,
+                                                &panic_notifier);
 }
 
 
diff -uprN linux-2.6.25.orig/drivers/parisc/power.c 
linux-2.6.25/drivers/parisc/power.c
--- linux-2.6.25.orig/drivers/parisc/power.c    2008-04-17 11:49:44.000000000 
+0900
+++ linux-2.6.25/drivers/parisc/power.c 2008-04-21 17:15:59.036649566 +0900
@@ -189,11 +189,14 @@ static int parisc_panic_event(struct not
        return NOTIFY_DONE;
 }
 
-static struct notifier_block parisc_panic_block = {
+static struct notifier_block parisc_panic_block_base = {
        .notifier_call  = parisc_panic_event,
        .priority       = INT_MAX,
 };
 
+static struct tunable_atomic_notifier_block parisc_panic_block = {
+       .nb             = &parisc_panic_block_base
+};
 
 static int __init power_init(void)
 {
@@ -231,8 +234,8 @@ static int __init power_init(void)
        }
 
        /* Register a call for panic conditions. */
-       atomic_notifier_chain_register(&panic_notifier_list,
-                       &parisc_panic_block);
+       tunable_atomic_notifier_chain_register(&panic_notifier_list,
+                               &parisc_panic_block, "parisc_panic", NULL);
 
        return 0;
 }
@@ -241,8 +244,8 @@ static void __exit power_exit(void)
 {
        kthread_stop(power_task);
 
-       atomic_notifier_chain_unregister(&panic_notifier_list,
-                       &parisc_panic_block);
+       tunable_atomic_notifier_chain_unregister(&panic_notifier_list,
+                                                &parisc_panic_block);
 
        pdc_soft_power_button(0);
 }
diff -uprN linux-2.6.25.orig/kernel/softlockup.c 
linux-2.6.25/kernel/softlockup.c
--- linux-2.6.25.orig/kernel/softlockup.c       2008-04-22 20:35:03.247453824 
+0900
+++ linux-2.6.25/kernel/softlockup.c    2008-04-21 17:15:59.240648254 +0900
@@ -35,8 +35,12 @@ softlock_panic(struct notifier_block *th
        return NOTIFY_DONE;
 }
 
-static struct notifier_block panic_block = {
-       .notifier_call = softlock_panic,
+static struct notifier_block panic_block_base = {
+       .notifier_call = softlock_panic
+};
+
+static struct tunable_atomic_notifier_block panic_block = {
+       .nb             = &panic_block_base
 };
 
 /*
@@ -310,5 +314,6 @@ __init void spawn_softlockup_task(void)
        cpu_callback(&cpu_nfb, CPU_ONLINE, cpu);
        register_cpu_notifier(&cpu_nfb);
 
-       atomic_notifier_chain_register(&panic_notifier_list, &panic_block);
+       tunable_atomic_notifier_chain_register(&panic_notifier_list,
+                                       &panic_block, "softlockup", NULL);
 }

---------------------------
Use http://oss.sgi.com/ecartis to modify your settings or to unsubscribe.

Reply via email to