Merge git://git.kernel.org/pub/scm/linux/kernel/git/holtmann/bluetooth-2.6
[sfrench/cifs-2.6.git] / include / asm-s390 / kdebug.h
1 #ifndef _S390_KDEBUG_H
2 #define _S390_KDEBUG_H
3
4 /*
5  * Feb 2006 Ported to s390 <grundym@us.ibm.com>
6  */
7 #include <linux/notifier.h>
8
9 struct pt_regs;
10
11 struct die_args {
12         struct pt_regs *regs;
13         const char *str;
14         long err;
15         int trapnr;
16         int signr;
17 };
18
19 /* Note - you should never unregister because that can race with NMIs.
20  * If you really want to do it first unregister - then synchronize_sched
21  *  - then free.
22  */
23 extern int register_die_notifier(struct notifier_block *);
24 extern int unregister_die_notifier(struct notifier_block *);
25
26 /*
27  * These are only here because kprobes.c wants them to implement a
28  * blatant layering violation. Will hopefully go away soon once all
29  * architectures are updated.
30  */
31 static inline int register_page_fault_notifier(struct notifier_block *nb)
32 {
33         return 0;
34 }
35 static inline int unregister_page_fault_notifier(struct notifier_block *nb)
36 {
37         return 0;
38 }
39
40 extern struct atomic_notifier_head s390die_chain;
41
42 enum die_val {
43         DIE_OOPS = 1,
44         DIE_BPT,
45         DIE_SSTEP,
46         DIE_PANIC,
47         DIE_NMI,
48         DIE_DIE,
49         DIE_NMIWATCHDOG,
50         DIE_KERNELDEBUG,
51         DIE_TRAP,
52         DIE_GPF,
53         DIE_CALL,
54         DIE_NMI_IPI,
55 };
56
57 static inline int notify_die(enum die_val val, const char *str,
58                         struct pt_regs *regs, long err, int trap, int sig)
59 {
60         struct die_args args = {
61                 .regs = regs,
62                 .str = str,
63                 .err = err,
64                 .trapnr = trap,
65                 .signr = sig
66         };
67         return atomic_notifier_call_chain(&s390die_chain, val, &args);
68 }
69
70 extern void die(const char *, struct pt_regs *, long);
71
72 #endif