Merge branch 'for-linus' of master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband
[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 extern int register_page_fault_notifier(struct notifier_block *);
26 extern int unregister_page_fault_notifier(struct notifier_block *);
27 extern struct atomic_notifier_head s390die_chain;
28
29
30 enum die_val {
31         DIE_OOPS = 1,
32         DIE_BPT,
33         DIE_SSTEP,
34         DIE_PANIC,
35         DIE_NMI,
36         DIE_DIE,
37         DIE_NMIWATCHDOG,
38         DIE_KERNELDEBUG,
39         DIE_TRAP,
40         DIE_GPF,
41         DIE_CALL,
42         DIE_NMI_IPI,
43         DIE_PAGE_FAULT,
44 };
45
46 static inline int notify_die(enum die_val val, const char *str,
47                         struct pt_regs *regs, long err, int trap, int sig)
48 {
49         struct die_args args = {
50                 .regs = regs,
51                 .str = str,
52                 .err = err,
53                 .trapnr = trap,
54                 .signr = sig
55         };
56         return atomic_notifier_call_chain(&s390die_chain, val, &args);
57 }
58
59 #endif