X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=include%2Fasm-x86_64%2Fkdebug.h;fp=include%2Fasm-x86_64%2Fkdebug.h;h=b9ed4c0c878322e3e24fea53e4c5ab3ac9b0a38e;hb=64ba3f394c830ec48a1c31b53dcae312c56f1604;hp=2b0c088e29578434530b45290792b7e66f5355a7;hpb=be1e6109ac94a859551f8e1774eb9a8469fe055c;p=linux-2.6.git diff --git a/include/asm-x86_64/kdebug.h b/include/asm-x86_64/kdebug.h index 2b0c088e2..b9ed4c0c8 100644 --- a/include/asm-x86_64/kdebug.h +++ b/include/asm-x86_64/kdebug.h @@ -5,22 +5,21 @@ struct pt_regs; -struct die_args { +struct die_args { struct pt_regs *regs; const char *str; - long err; + long err; int trapnr; int signr; -}; - -extern int register_die_notifier(struct notifier_block *); -extern int unregister_die_notifier(struct notifier_block *); -extern int register_page_fault_notifier(struct notifier_block *); -extern int unregister_page_fault_notifier(struct notifier_block *); -extern struct atomic_notifier_head die_chain; +}; +/* Note - you should never unregister because that can race with NMIs. + If you really want to do it first unregister - then synchronize_sched - then free. + */ +int register_die_notifier(struct notifier_block *nb); +extern struct notifier_block *die_chain; /* Grossly misnamed. */ -enum die_val { +enum die_val { DIE_OOPS = 1, DIE_INT3, DIE_DEBUG, @@ -34,8 +33,8 @@ enum die_val { DIE_CALL, DIE_NMI_IPI, DIE_PAGE_FAULT, -}; - +}; + static inline int notify_die(enum die_val val, const char *str, struct pt_regs *regs, long err, int trap, int sig) { @@ -46,10 +45,10 @@ static inline int notify_die(enum die_val val, const char *str, .trapnr = trap, .signr = sig }; - return atomic_notifier_call_chain(&die_chain, val, &args); + return notifier_call_chain(&die_chain, val, &args); } -extern void printk_address(unsigned long address); +extern int printk_address(unsigned long address); extern void die(const char *,struct pt_regs *,long); extern void __die(const char *,struct pt_regs *,long); extern void show_registers(struct pt_regs *regs);