lkml.org 
[lkml]   [2002]   [Dec]   [18]   [last100]   RSS Feed
Views: [more markup]   [less markup]   [headers]   [forward]  
 
Messages in this thread
Patch in this message
/
Subject[PATCH] (2/5) improved notifier callback mechanism - register_panic_notifier
FromStephen Hemminger <>
Date18 Dec 2002 14:14:07 -0800
This patch cleans up the interface to panic_notifier_list by creating
register and unregister functions. This interface is used mainly on
platforms that I don't have ability to test.

# This is a BitKeeper generated patch for the following project:
# Project Name: Linux kernel tree
# This patch format is intended for GNU patch command version 2.5 or
higher.
# This patch includes the following deltas:
#	           ChangeSet	1.981   -> 1.982  
#	include/linux/kernel.h	1.29    -> 1.30   
#	      kernel/ksyms.c	1.170   -> 1.171  
#	arch/um/drivers/mconsole_kern.c	1.4     -> 1.5    
#	drivers/parisc/power.c	1.2     -> 1.3    
#	include/linux/notifier.h	1.4     -> 1.5    
#	arch/alpha/kernel/setup.c	1.23    -> 1.24   
#	arch/mips/sgi/kernel/reset.c	1.2     -> 1.3    
#	arch/parisc/kernel/pdc_chassis.c	1.2     -> 1.3    
#	arch/mips64/sgi-ip22/ip22-reset.c	1.2     -> 1.3    
#	arch/um/kernel/um_arch.c	1.4     -> 1.5    
#	      kernel/panic.c	1.8     -> 1.10   
#
# The following is the BitKeeper ChangeSet Log
# --------------------------------------------
# 02/12/17	shemminger@osdl.org	1.982
# Add register_panic_notifier
# --------------------------------------------
#
diff -Nru a/arch/alpha/kernel/setup.c b/arch/alpha/kernel/setup.c
--- a/arch/alpha/kernel/setup.c	Tue Dec 17 16:23:02 2002
+++ b/arch/alpha/kernel/setup.c	Tue Dec 17 16:23:02 2002
@@ -43,12 +43,10 @@
 #endif
 
 #include <linux/notifier.h>
-extern struct notifier_block *panic_notifier_list;
 static int alpha_panic_event(struct notifier_block *, unsigned long,
void *);
 static struct notifier_block alpha_panic_block = {
-	alpha_panic_event,
-        NULL,
-        INT_MAX /* try to do it first */
+	.notifier_call = alpha_panic_event,
+        .priority = INT_MAX, /* try to do it first */
 };
 
 #include <asm/uaccess.h>
@@ -507,7 +505,7 @@
 	boot_cpuid = hard_smp_processor_id();
 
 	/* Register a call for panic conditions. */
-	notifier_chain_register(&panic_notifier_list, &alpha_panic_block);
+	register_panic_notifier(&alpha_panic_block);
 
 #ifdef CONFIG_ALPHA_GENERIC
 	/* Assume that we've booted from SRM if we havn't booted from MILO.
diff -Nru a/arch/mips/sgi/kernel/reset.c b/arch/mips/sgi/kernel/reset.c
--- a/arch/mips/sgi/kernel/reset.c	Tue Dec 17 16:23:02 2002
+++ b/arch/mips/sgi/kernel/reset.c	Tue Dec 17 16:23:03 2002
@@ -217,9 +217,7 @@
 }
 
 static struct notifier_block panic_block = {
-	panic_event,
-	NULL,
-	0
+	.notifier_call = panic_event,
 };
 
 void indy_reboot_setup(void)
@@ -237,5 +235,5 @@
 	request_irq(SGI_PANEL_IRQ, panel_int, 0, "Front Panel", NULL);
 	init_timer(&blink_timer);
 	blink_timer.function = blink_timeout;
-	notifier_chain_register(&panic_notifier_list, &panic_block);
+	register_panic_notifier(&panic_block);
 }
diff -Nru a/arch/mips64/sgi-ip22/ip22-reset.c
b/arch/mips64/sgi-ip22/ip22-reset.c
--- a/arch/mips64/sgi-ip22/ip22-reset.c	Tue Dec 17 16:23:03 2002
+++ b/arch/mips64/sgi-ip22/ip22-reset.c	Tue Dec 17 16:23:03 2002
@@ -218,9 +218,7 @@
 }
 
 static struct notifier_block panic_block = {
-	panic_event,
-	NULL,
-	0
+	.notifier_call = panic_event,
 };
 
 void ip22_reboot_setup(void)
@@ -234,5 +232,5 @@
 	request_irq(9, panel_int, 0, "Front Panel", NULL);
 	init_timer(&blink_timer);
 	blink_timer.function = blink_timeout;
-	notifier_chain_register(&panic_notifier_list, &panic_block);
+	register_panic_notifier(&panic_block);
 }
diff -Nru a/arch/parisc/kernel/pdc_chassis.c
b/arch/parisc/kernel/pdc_chassis.c
--- a/arch/parisc/kernel/pdc_chassis.c	Tue Dec 17 16:23:03 2002
+++ b/arch/parisc/kernel/pdc_chassis.c	Tue Dec 17 16:23:03 2002
@@ -113,7 +113,7 @@
 	DPRINTK(KERN_DEBUG "%s: parisc_pdc_chassis_init()\n", __FILE__);
 
 	/* initialize panic notifier chain */
-	notifier_chain_register(&panic_notifier_list,
&pdc_chassis_panic_block);
+	register_panic_notifier(&pdc_chassis_panic_block);
 
 	/* initialize reboot notifier chain */
 	register_reboot_notifier(&pdc_chassis_reboot_block);
diff -Nru a/arch/um/drivers/mconsole_kern.c
b/arch/um/drivers/mconsole_kern.c
--- a/arch/um/drivers/mconsole_kern.c	Tue Dec 17 16:23:02 2002
+++ b/arch/um/drivers/mconsole_kern.c	Tue Dec 17 16:23:02 2002
@@ -362,14 +362,13 @@
 }
 
 static struct notifier_block panic_exit_notifier = {
-	notifier_call :		notify_panic,
-	next :			NULL,
-	priority :		1
+	.notifier_call =	notify_panic,
+	.priority =		1,
 };
 
 static int add_notifier(void)
 {
-	notifier_chain_register(&panic_notifier_list, &panic_exit_notifier);
+	register_panic_notifier(&panic_exit_notifier);
 	return(0);
 }
 
diff -Nru a/arch/um/kernel/um_arch.c b/arch/um/kernel/um_arch.c
--- a/arch/um/kernel/um_arch.c	Tue Dec 17 16:23:03 2002
+++ b/arch/um/kernel/um_arch.c	Tue Dec 17 16:23:03 2002
@@ -356,14 +356,12 @@
 }
 
 static struct notifier_block panic_exit_notifier = {
-	notifier_call :		panic_exit,
-	next :			NULL,
-	priority :		0
+	.notifier_call = panic_exit,
 };
 
 void __init setup_arch(char **cmdline_p)
 {
-	notifier_chain_register(&panic_notifier_list, &panic_exit_notifier);
+	register_panic_notifier(&panic_exit_notifier);
 	paging_init();
  	strcpy(command_line, saved_command_line);
  	*cmdline_p = command_line;
diff -Nru a/drivers/parisc/power.c b/drivers/parisc/power.c
--- a/drivers/parisc/power.c	Tue Dec 17 16:23:02 2002
+++ b/drivers/parisc/power.c	Tue Dec 17 16:23:02 2002
@@ -342,7 +342,7 @@
 	}
 
 	/* Register a call for panic conditions. */
-	notifier_chain_register(&panic_notifier_list, &parisc_panic_block);
+	register_panic_notifier(&parisc_panic_block);
 
 	power_create_procfs();
 	tasklet_enable(&power_tasklet);
@@ -356,7 +356,7 @@
 		return;
 
 	tasklet_disable(&power_tasklet);
-	notifier_chain_unregister(&panic_notifier_list, &parisc_panic_block);
+	register_panic_notifier(&parisc_panic_block);
 	power_remove_procfs();
 	power_tasklet.func = NULL;
 	pdc_soft_power_button(0);
diff -Nru a/include/linux/kernel.h b/include/linux/kernel.h
--- a/include/linux/kernel.h	Tue Dec 17 16:23:02 2002
+++ b/include/linux/kernel.h	Tue Dec 17 16:23:02 2002
@@ -54,7 +54,6 @@
 #define might_sleep() do {} while(0)
 #endif
 
-extern struct notifier_block *panic_notifier_list;
 NORET_TYPE void panic(const char * fmt, ...)
 	__attribute__ ((NORET_AND format (printf, 1, 2)));
 asmlinkage NORET_TYPE void do_exit(long error_code)
diff -Nru a/include/linux/notifier.h b/include/linux/notifier.h
--- a/include/linux/notifier.h	Tue Dec 17 16:23:02 2002
+++ b/include/linux/notifier.h	Tue Dec 17 16:23:02 2002
@@ -25,6 +25,9 @@
 extern int notifier_chain_unregister(struct notifier_block **nl, struct
notifier_block *n);
 extern int notifier_call_chain(struct notifier_block **n, unsigned long
val, void *v);
 
+extern int register_panic_notifier(struct notifier_block *);
+extern int unregister_panic_notifier(struct notifier_block *);
+
 #define NOTIFY_DONE		0x0000		/* Don't care */
 #define NOTIFY_OK		0x0001		/* Suits me */
 #define NOTIFY_STOP_MASK	0x8000		/* Don't call further */
diff -Nru a/kernel/ksyms.c b/kernel/ksyms.c
--- a/kernel/ksyms.c	Tue Dec 17 16:23:02 2002
+++ b/kernel/ksyms.c	Tue Dec 17 16:23:02 2002
@@ -55,6 +55,7 @@
 #include <linux/dnotify.h>
 #include <linux/mount.h>
 #include <linux/ptrace.h>
+#include <linux/notifier.h>
 #include <asm/checksum.h>
 
 #if defined(CONFIG_PROC_FS)
@@ -521,6 +522,8 @@
 EXPORT_SYMBOL(seq_lseek);
 EXPORT_SYMBOL(single_open);
 EXPORT_SYMBOL(single_release);
+EXPORT_SYMBOL(register_panic_notifier);
+EXPORT_SYMBOL(unregister_panic_notifier);
 
 /* Program loader interfaces */
 EXPORT_SYMBOL(setup_arg_pages);
diff -Nru a/kernel/panic.c b/kernel/panic.c
--- a/kernel/panic.c	Tue Dec 17 16:23:03 2002
+++ b/kernel/panic.c	Tue Dec 17 16:23:03 2002
@@ -21,7 +21,19 @@
 
 int panic_timeout;
 
-struct notifier_block *panic_notifier_list;
+static struct notifier_block *panic_notifier_list;
+
+int register_panic_notifier(struct notifier_block * nb)
+{
+	return notifier_chain_register(&panic_notifier_list, nb);
+}
+
+
+int unregister_panic_notifier(struct notifier_block * nb)
+{
+	return notifier_chain_unregister(&panic_notifier_list, nb);
+}
+
 
 static int __init panic_setup(char *str)
 {


-
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 11:31    [W:0.156 / U:0.340 seconds]
©2003-2008 Jasper Spaans