blob: d2d7ad276148970c51c717b210ae94a91dda46f2 [file] [log] [blame]
Michael Grundy4ba069b2006-09-20 15:58:39 +02001#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
9struct pt_regs;
10
11struct 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 */
23extern int register_die_notifier(struct notifier_block *);
24extern int unregister_die_notifier(struct notifier_block *);
Christoph Hellwig33464e32007-05-04 18:47:46 +020025
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 */
31static inline int register_page_fault_notifier(struct notifier_block *nb)
32{
33 return 0;
34}
35static inline int unregister_page_fault_notifier(struct notifier_block *nb)
36{
37 return 0;
38}
39
Michael Grundy4ba069b2006-09-20 15:58:39 +020040extern struct atomic_notifier_head s390die_chain;
41
Michael Grundy4ba069b2006-09-20 15:58:39 +020042enum 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,
Michael Grundy4ba069b2006-09-20 15:58:39 +020055};
56
57static 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
Heiko Carstens2b67fc42007-02-05 21:16:47 +010070extern void die(const char *, struct pt_regs *, long);
71
Michael Grundy4ba069b2006-09-20 15:58:39 +020072#endif