add tunable_notifier function ,take2
Subsystems (14)
A message that is not in the archive (sent off-list or not yet received): [email protected]
PATCH 1/2 add tunable_notifier function ,take2
This patch adds new notifier function tunable_notifier_chain. Its base is atomic_notifier_chain.
Thanks,
---
---
diff -uprN linux-2.6.23.orig/include/linux/notifier.h linux-2.6.23/include/linux/notifier.h
include/linux/notifier.h +44 -0
@@ -13,6 +13,7 @@#include <linux/mutex.h> #include <linux/rwsem.h> #include <linux/srcu.h> +#include <linux/kobject.h> /* * Notifier chains are of four types:
@@ -53,6 +54,14 @@ struct notifier_block {int priority; }; +struct tunable_atomic_notifier_block { +struct notifier_block *nb; +struct tunable_atomic_notifier_head *head; +struct dentry *dir; +struct dentry *pri_dentry; +struct dentry *desc_dentry; +}; +struct atomic_notifier_head {spinlock_t lock;struct notifier_block *head;
@@ -63,6 +72,13 @@ struct blocking_notifier_head {struct notifier_block *head; }; +struct tunable_atomic_notifier_head { +spinlock_t lock; +struct notifier_block *head; +char *name; +struct dentry *dir; +}; +struct raw_notifier_head {struct notifier_block *head; };
@@ -81,6 +97,12 @@ struct srcu_notifier_head {init_rwsem (&(name)->rwsem); \ (name)->head =NULL ; \ } while (0) +#define TUNABLE_ATOMIC_INIT_NOTIFIER (val1, val2) do { \ + spin_lock_init(&(val1)->lock); \ + (val1)->head = NULL; \ + (val1)->name = val2; \ + (val1)->dir = NULL; \ + } while (0)#define RAW_INIT_NOTIFIER_HEAD (name) do { \ (name)->head = NULL; \ } while (0)
@@ -96,6 +118,11 @@ extern void srcu_init_notifier_head(stru#define BLOCKING_NOTIFIER_INIT (name) { \ .rwsem = __RWSEM_INITIALIZER((name).rwsem), \ .head = NULL } +#define TUNABLE_ATOMIC_NOTIFIER_INIT (val1, val2) { \ + .lock =__SPIN_LOCK_UNLOCKED(val1.lock), \ + .head = NULL, \ + .name = val2, \ + .dir = NULL }#define RAW_NOTIFIER_INIT (name) { \ .head = NULL }/* srcu_notifier_heads cannot be initialized statically */
@@ -106,6 +133,9 @@ extern void srcu_init_notifier_head(stru#define BLOCKING_NOTIFIER_HEAD (name) \ struct blocking_notifier_head name = \ BLOCKING_NOTIFIER_INIT(name) +#define TUNABLE_ATOMIC_NOTIFIER_HEAD (name, val) \ + struct tunable_atomic_notifier_head name = \ + TUNABLE_ATOMIC_NOTIFIER_INIT(name, val)#define RAW_NOTIFIER_HEAD (name) \ struct raw_notifier_head name = \ RAW_NOTIFIER_INIT(name)
@@ -116,6 +146,10 @@ extern int atomic_notifier_chain_registe struct notifier_block *nb);extern int blocking_notifier_chain_register (struct blocking_notifier_head *nh,struct notifier_block *nb); +extern int tunable_atomic_notifier_chain_register ( +struct tunable_atomic_notifier_head *nh, +struct tunable_atomic_notifier_block *nb, +char *name,char *desc);extern int raw_notifier_chain_register (struct raw_notifier_head *nh,struct notifier_block *nb); extern int srcu_notifier_chain_register(struct srcu_notifier_head *nh,
@@ -125,6 +159,9 @@ extern int atomic_notifier_chain_unregis struct notifier_block *nb);extern int blocking_notifier_chain_unregister (struct blocking_notifier_head *nh,struct notifier_block *nb); +extern int tunable_atomic_notifier_chain_unregister ( +struct tunable_atomic_notifier_head *nh, +struct tunable_atomic_notifier_block *nb);extern int raw_notifier_chain_unregister (struct raw_notifier_head *nh,struct notifier_block *nb); extern int srcu_notifier_chain_unregister(struct srcu_notifier_head *nh,
@@ -138,6 +175,13 @@ extern int blocking_notifier_call_chain( unsigned long val, void *v);extern int __blocking_notifier_call_chain (struct blocking_notifier_head *nh,unsigned long val,void *v,int nr_to_call,int *nr_calls); +extern int tunable_atomic_notifier_call_chain ( +struct tunable_atomic_notifier_head *nh, +unsigned long val,void *v); +extern int __tunable_atomic_notifier_call_chain ( +struct tunable_atomic_notifier_head *nh, +unsigned long val,void *v, +int nr_to_call,int *nr_calls);extern int raw_notifier_call_chain (struct raw_notifier_head *nh,unsigned long val,void *v); extern int __raw_notifier_call_chain(struct raw_notifier_head *nh,
kernel/sys.c +238 -0
250 lines not on this page · raw message
PATCH 1/2 add tunable_notifier function ,take2
In reply to a message not in the archiveThis patch adds new notifier function tunable_notifier_chain. Its base is atomic_notifier_chain.
Thanks,
---
---
include/linux/notifier.h +44 -0
@@ -13,6 +13,7 @@#include <linux/mutex.h> #include <linux/rwsem.h> #include <linux/srcu.h> +#include <linux/kobject.h> /* * Notifier chains are of four types:
@@ -53,6 +54,14 @@ struct notifier_block {int priority; }; +struct tunable_atomic_notifier_block { +struct notifier_block *nb; +struct tunable_atomic_notifier_head *head; +struct dentry *dir; +struct dentry *pri_dentry; +struct dentry *desc_dentry; +}; +struct atomic_notifier_head {spinlock_t lock;struct notifier_block *head;
@@ -63,6 +72,13 @@ struct blocking_notifier_head {struct notifier_block *head; }; +struct tunable_atomic_notifier_head { +spinlock_t lock; +struct notifier_block *head; +char *name; +struct dentry *dir; +}; +struct raw_notifier_head {struct notifier_block *head; };
@@ -81,6 +97,12 @@ struct srcu_notifier_head {init_rwsem (&(name)->rwsem); \ (name)->head =NULL ; \ } while (0) +#define TUNABLE_ATOMIC_INIT_NOTIFIER (val1, val2) do { \ + spin_lock_init(&(val1)->lock); \ + (val1)->head = NULL; \ + (val1)->name = val2; \ + (val1)->dir = NULL; \ + } while (0)#define RAW_INIT_NOTIFIER_HEAD (name) do { \ (name)->head = NULL; \ } while (0)
@@ -96,6 +118,11 @@ extern void srcu_init_notifier_head(stru#define BLOCKING_NOTIFIER_INIT (name) { \ .rwsem = __RWSEM_INITIALIZER((name).rwsem), \ .head = NULL } +#define TUNABLE_ATOMIC_NOTIFIER_INIT (val1, val2) { \ + .lock =__SPIN_LOCK_UNLOCKED(val1.lock), \ + .head = NULL, \ + .name = val2, \ + .dir = NULL }#define RAW_NOTIFIER_INIT (name) { \ .head = NULL }/* srcu_notifier_heads cannot be initialized statically */
@@ -106,6 +133,9 @@ extern void srcu_init_notifier_head(stru#define BLOCKING_NOTIFIER_HEAD (name) \ struct blocking_notifier_head name = \ BLOCKING_NOTIFIER_INIT(name) +#define TUNABLE_ATOMIC_NOTIFIER_HEAD (name, val) \ + struct tunable_atomic_notifier_head name = \ + TUNABLE_ATOMIC_NOTIFIER_INIT(name, val)#define RAW_NOTIFIER_HEAD (name) \ struct raw_notifier_head name = \ RAW_NOTIFIER_INIT(name)
@@ -116,6 +146,10 @@ extern int atomic_notifier_chain_registe struct notifier_block *nb);extern int blocking_notifier_chain_register (struct blocking_notifier_head *nh,struct notifier_block *nb); +extern int tunable_atomic_notifier_chain_register ( +struct tunable_atomic_notifier_head *nh, +struct tunable_atomic_notifier_block *nb, +char *name,char *desc);extern int raw_notifier_chain_register (struct raw_notifier_head *nh,struct notifier_block *nb); extern int srcu_notifier_chain_register(struct srcu_notifier_head *nh,
@@ -125,6 +159,9 @@ extern int atomic_notifier_chain_unregis struct notifier_block *nb);extern int blocking_notifier_chain_unregister (struct blocking_notifier_head *nh,struct notifier_block *nb); +extern int tunable_atomic_notifier_chain_unregister ( +struct tunable_atomic_notifier_head *nh, +struct tunable_atomic_notifier_block *nb);extern int raw_notifier_chain_unregister (struct raw_notifier_head *nh,struct notifier_block *nb); extern int srcu_notifier_chain_unregister(struct srcu_notifier_head *nh,
@@ -138,6 +175,13 @@ extern int blocking_notifier_call_chain( unsigned long val, void *v);extern int __blocking_notifier_call_chain (struct blocking_notifier_head *nh,unsigned long val,void *v,int nr_to_call,int *nr_calls); +extern int tunable_atomic_notifier_call_chain ( +struct tunable_atomic_notifier_head *nh, +unsigned long val,void *v); +extern int __tunable_atomic_notifier_call_chain ( +struct tunable_atomic_notifier_head *nh, +unsigned long val,void *v, +int nr_to_call,int *nr_calls);extern int raw_notifier_call_chain (struct raw_notifier_head *nh,unsigned long val,void *v); extern int __raw_notifier_call_chain(struct raw_notifier_head *nh,
kernel/sys.c +238 -0
250 lines not on this page · raw message
Quoted 22 lines · On Thu, 18 Oct 2007 17:53:00 +0900 Takenori Nagano wrote:
This patch adds new notifier function
tunable_notifier_chain. Its base isatomic_notifier_chain.Thanks,
---
Signed-off-by Takenori Nagano <[email protected]>---
diff -uprNlinux-2.6.23.orig/kernel/sys.clinux-2.6.23/kernel/sys.ckernel/sys.c +1
-0@@ -38,6 +38,7 @@#include <linux/syscalls.h> #include <linux/kprobes.h> #include <linux/user_namespace.h> +#include <linux/debugfs.h> #include <asm/uaccess.h> #include <asm/io.h>
kernel/sys.c int blocking_notifier_call_chain(struct · line 398
Quoted 5 lines
kernel/sys.c +3
-0@@ -393,6 +394,243 @@ int blocking_notifier_call_chain(structEXPORT_SYMBOL_GPL (blocking_notifier_call_chain); +/** +* tunable_atomic_notifier_chain_register +* - Add notifier to an tunable notifier chain
Function name & short description must be on one (long?) line. :(
Quoted 12 lines
kernel/sys.c +12
-0+* @nh: Pointer to head of the tunable notifier chain +* @n: New entry in notifier chain +* @name: Pointer to the name of the new notifier entry +* @desc: Pointer to the description of new entry +* +* Adds a notifier to an tunable notifier chain and makes control dir. +* +* Returns zero on success or %-ENODEV on failure. +*/ + +int tunable_atomic_notifier_chain_register( + struct tunable_atomic_notifier_head *nh,
kernel/sys.c int blocking_notifier_call_chain(struct · line 555
Quoted 10 lines
kernel/sys.c +9
-0+ struct tunable_atomic_notifier_block *n, char *name, char *desc) +{ +} + +EXPORT_SYMBOL_GPL (tunable_atomic_notifier_chain_register ); + +/** +* tunable_atomic_notifier_chain_unregister +* - Remove notifier from a tunable notifier chain
Ditto.
Quoted 10 lines
kernel/sys.c +10
-0+* @nh: Pointer to head of the tunable notifier chain +* @n: Entry to remove from notifier chain +* +* Removes a notifier from a tunable notifier chain. +* +* Retunrns zero on success or %-ENOENT on failure. +*/ + +int tunable_atomic_notifier_chain_unregister( + struct tunable_atomic_notifier_head *nh,
kernel/sys.c int blocking_notifier_call_chain(struct · line 590
Quoted 10 lines
kernel/sys.c +9
-0+ struct tunable_atomic_notifier_block *n) +{ +} + +EXPORT_SYMBOL_GPL (tunable_atomic_notifier_chain_unregister); + +/** +* __tunable_atomic_notifier_call_chain +* - Call functions in a tunable notifier chain
Same.
kernel/sys.c int blocking_notifier_call_chain(struct · line 594
Quoted 4 lines
kernel/sys.c +4
-0+* @nh: Pointer to head of the tunable notifier chain +* @val: Value passed unmodified to notifier function +* @v: Pointer passed unmodified to notifier function +* @nt_to_call: See the comment for notifier_call_chain
@nr_to_call: ...
Quoted 18 lines
kernel/sys.c +18
-0+* @nr_calls: See the comment for notifier_call_chain +* +* Calls each function in a notifier chain in turn. The functions +* run in an atomic context, so they must not block. +* This routine uses RCU to synchronize with changes to the chain. +* +* If the return value of the notifier can be and'ed +* with %NOTIFY_STOP_MASK then tunable_atomic_notifier_call_chain() +* will return immediately, with the return value of +* the notifier function which halted execution. +* Otherwise the return value is the return value +* of the last notifier function called. +*/ + +int __kprobes __tunable_atomic_notifier_call_chain ( +struct tunable_atomic_notifier_head *nh, +unsigned long val,void *v, +int nr_to_call,int *nr_calls)
kernel/sys.c int blocking_notifier_call_chain(struct · line 622
Quoted 10 lines
kernel/sys.c +10
-0+{ +int ret; + +rcu_read_lock (); + ret =notifier_call_chain (&nh->head, val, v, nr_to_call, nr_calls); +rcu_read_unlock (); +return ret; +} + +EXPORT_SYMBOL_GPL (__tunable_atomic_notifier_call_chain);
Blank line is usually omitted before EXPORT_SYMBOL....
---
~Randy
Quoted 26 lines · Randy Dunlap
Quoted 23 lines · On Thu, 18 Oct 2007 17:53:00 +0900 Takenori Nagano wrote:
This patch adds new notifier function
tunable_notifier_chain. Its base isatomic_notifier_chain.Thanks,
---
Signed-off-by Takenori Nagano <[email protected]>---
diff -uprNlinux-2.6.23.orig/kernel/sys.clinux-2.6.23/kernel/sys.ckernel/sys.c +1
-0@@ -38,6 +38,7 @@#include <linux/syscalls.h> #include <linux/kprobes.h> #include <linux/user_namespace.h> +#include <linux/debugfs.h> #include <asm/uaccess.h> #include <asm/io.h> @@ -393,6 +394,243 @@ int blocking_notifier_call_chain(structEXPORT_SYMBOL_GPL (blocking_notifier_call_chain);
Quoted 5 lines
kernel/sys.c int blocking_notifier_call_chain(struct · line 481
Quoted 3 lines
kernel/sys.c +3
-0+/** +* tunable_atomic_notifier_chain_register +* - Add notifier to an tunable notifier chain Function name & short description must be on one (long?) line. :(
OK. I'll fix next version.
Quoted 9 lines
Quoted 9 lines
kernel/sys.c +9
-0+ +int __kprobes __tunable_atomic_notifier_call_chain ( +struct tunable_atomic_notifier_head *nh, +unsigned long val,void *v, +int nr_to_call,int *nr_calls) +{ +int ret; + +rcu_read_lock ();
Quoted 8 lines
kernel/sys.c int blocking_notifier_call_chain(struct · line 622
Quoted 6 lines
kernel/sys.c +6
-0+ ret =notifier_call_chain (&nh->head, val, v, nr_to_call, nr_calls); +rcu_read_unlock (); +return ret; +} + +EXPORT_SYMBOL_GPL (__tunable_atomic_notifier_call_chain);Blank line is usually omitted before
EXPORT_SYMBOL....
OK. I'll fix, too.
Thanks,
Takenori
Quoted 4 lines
---
~Randy
PATCH 2/2 implement new notifier function to panic_notifier_list ,take2
In reply to a message not in the archiveThis patch implements new notifier function to panic_notifier_list. We can change the list of order by debugfs.
Thanks,
---
---
diff -uprN linux-2.6.23.orig/arch/alpha/kernel/setup.c linux-2.6.23/arch/alpha/kernel/setup.c
arch/alpha/kernel/setup.c +12 -4
@@ -45,14 +45,22 @@#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 = { + &alpha_panic_block_base, +NULL , +NULL , +NULL , +NULL +}; +#include <asm/uaccess.h> #include <asm/pgtable.h> #include <asm/system.h>
@@ -522,8 +530,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.23.orig/arch/arm/mach-omap1/board-voiceblue.c linux-2.6.23/arch/arm/mach-omap1/board-voiceblue.c
--- linux-2.6.23.orig/arch/arm/mach-omap1/board-voiceblue.c 2007-10-10
05:31:38.000000000 +0900
+++ linux-2.6.23/arch/arm/mach-omap1/board-voiceblue.c 2007-10-18
09:00:35.900000000 +0900
@@ -228,14 +228,23 @@ 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,
+ .head = NULL,
+ .dir = NULL,
+ .pri_dentry = NULL,
+ .desc_dentry = NULL
+};
+
static int __init voiceblue_setup(void)
{
/* Setup panic notifier */
- 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.23.orig/arch/mips/sgi-ip22/ip22-reset.c linux-2.6.23/arch/mips/sgi-ip22/ip22-reset.c
--- linux-2.6.23.orig/arch/mips/sgi-ip22/ip22-reset.c 2007-10-10
05:31:38.000000000 +0900
+++ linux-2.6.23/arch/mips/sgi-ip22/ip22-reset.c 2007-10-18 09:01:33.408000000 +0900
@@ -226,10 +226,18 @@ 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,
+ .head = NULL,
+ .dir = NULL,
+ .pri_dentry = NULL,
+ .desc_dentry = NULL
+};
+
static int __init reboot_setup(void)
{
_machine_restart = sgi_machine_restart;
@@ -239,7 +247,8 @@ static int __init reboot_setup(void)
request_irq(SGI_PANEL_IRQ, panel_int, 0, "Front Panel", NULL); 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.23.orig/arch/mips/sgi-ip32/ip32-reset.c linux-2.6.23/arch/mips/sgi-ip32/ip32-reset.c
--- linux-2.6.23.orig/arch/mips/sgi-ip32/ip32-reset.c 2007-10-10
05:31:38.000000000 +0900
+++ linux-2.6.23/arch/mips/sgi-ip32/ip32-reset.c 2007-10-18 09:02:20.496000000 +0900
@@ -175,10 +175,18 @@ 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,
+ .head = NULL,
+ .dir = NULL,
+ .pri_dentry = NULL,
+ .desc_dentry = NULL
+};
+
static __init int ip32_reboot_setup(void)
{
/* turn on the green led only */
@@ -193,7 +201,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.23.orig/arch/parisc/kernel/pdc_chassis.c linux-2.6.23/arch/parisc/kernel/pdc_chassis.c
--- linux-2.6.23.orig/arch/parisc/kernel/pdc_chassis.c 2007-10-10
05:31:38.000000000 +0900
+++ linux-2.6.23/arch/parisc/kernel/pdc_chassis.c 2007-10-18 08:56:54.052000000
+0900
@@ -101,11 +101,18 @@ 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,
+ .head = NULL,
+ .dir = NULL,
+ .pri_dentry = NULL,
+ .desc_dentry = NULL
+};
/**
* parisc_reboot_event() - Called by the reboot handler.
@@ -144,8 +151,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.23.orig/arch/powerpc/kernel/setup-common.c linux-2.6.23/arch/powerpc/kernel/setup-common.c
--- linux-2.6.23.orig/arch/powerpc/kernel/setup-common.c 2007-10-10
05:31:38.000000000 +0900
+++ linux-2.6.23/arch/powerpc/kernel/setup-common.c 2007-10-18
09:03:40.968000000 +0900
@@ -534,14 +534,23 @@ 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,
+ .head = NULL,
+ .dir = NULL,
+ .pri_dentry = NULL,
+ .desc_dentry = NULL
+};
+
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.23.orig/arch/ppc/platforms/prep_setup.c linux-2.6.23/arch/ppc/platforms/prep_setup.c
--- linux-2.6.23.orig/arch/ppc/platforms/prep_setup.c 2007-10-10
05:31:38.000000000 +0900
+++ linux-2.6.23/arch/ppc/platforms/prep_setup.c 2007-10-18 09:04:56.352000000 +0900
@@ -712,12 +712,20 @@ 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 = {
+ &ibm_statusled_block_base,
+ NULL,
+ NULL,
+ NULL,
+ NULL
+};
+
static void
ibm_statusled_progress(char *s, unsigned short hex)
{
@@ -732,8 +740,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.23.orig/arch/s390/kernel/ipl.c linux-2.6.23/arch/s390/kernel/ipl.c
arch/s390/kernel/ipl.c +11 -3
@@ -1036,11 +1036,19 @@ static int shutdown_on_panic_notify(strureturn NOTIFY_OK ; } -static struct notifier_block shutdown_on_panic_nb = { +static struct notifier_block shutdown_on_panic_nb_base = { .notifier_call = shutdown_on_panic_notify, .priority =SHUTDOWN_ON_PANIC_PRIO }; +static struct tunable_atomic_notifier_block shutdown_on_panic_nb = { + .nb = &shutdown_on_panic_nb_base, + .head =NULL , + .dir =NULL , + .pri_dentry =NULL , + .desc_dentry =NULL +}; +static int __init dump_init (void ) {int rc;
@@ -1075,8 +1083,8 @@ static int __init shutdown_actions_init(firmware_unregister (&shutdown_actions_subsys);return rc; } -atomic_notifier_chain_register (&panic_notifier_list, - &shutdown_on_panic_nb); +tunable_atomic_notifier_chain_register (&panic_notifier_list, + &shutdown_on_panic_nb,"s390_ipl" ,NULL );return 0 ; }
diff -uprN linux-2.6.23.orig/arch/s390/kernel/setup.c linux-2.6.23/arch/s390/kernel/setup.c
arch/s390/kernel/setup.c +11 -3
@@ -173,11 +173,19 @@ static int vmpanic_notify(struct notifie#define PANIC_PRI_VMPANIC 0 -static struct notifier_block vmpanic_nb = { +static struct notifier_block vmpanic_nb_base = { .notifier_call = vmpanic_notify, .priority =PANIC_PRI_VMPANIC }; +static struct tunable_atomic_notifier_block vmpanic_nb = { + .nb = &vmpanic_nb_base, + .head =NULL , + .dir =NULL , + .pri_dentry =NULL , + .desc_dentry =NULL +}; +static int __init vmpanic_setup (char *str) {static int register_done__initdata =0 ;
@@ -186,8 +194,8 @@ static int __init vmpanic_setup(char *st vmpanic_cmd[127 ] =0 ;if (!register_done) { register_done =1 ; -atomic_notifier_chain_register (&panic_notifier_list, - &vmpanic_nb); +tunable_atomic_notifier_chain_register (&panic_notifier_list, + &vmpanic_nb,"s390_panic" ,NULL ); }return 1 ; }
diff -uprN linux-2.6.23.orig/arch/sparc64/kernel/sstate.c linux-2.6.23/arch/sparc64/kernel/sstate.c
--- linux-2.6.23.orig/arch/sparc64/kernel/sstate.c 2007-10-10 05:31:38.000000000
+0900
+++ linux-2.6.23/arch/sparc64/kernel/sstate.c 2007-10-18 09:05:46.620000000 +0900
@@ -82,11 +82,19 @@ 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,
+ .head = NULL,
+ .dir = NULL,
+ .pri_dentry = NULL,
+ .desc_dentry = NULL
+};
+
void __init sun4v_sstate_init(void)
{
unsigned long major, minor;
@@ -99,6 +107,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.23.orig/arch/um/drivers/mconsole_kern.c linux-2.6.23/arch/um/drivers/mconsole_kern.c
--- linux-2.6.23.orig/arch/um/drivers/mconsole_kern.c 2007-10-10
05:31:38.000000000 +0900
+++ linux-2.6.23/arch/um/drivers/mconsole_kern.c 2007-10-18 09:06:25.144000000 +0900
@@ -928,16 +928,24 @@ 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,
+ .head = NULL,
+ .dir = NULL,
+ .pri_dentry = NULL,
+ .desc_dentry = NULL
+};
+
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.23.orig/arch/um/kernel/um_arch.c linux-2.6.23/arch/um/kernel/um_arch.c
arch/um/kernel/um_arch.c +11 -3
@@ -478,16 +478,24 @@ static int panic_exit(struct notifier_blreturn 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, + .head =NULL , + .dir =NULL , + .pri_dentry =NULL , + .desc_dentry =NULL +}; +void __init setup_arch (char **cmdline_p) { -atomic_notifier_chain_register (&panic_notifier_list, - &panic_exit_notifier); +tunable_atomic_notifier_chain_register (&panic_notifier_list, + &panic_exit_notifier,"um" ,NULL );paging_init ();strlcpy (boot_command_line, command_line,COMMAND_LINE_SIZE ); *cmdline_p = command_line;
diff -uprN linux-2.6.23.orig/arch/xtensa/platform-iss/setup.c linux-2.6.23/arch/xtensa/platform-iss/setup.c
--- linux-2.6.23.orig/arch/xtensa/platform-iss/setup.c 2007-10-10
05:31:38.000000000 +0900
+++ linux-2.6.23/arch/xtensa/platform-iss/setup.c 2007-10-18 09:07:25.468000000
+0900
@@ -98,13 +98,22 @@ 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 = {
+ &iss_panic_block_base,
+ NULL,
+ NULL,
+ NULL,
+ NULL
+};
+
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.23.orig/drivers/char/ipmi/ipmi_msghandler.c linux-2.6.23/drivers/char/ipmi/ipmi_msghandler.c
--- linux-2.6.23.orig/drivers/char/ipmi/ipmi_msghandler.c 2007-10-10
05:31:38.000000000 +0900
+++ linux-2.6.23/drivers/char/ipmi/ipmi_msghandler.c 2007-10-18
09:08:31.012000000 +0900
@@ -4070,12 +4070,20 @@ 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,
+ .head = NULL,
+ .dir = NULL,
+ .pri_dentry = NULL,
+ .desc_dentry = NULL
+};
+
static int ipmi_init_msghandler(void)
{
int rv;
@@ -4105,7 +4113,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;
@@ -4125,7 +4134,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 about
shutting down the interfaces. */
diff -uprN linux-2.6.23.orig/drivers/char/ipmi/ipmi_watchdog.c linux-2.6.23/drivers/char/ipmi/ipmi_watchdog.c
--- linux-2.6.23.orig/drivers/char/ipmi/ipmi_watchdog.c 2007-10-10
05:31:38.000000000 +0900
+++ linux-2.6.23/drivers/char/ipmi/ipmi_watchdog.c 2007-10-18 09:09:20.660000000
+0900
@@ -1055,12 +1055,19 @@ 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,
+ .head = NULL,
+ .dir = NULL,
+ .pri_dentry = NULL,
+ .desc_dentry = NULL
+};
static void ipmi_new_smi(int if_num, struct device *device) {
@@ -1212,8 +1219,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) {
@@ -1221,8 +1228,8 @@ static int __init ipmi_wdog_init(void)
if (preaction_val == WDOG_PRETIMEOUT_NMI)
release_nmi(&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;
@@ -1243,8 +1250,8 @@ static void __exit ipmi_wdog_exit(void)
release_nmi(&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.23.orig/drivers/lguest/lguest.c linux-2.6.23/drivers/lguest/lguest.c
drivers/lguest/lguest.c +11 -2
@@ -880,16 +880,25 @@ 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, + .head =NULL , + .dir =NULL , + .pri_dentry =NULL , + .desc_dentry =NULL +}; +/* Setting up memory is fairly easy. */ static __init char *lguest_memory_setup (void ) {/* We do this here and not earlier because lockcheck barfs if we do it * before start_kernel() */ -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.23.orig/drivers/misc/ibmasm/heartbeat.c linux-2.6.23/drivers/misc/ibmasm/heartbeat.c
--- linux-2.6.23.orig/drivers/misc/ibmasm/heartbeat.c 2007-10-10
05:31:38.000000000 +0900
+++ linux-2.6.23/drivers/misc/ibmasm/heartbeat.c 2007-10-18 09:11:07.696000000 +0900
@@ -48,17 +48,21 @@ 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 = { &panic_notifier_base,
+ NULL, NULL, NULL, NULL};
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.23.orig/drivers/parisc/power.c linux-2.6.23/drivers/parisc/power.c
drivers/parisc/power.c +12 -5
@@ -189,11 +189,18 @@ static int parisc_panic_event(struct notreturn 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, + .head =NULL , + .dir =NULL , + .pri_dentry =NULL , + .desc_dentry =NULL +};static int __init power_init (void ) {
@@ -231,8 +238,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 +248,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.23.orig/include/linux/kernel.h linux-2.6.23/include/linux/kernel.h
include/linux/kernel.h +1 -1
@@ -104,7 +104,7 @@ extern int cond_resched(void); (__x <0 ) ? -__x : __x; \ }) -extern struct atomic_notifier_head panic_notifier_list; +extern struct tunable_atomic_notifier_head panic_notifier_list;extern long (*panic_blink)(long time); NORET_TYPE void panic(const char * fmt, ...) __attribute__ ((NORET_AND format (printf, 1, 2))) __cold;
kernel/panic.c +2 -2
@@ -28,7 +28,7 @@ static DEFINE_SPINLOCK(pause_on_oops_locint panic_timeout; -ATOMIC_NOTIFIER_HEAD (panic_notifier_list); +TUNABLE_ATOMIC_NOTIFIER_HEAD (panic_notifier_list,"panic_notifier_list" );EXPORT_SYMBOL (panic_notifier_list);
@@ -96,7 +96,7 @@ NORET_TYPE void panic(const char * fmt,smp_send_stop ();#endif -atomic_notifier_call_chain (&panic_notifier_list,0 , buf); +tunable_atomic_notifier_call_chain (&panic_notifier_list,0 , buf);if (!panic_blink) panic_blink = no_blink;
kernel/softlockup.c +11 -2
@@ -31,10 +31,18 @@ softlock_panic(struct notifier_block *threturn NOTIFY_DONE ; } -static struct notifier_block panic_block = { +static struct notifier_block panic_block_base = { .notifier_call = softlock_panic, }; +static struct tunable_atomic_notifier_block panic_block = { + .nb = &panic_block_base, + .head =NULL , + .dir =NULL , + .pri_dentry =NULL , + .desc_dentry =NULL +}; +/* * Returns seconds, approximately. We don't need nanosecond * resolution, and we don't need to waste time with a big divide when
@@ -193,5 +201,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 ); }
PATCH 2/2 implement new notifier function to panic_notifier_list ,take2
In reply to a message not in the archiveThis patch implements new notifier function to panic_notifier_list. We can change the list of order by debugfs.
Thanks,
---
---
arch/alpha/kernel/setup.c +12 -4
@@ -45,14 +45,22 @@#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 = { + &alpha_panic_block_base, +NULL , +NULL , +NULL , +NULL +}; +#include <asm/uaccess.h> #include <asm/pgtable.h> #include <asm/system.h>
@@ -522,8 +530,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.
arch/arm/mach-omap1/board-voiceblue.c +11 -2
@@ -228,14 +228,23 @@ static int panic_event(struct notifier_breturn 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, + .head =NULL , + .dir =NULL , + .pri_dentry =NULL , + .desc_dentry =NULL +}; +static int __init voiceblue_setup (void ) {/* Setup panic notifier */ -notifier_chain_register (&panic_notifier_list, &panic_block); +tunable_atomic_notifier_chain_register (&panic_notifier_list, + &panic_block,"VoiceBlue" ,NULL );return 0 ; }
arch/mips/sgi-ip22/ip22-reset.c +11 -2
@@ -226,10 +226,18 @@ static int panic_event(struct notifier_breturn 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, + .head =NULL , + .dir =NULL , + .pri_dentry =NULL , + .desc_dentry =NULL +}; +static int __init reboot_setup (void ) { _machine_restart = sgi_machine_restart;
@@ -239,7 +247,8 @@ static int __init reboot_setup(void)request_irq (SGI_PANEL_IRQ , panel_int,0 ,"Front Panel" ,NULL );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 ; }
arch/mips/sgi-ip32/ip32-reset.c +11 -2
@@ -175,10 +175,18 @@ static int panic_event(struct notifier_breturn 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, + .head =NULL , + .dir =NULL , + .pri_dentry =NULL , + .desc_dentry =NULL +}; +static __init int ip32_reboot_setup (void ) {/* turn on the green led only */
@@ -193,7 +201,8 @@ static __init int ip32_reboot_setup(voidinit_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" );
arch/parisc/kernel/pdc_chassis.c +10 -3
@@ -101,11 +101,18 @@ 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, + .head =NULL , + .dir =NULL , + .pri_dentry =NULL , + .desc_dentry =NULL +};/** * parisc_reboot_event() - Called by the reboot handler.
@@ -144,8 +151,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);
arch/powerpc/kernel/setup-common.c +11 -2
@@ -534,14 +534,23 @@ static int ppc_panic_event(struct notifireturn 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, + .head =NULL , + .dir =NULL , + .pri_dentry =NULL , + .desc_dentry =NULL +}; +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
arch/ppc/platforms/prep_setup.c +12 -3
@@ -712,12 +712,20 @@ ibm_statusled_panic(struct notifier_blocreturn 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 = { + &ibm_statusled_block_base, +NULL , +NULL , +NULL , +NULL +}; +static void ibm_statusled_progress (char *s,unsigned short hex) {
@@ -732,8 +740,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
arch/s390/kernel/ipl.c +11 -3
@@ -1036,11 +1036,19 @@ static int shutdown_on_panic_notify(strureturn NOTIFY_OK ; } -static struct notifier_block shutdown_on_panic_nb = { +static struct notifier_block shutdown_on_panic_nb_base = { .notifier_call = shutdown_on_panic_notify, .priority =SHUTDOWN_ON_PANIC_PRIO }; +static struct tunable_atomic_notifier_block shutdown_on_panic_nb = { + .nb = &shutdown_on_panic_nb_base, + .head =NULL , + .dir =NULL , + .pri_dentry =NULL , + .desc_dentry =NULL +}; +static int __init dump_init (void ) {int rc;
@@ -1075,8 +1083,8 @@ static int __init shutdown_actions_init(firmware_unregister (&shutdown_actions_subsys);return rc; } -atomic_notifier_chain_register (&panic_notifier_list, - &shutdown_on_panic_nb); +tunable_atomic_notifier_chain_register (&panic_notifier_list, + &shutdown_on_panic_nb,"s390_ipl" ,NULL );return 0 ; }
arch/s390/kernel/setup.c +11 -3
@@ -173,11 +173,19 @@ static int vmpanic_notify(struct notifie#define PANIC_PRI_VMPANIC 0 -static struct notifier_block vmpanic_nb = { +static struct notifier_block vmpanic_nb_base = { .notifier_call = vmpanic_notify, .priority =PANIC_PRI_VMPANIC }; +static struct tunable_atomic_notifier_block vmpanic_nb = { + .nb = &vmpanic_nb_base, + .head =NULL , + .dir =NULL , + .pri_dentry =NULL , + .desc_dentry =NULL +}; +static int __init vmpanic_setup (char *str) {static int register_done__initdata =0 ;
@@ -186,8 +194,8 @@ static int __init vmpanic_setup(char *st vmpanic_cmd[127 ] =0 ;if (!register_done) { register_done =1 ; -atomic_notifier_chain_register (&panic_notifier_list, - &vmpanic_nb); +tunable_atomic_notifier_chain_register (&panic_notifier_list, + &vmpanic_nb,"s390_panic" ,NULL ); }return 1 ; }
arch/sparc64/kernel/sstate.c +11 -3
@@ -82,11 +82,19 @@ static int sstate_panic_event(struct notreturn 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, + .head =NULL , + .dir =NULL , + .pri_dentry =NULL , + .desc_dentry =NULL +}; +void __init sun4v_sstate_init (void ) {unsigned long major, minor;
@@ -99,6 +107,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 ); }
arch/um/drivers/mconsole_kern.c +11 -3
@@ -928,16 +928,24 @@ 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, + .head =NULL , + .dir =NULL , + .pri_dentry =NULL , + .desc_dentry =NULL +}; +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 ); }
arch/um/kernel/um_arch.c +11 -3
@@ -478,16 +478,24 @@ static int panic_exit(struct notifier_blreturn 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, + .head =NULL , + .dir =NULL , + .pri_dentry =NULL , + .desc_dentry =NULL +}; +void __init setup_arch (char **cmdline_p) { -atomic_notifier_chain_register (&panic_notifier_list, - &panic_exit_notifier); +tunable_atomic_notifier_chain_register (&panic_notifier_list, + &panic_exit_notifier,"um" ,NULL );paging_init ();strlcpy (boot_command_line, command_line,COMMAND_LINE_SIZE ); *cmdline_p = command_line;
arch/xtensa/platform-iss/setup.c +11 -2
@@ -98,13 +98,22 @@ iss_panic_event(struct notifier_block *treturn 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 = { + &iss_panic_block_base, +NULL , +NULL , +NULL , +NULL +}; +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 ); }
drivers/char/ipmi/ipmi_msghandler.c +13 -3
@@ -4070,12 +4070,20 @@ static int panic_event(struct notifier_breturn 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, + .head =NULL , + .dir =NULL , + .pri_dentry =NULL , + .desc_dentry =NULL +}; +static int ipmi_init_msghandler (void ) {int rv;
@@ -4105,7 +4113,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 ;
@@ -4125,7 +4134,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 about shutting down the interfaces. */
drivers/char/ipmi/ipmi_watchdog.c +14 -7
@@ -1055,12 +1055,19 @@ static int wdog_panic_handler(struct notreturn 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, + .head =NULL , + .dir =NULL , + .pri_dentry =NULL , + .desc_dentry =NULL +};static void ipmi_new_smi (int if_num,struct device *device) {
@@ -1212,8 +1219,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) {
@@ -1221,8 +1228,8 @@ static int __init ipmi_wdog_init(void)if (preaction_val ==WDOG_PRETIMEOUT_NMI )release_nmi (&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;
@@ -1243,8 +1250,8 @@ static void __exit ipmi_wdog_exit(void)release_nmi (&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);
drivers/lguest/lguest.c +11 -2
@@ -880,16 +880,25 @@ 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, + .head =NULL , + .dir =NULL , + .pri_dentry =NULL , + .desc_dentry =NULL +}; +/* Setting up memory is fairly easy. */ static __init char *lguest_memory_setup (void ) {/* We do this here and not earlier because lockcheck barfs if we do it * before start_kernel() */ -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. */
drivers/misc/ibmasm/heartbeat.c +8 -4
@@ -48,17 +48,21 @@ static int panic_happened(struct notifiereturn 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 = { &panic_notifier_base, +NULL ,NULL ,NULL ,NULL };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); }
drivers/parisc/power.c +12 -5
@@ -189,11 +189,18 @@ static int parisc_panic_event(struct notreturn 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, + .head =NULL , + .dir =NULL , + .pri_dentry =NULL , + .desc_dentry =NULL +};static int __init power_init (void ) {
@@ -231,8 +238,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 +248,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 ); }
include/linux/kernel.h +1 -1
@@ -104,7 +104,7 @@ extern int cond_resched(void); (__x <0 ) ? -__x : __x; \ }) -extern struct atomic_notifier_head panic_notifier_list; +extern struct tunable_atomic_notifier_head panic_notifier_list;extern long (*panic_blink)(long time); NORET_TYPE void panic(const char * fmt, ...) __attribute__ ((NORET_AND format (printf, 1, 2))) __cold;
kernel/panic.c +2 -2
@@ -28,7 +28,7 @@ static DEFINE_SPINLOCK(pause_on_oops_locint panic_timeout; -ATOMIC_NOTIFIER_HEAD (panic_notifier_list); +TUNABLE_ATOMIC_NOTIFIER_HEAD (panic_notifier_list,"panic_notifier_list" );EXPORT_SYMBOL (panic_notifier_list);
@@ -96,7 +96,7 @@ NORET_TYPE void panic(const char * fmt,smp_send_stop ();#endif -atomic_notifier_call_chain (&panic_notifier_list,0 , buf); +tunable_atomic_notifier_call_chain (&panic_notifier_list,0 , buf);if (!panic_blink) panic_blink = no_blink;
kernel/softlockup.c +11 -2
@@ -31,10 +31,18 @@ softlock_panic(struct notifier_block *threturn NOTIFY_DONE ; } -static struct notifier_block panic_block = { +static struct notifier_block panic_block_base = { .notifier_call = softlock_panic, }; +static struct tunable_atomic_notifier_block panic_block = { + .nb = &panic_block_base, + .head =NULL , + .dir =NULL , + .pri_dentry =NULL , + .desc_dentry =NULL +}; +/* * Returns seconds, approximately. We don't need nanosecond * resolution, and we don't need to waste time with a big divide when
@@ -193,5 +201,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 ); }
Re: [PATCH 2/2] implement new notifier function to panic_notifier_list ,take2
Quoted 2 lines · On Thu, 18 Oct 2007 17:53:03 +0900 Takenori Nagano wrote:
This patch implements new notifier function to
panic_notifier_list. We can change the list of order by debugfs.
Should be sysfs IMO. debugfs isn't (should not be) required.
Quoted 16 lines
Thanks,
---
Signed-off-by Takenori Nagano <[email protected]>---
diff -uprNlinux-2.6.23.orig/arch/alpha/kernel/setup.clinux-2.6.23/arch/alpha/kernel/setup.carch/alpha/kernel/setup.c +1
-1@@ -45,14 +45,22 @@#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;
arch/alpha/kernel/setup.c line 57
Quoted 10 lines
arch/alpha/kernel/setup.c +3
-1static 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 = { + &alpha_panic_block_base,
Use C99-style initializer. and NULLs aren't needed.
Quoted 18 lines
arch/alpha/kernel/setup.c +6
-0+NULL , +NULL , +NULL , + NULL +}; +#include <asm/uaccess.h> #include <asm/pgtable.h> #include <asm/system.h> diff -uprN
linux-2.6.23.orig/arch/arm/mach-omap1/board-voiceblue.clinux-2.6.23/arch/arm/mach-omap1/board-voiceblue.carch/arm/mach-omap1/board-voiceblue.c +0
-1@@ -228,14 +228,23 @@ static int panic_event(struct notifier_breturn NOTIFY_DONE ; } -static struct notifier_block panic_block = {
arch/arm/mach-omap1/board-voiceblue.c static int panic_event(struct notifier_b · line 240
Quoted 10 lines
arch/arm/mach-omap1/board-voiceblue.c +7
-0+static struct notifier_block panic_block_base = { .notifier_call = panic_event, }; +static struct tunable_atomic_notifier_block panic_block = { + .nb = &panic_block_base, + .head =NULL , + .dir =NULL , + .pri_dentry =NULL , + .desc_dentry =NULL
Drop the NULLs.
Quoted 19 lines
arch/arm/mach-omap1/board-voiceblue.c +4
-1+}; +static int __init voiceblue_setup (void ) {/* Setup panic notifier */ -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.23.orig/arch/mips/sgi-ip22/ip22-reset.clinux-2.6.23/arch/mips/sgi-ip22/ip22-reset.carch/mips/sgi-ip22/ip22-reset.c +0
-1@@ -226,10 +226,18 @@ static int panic_event(struct notifier_breturn NOTIFY_DONE ; } -static struct notifier_block panic_block = {
arch/mips/sgi-ip22/ip22-reset.c static int panic_event(struct notifier_b · line 238
Quoted 10 lines
arch/mips/sgi-ip22/ip22-reset.c +7
-0+static struct notifier_block panic_block_base = { .notifier_call = panic_event, }; +static struct tunable_atomic_notifier_block panic_block = { + .nb = &panic_block_base, + .head =NULL , + .dir =NULL , + .pri_dentry =NULL , + .desc_dentry =NULL
Ditto.
Quoted 14 lines
arch/mips/sgi-ip22/ip22-reset.c +2
-0+}; +static int __init reboot_setup (void ) { _machine_restart = sgi_machine_restart;diff -uprN
linux-2.6.23.orig/arch/mips/sgi-ip32/ip32-reset.clinux-2.6.23/arch/mips/sgi-ip32/ip32-reset.carch/mips/sgi-ip32/ip32-reset.c +0
-1@@ -175,10 +175,18 @@ static int panic_event(struct notifier_breturn NOTIFY_DONE ; } -static struct notifier_block panic_block = {
arch/mips/sgi-ip32/ip32-reset.c static int panic_event(struct notifier_b · line 187
Quoted 10 lines
arch/mips/sgi-ip32/ip32-reset.c +7
-0+static struct notifier_block panic_block_base = { .notifier_call = panic_event, }; +static struct tunable_atomic_notifier_block panic_block = { + .nb = &panic_block_base, + .head =NULL , + .dir =NULL , + .pri_dentry =NULL , + .desc_dentry =NULL
Ditto.
Quoted 15 lines
arch/mips/sgi-ip32/ip32-reset.c +2
-0+}; +static __init int ip32_reboot_setup (void ) {/* turn on the green led only */ diff -uprN
linux-2.6.23.orig/arch/parisc/kernel/pdc_chassis.clinux-2.6.23/arch/parisc/kernel/pdc_chassis.carch/parisc/kernel/pdc_chassis.c +1
-1@@ -101,11 +101,18 @@ static int pdc_chassis_panic_event(struc } -static struct notifier_block pdc_chassis_panic_block = { +static struct notifier_block pdc_chassis_panic_block_base = {
arch/parisc/kernel/pdc_chassis.c static int pdc_chassis_panic_event(struc · line 114
Quoted 10 lines
arch/parisc/kernel/pdc_chassis.c +6
-0.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, + .head =NULL , + .dir =NULL , + .pri_dentry =NULL , + .desc_dentry =NULL
Ditto... (I'll skip mentioning the rest of these.)
arch/parisc/kernel/pdc_chassis.c static int pdc_chassis_panic_event(struc · line 118
Quoted 4 lines
arch/parisc/kernel/pdc_chassis.c +1
-0+};/** * parisc_reboot_event() - Called by the reboot handler.
---
~Randy
Re: [PATCH 2/2] implement new notifier function to panic_notifier_list ,take2
Quoted 6 lines · Randy Dunlap
Quoted 2 lines · On Thu, 18 Oct 2007 17:53:03 +0900 Takenori Nagano wrote:
This patch implements new notifier function to
panic_notifier_list. We can change the list of order by debugfs.Should be sysfs IMO. debugfs isn't (should not be) required.
OK. We try to find an appropriate place.
http://lkml.org/lkml/2007/10/24/54
Quoted 24 lines
Quoted 24 lines
Thanks,
---
Signed-off-by Takenori Nagano <[email protected]>---
diff -uprNlinux-2.6.23.orig/arch/alpha/kernel/setup.clinux-2.6.23/arch/alpha/kernel/setup.carch/alpha/kernel/setup.c +2
-2@@ -45,14 +45,22 @@#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 */ };
Quoted 4 lines
arch/alpha/kernel/setup.c line 57
Quoted 2 lines
arch/alpha/kernel/setup.c +2
-0+static struct tunable_atomic_notifier_block alpha_panic_block = { + &alpha_panic_block_base,Use C99-style initializer. and NULLs aren't needed.
OK. I'll fix.
Thanks,
Takenori
Quoted 129 lines
Quoted 19 lines
arch/alpha/kernel/setup.c +6
-0+NULL , +NULL , +NULL , + NULL +}; +#include <asm/uaccess.h> #include <asm/pgtable.h> #include <asm/system.h> diff -uprN
linux-2.6.23.orig/arch/arm/mach-omap1/board-voiceblue.clinux-2.6.23/arch/arm/mach-omap1/board-voiceblue.carch/arm/mach-omap1/board-voiceblue.c +0
-1@@ -228,14 +228,23 @@ static int panic_event(struct notifier_breturn NOTIFY_DONE ; } -static struct notifier_block panic_block = {arch/arm/mach-omap1/board-voiceblue.c static int panic_event(struct notifier_b · line 240
Quoted 10 lines
arch/arm/mach-omap1/board-voiceblue.c +7
-0+static struct notifier_block panic_block_base = { .notifier_call = panic_event, }; +static struct tunable_atomic_notifier_block panic_block = { + .nb = &panic_block_base, + .head =NULL , + .dir =NULL , + .pri_dentry =NULL , + .desc_dentry =NULL Drop the NULLs.
Quoted 19 lines
arch/arm/mach-omap1/board-voiceblue.c +4
-1+}; +static int __init voiceblue_setup (void ) {/* Setup panic notifier */ -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.23.orig/arch/mips/sgi-ip22/ip22-reset.clinux-2.6.23/arch/mips/sgi-ip22/ip22-reset.carch/mips/sgi-ip22/ip22-reset.c +0
-1@@ -226,10 +226,18 @@ static int panic_event(struct notifier_breturn NOTIFY_DONE ; } -static struct notifier_block panic_block = {arch/mips/sgi-ip22/ip22-reset.c static int panic_event(struct notifier_b · line 238
Quoted 10 lines
arch/mips/sgi-ip22/ip22-reset.c +7
-0+static struct notifier_block panic_block_base = { .notifier_call = panic_event, }; +static struct tunable_atomic_notifier_block panic_block = { + .nb = &panic_block_base, + .head =NULL , + .dir =NULL , + .pri_dentry =NULL , + .desc_dentry =NULL Ditto.
Quoted 14 lines
arch/mips/sgi-ip22/ip22-reset.c +2
-0+}; +static int __init reboot_setup (void ) { _machine_restart = sgi_machine_restart;diff -uprN
linux-2.6.23.orig/arch/mips/sgi-ip32/ip32-reset.clinux-2.6.23/arch/mips/sgi-ip32/ip32-reset.carch/mips/sgi-ip32/ip32-reset.c +0
-1@@ -175,10 +175,18 @@ static int panic_event(struct notifier_breturn NOTIFY_DONE ; } -static struct notifier_block panic_block = {arch/mips/sgi-ip32/ip32-reset.c static int panic_event(struct notifier_b · line 187
Quoted 10 lines
arch/mips/sgi-ip32/ip32-reset.c +7
-0+static struct notifier_block panic_block_base = { .notifier_call = panic_event, }; +static struct tunable_atomic_notifier_block panic_block = { + .nb = &panic_block_base, + .head =NULL , + .dir =NULL , + .pri_dentry =NULL , + .desc_dentry =NULL Ditto.
Quoted 15 lines
arch/mips/sgi-ip32/ip32-reset.c +2
-0+}; +static __init int ip32_reboot_setup (void ) {/* turn on the green led only */ diff -uprN
linux-2.6.23.orig/arch/parisc/kernel/pdc_chassis.clinux-2.6.23/arch/parisc/kernel/pdc_chassis.carch/parisc/kernel/pdc_chassis.c +1
-1@@ -101,11 +101,18 @@ static int pdc_chassis_panic_event(struc } -static struct notifier_block pdc_chassis_panic_block = { +static struct notifier_block pdc_chassis_panic_block_base = {arch/parisc/kernel/pdc_chassis.c static int pdc_chassis_panic_event(struc · line 114
Quoted 10 lines
arch/parisc/kernel/pdc_chassis.c +6
-0.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, + .head =NULL , + .dir =NULL , + .pri_dentry =NULL , + .desc_dentry =NULL Ditto... (I'll skip mentioning the rest of these.)
arch/parisc/kernel/pdc_chassis.c static int pdc_chassis_panic_event(struc · line 118
Quoted 4 lines
arch/parisc/kernel/pdc_chassis.c +1
-0+};/** * parisc_reboot_event() - Called by the reboot handler. ---
~Randy
Signature · 9 lines
+=-=+=-=+=-=+=-=+=-=+=-=+=-=+=-=+=-=+=-=+
NEC コンピュータソフトウェア事業本部
OSSプラットフォーム開発本部
永野 武則 (Takenori Nagano)
TEL:8-23-57270(MyLine) 042-333-5383(外線)
e-mail:[email protected]
+=-=+=-=+=-=+=-=+=-=+=-=+=-=+=-=+=-=+=-=+