| Christoph Hellwig | 1eeb66a | 2007-05-08 00:27:03 -0700 | [diff] [blame] | 1 |  | 
|  | 2 | #include <linux/module.h> | 
|  | 3 | #include <linux/notifier.h> | 
|  | 4 | #include <linux/vmalloc.h> | 
|  | 5 | #include <linux/kdebug.h> | 
|  | 6 |  | 
|  | 7 |  | 
|  | 8 | static ATOMIC_NOTIFIER_HEAD(die_chain); | 
|  | 9 |  | 
|  | 10 | int notify_die(enum die_val val, const char *str, | 
|  | 11 | struct pt_regs *regs, long err, int trap, int sig) | 
|  | 12 | { | 
|  | 13 | struct die_args args = { | 
|  | 14 | .regs		= regs, | 
|  | 15 | .str		= str, | 
|  | 16 | .err		= err, | 
|  | 17 | .trapnr		= trap, | 
|  | 18 | .signr		= sig, | 
|  | 19 |  | 
|  | 20 | }; | 
|  | 21 |  | 
|  | 22 | return atomic_notifier_call_chain(&die_chain, val, &args); | 
|  | 23 | } | 
|  | 24 |  | 
|  | 25 | int register_die_notifier(struct notifier_block *nb) | 
|  | 26 | { | 
|  | 27 | vmalloc_sync_all(); | 
|  | 28 | return atomic_notifier_chain_register(&die_chain, nb); | 
|  | 29 | } | 
|  | 30 | EXPORT_SYMBOL_GPL(register_die_notifier); | 
|  | 31 |  | 
|  | 32 | int unregister_die_notifier(struct notifier_block *nb) | 
|  | 33 | { | 
|  | 34 | return atomic_notifier_chain_unregister(&die_chain, nb); | 
|  | 35 | } | 
|  | 36 | EXPORT_SYMBOL_GPL(unregister_die_notifier); | 
|  | 37 |  | 
|  | 38 |  |