#include <asm/system.h>
  #include <asm/uaccess.h>
  #include <asm/tlbflush.h>
 -#include <asm/kdebug.h>
  #include <asm/siginfo.h>
  
- #ifdef CONFIG_KPROBES
- ATOMIC_NOTIFIER_HEAD(notify_page_fault_chain);
  
- /* Hook to register for page fault notifications */
- int register_page_fault_notifier(struct notifier_block *nb)
- {
-       return atomic_notifier_chain_register(¬ify_page_fault_chain, nb);
- }
- 
- int unregister_page_fault_notifier(struct notifier_block *nb)
+ #ifdef CONFIG_KPROBES
+ static inline int notify_page_fault(struct pt_regs *regs)
  {
-       return atomic_notifier_chain_unregister(¬ify_page_fault_chain, nb);
- }
+       int ret = 0;
+ 
+       /* kprobe_running() needs smp_processor_id() */
+       if (!user_mode(regs)) {
+               preempt_disable();
+               if (kprobe_running() && kprobe_fault_handler(regs, 11))
+                       ret = 1;
+               preempt_enable();
+       }
  
- static inline int notify_page_fault(enum die_val val, const char *str,
-                       struct pt_regs *regs, long err, int trap, int sig)
- {
-       struct die_args args = {
-               .regs = regs,
-               .str = str,
-               .err = err,
-               .trapnr = trap,
-               .signr = sig
-       };
-       return atomic_notifier_call_chain(¬ify_page_fault_chain, val, &args);
+       return ret;
  }
  #else
- static inline int notify_page_fault(enum die_val val, const char *str,
-                       struct pt_regs *regs, long err, int trap, int sig)
+ static inline int notify_page_fault(struct pt_regs *regs)
  {
-       return NOTIFY_DONE;
+       return 0;
  }
  #endif
  
 
  
  #include <linux/notifier.h>
  
- extern int register_page_fault_notifier(struct notifier_block *);
- extern int unregister_page_fault_notifier(struct notifier_block *);
 -struct pt_regs;
 -
 -struct die_args {
 -      struct pt_regs *regs;
 -      const char *str;
 -      long err;
 -      int trapnr;
 -      int signr;
 -};
 -
 -extern int register_die_notifier(struct notifier_block *);
 -extern int unregister_die_notifier(struct notifier_block *);
 -
+ /*
+  * These are only here because kprobes.c wants them to implement a
+  * blatant layering violation.  Will hopefully go away soon once all
+  * architectures are updated.
+  */
+ static inline int register_page_fault_notifier(struct notifier_block *nb)
+ {
+       return 0;
+ }
+ static inline int unregister_page_fault_notifier(struct notifier_block *nb)
+ {
+       return 0;
+ }
  extern struct atomic_notifier_head powerpc_die_chain;
  
  /* Grossly misnamed. */
        DIE_DABR_MATCH,
        DIE_BPT,
        DIE_SSTEP,
-       DIE_PAGE_FAULT,
  };
  
 -static inline int notify_die(enum die_val val,char *str,struct pt_regs *regs,long err,int trap, int sig)
 -{
 -      struct die_args args = { .regs=regs, .str=str, .err=err, .trapnr=trap,.signr=sig };
 -      return atomic_notifier_call_chain(&powerpc_die_chain, val, &args);
 -}
 -
  #endif /* __KERNEL__ */
  #endif /* _ASM_POWERPC_KDEBUG_H */