linux 2.6.16.38 w/ vs2.0.3-rc1
[linux-2.6.git] / include / asm-x86_64 / kdebug.h
index 2b0c088..b9ed4c0 100644 (file)
@@ -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);