kdebug.h 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. #ifndef _X86_64_KDEBUG_H
  2. #define _X86_64_KDEBUG_H 1
  3. #include <linux/notifier.h>
  4. struct pt_regs;
  5. struct die_args {
  6. struct pt_regs *regs;
  7. const char *str;
  8. long err;
  9. int trapnr;
  10. int signr;
  11. };
  12. /* Note - you should never unregister because that can race with NMIs.
  13. If you really want to do it first unregister - then synchronize_sched - then free.
  14. */
  15. int register_die_notifier(struct notifier_block *nb);
  16. extern struct notifier_block *die_chain;
  17. /* Grossly misnamed. */
  18. enum die_val {
  19. DIE_OOPS = 1,
  20. DIE_INT3,
  21. DIE_DEBUG,
  22. DIE_PANIC,
  23. DIE_NMI,
  24. DIE_DIE,
  25. DIE_NMIWATCHDOG,
  26. DIE_KERNELDEBUG,
  27. DIE_TRAP,
  28. DIE_GPF,
  29. DIE_CALL,
  30. DIE_NMI_IPI,
  31. DIE_PAGE_FAULT,
  32. };
  33. static inline int notify_die(enum die_val val, const char *str,
  34. struct pt_regs *regs, long err, int trap, int sig)
  35. {
  36. struct die_args args = {
  37. .regs = regs,
  38. .str = str,
  39. .err = err,
  40. .trapnr = trap,
  41. .signr = sig
  42. };
  43. return notifier_call_chain(&die_chain, val, &args);
  44. }
  45. extern int printk_address(unsigned long address);
  46. extern void die(const char *,struct pt_regs *,long);
  47. extern void __die(const char *,struct pt_regs *,long);
  48. extern void show_registers(struct pt_regs *regs);
  49. extern void dump_pagetable(unsigned long);
  50. extern unsigned long oops_begin(void);
  51. extern void oops_end(unsigned long);
  52. #endif