]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/blame - include/linux/hw_breakpoint.h
hw-breakpoints: Remove x86 specific headers from core file
[mirror_ubuntu-artful-kernel.git] / include / linux / hw_breakpoint.h
CommitLineData
2da3e160
FW
1#ifndef _LINUX_HW_BREAKPOINT_H
2#define _LINUX_HW_BREAKPOINT_H
b332828c 3
24f1e32c 4#include <linux/perf_event.h>
b332828c 5
24f1e32c
FW
6enum {
7 HW_BREAKPOINT_LEN_1 = 1,
8 HW_BREAKPOINT_LEN_2 = 2,
9 HW_BREAKPOINT_LEN_4 = 4,
10 HW_BREAKPOINT_LEN_8 = 8,
b332828c
P
11};
12
24f1e32c
FW
13enum {
14 HW_BREAKPOINT_R = 1,
15 HW_BREAKPOINT_W = 2,
16 HW_BREAKPOINT_X = 4,
17};
18
688bcaff
IM
19#ifdef CONFIG_HAVE_HW_BREAKPOINT
20
24f1e32c
FW
21static inline unsigned long hw_breakpoint_addr(struct perf_event *bp)
22{
23 return bp->attr.bp_addr;
24}
25
26static inline int hw_breakpoint_type(struct perf_event *bp)
27{
28 return bp->attr.bp_type;
29}
30
31static inline int hw_breakpoint_len(struct perf_event *bp)
32{
33 return bp->attr.bp_len;
34}
35
24f1e32c
FW
36extern struct perf_event *
37register_user_hw_breakpoint(unsigned long addr,
38 int len,
39 int type,
40 perf_callback_t triggered,
41 struct task_struct *tsk,
42 bool active);
43
44/* FIXME: only change from the attr, and don't unregister */
45extern struct perf_event *
46modify_user_hw_breakpoint(struct perf_event *bp,
47 unsigned long addr,
48 int len,
49 int type,
50 perf_callback_t triggered,
51 struct task_struct *tsk,
52 bool active);
b332828c 53
b332828c
P
54/*
55 * Kernel breakpoints are not associated with any particular thread.
56 */
24f1e32c
FW
57extern struct perf_event *
58register_wide_hw_breakpoint_cpu(unsigned long addr,
59 int len,
60 int type,
61 perf_callback_t triggered,
62 int cpu,
63 bool active);
64
65extern struct perf_event **
66register_wide_hw_breakpoint(unsigned long addr,
67 int len,
68 int type,
69 perf_callback_t triggered,
70 bool active);
71
72extern int register_perf_hw_breakpoint(struct perf_event *bp);
73extern int __register_perf_hw_breakpoint(struct perf_event *bp);
74extern void unregister_hw_breakpoint(struct perf_event *bp);
75extern void unregister_wide_hw_breakpoint(struct perf_event **cpu_events);
76
77extern int reserve_bp_slot(struct perf_event *bp);
78extern void release_bp_slot(struct perf_event *bp);
79
80extern void flush_ptrace_hw_breakpoint(struct task_struct *tsk);
81
687b16fb
FW
82static inline struct arch_hw_breakpoint *counter_arch_bp(struct perf_event *bp)
83{
84 return &bp->hw.info;
85}
86
24f1e32c
FW
87#else /* !CONFIG_HAVE_HW_BREAKPOINT */
88
89static inline struct perf_event *
90register_user_hw_breakpoint(unsigned long addr,
91 int len,
92 int type,
93 perf_callback_t triggered,
94 struct task_struct *tsk,
95 bool active) { return NULL; }
96static inline struct perf_event *
97modify_user_hw_breakpoint(struct perf_event *bp,
98 unsigned long addr,
99 int len,
100 int type,
101 perf_callback_t triggered,
102 struct task_struct *tsk,
103 bool active) { return NULL; }
104static inline struct perf_event *
105register_wide_hw_breakpoint_cpu(unsigned long addr,
106 int len,
107 int type,
108 perf_callback_t triggered,
109 int cpu,
110 bool active) { return NULL; }
111static inline struct perf_event **
112register_wide_hw_breakpoint(unsigned long addr,
113 int len,
114 int type,
115 perf_callback_t triggered,
116 bool active) { return NULL; }
117static inline int
118register_perf_hw_breakpoint(struct perf_event *bp) { return -ENOSYS; }
119static inline int
120__register_perf_hw_breakpoint(struct perf_event *bp) { return -ENOSYS; }
121static inline void unregister_hw_breakpoint(struct perf_event *bp) { }
122static inline void
123unregister_wide_hw_breakpoint(struct perf_event **cpu_events) { }
124static inline int
125reserve_bp_slot(struct perf_event *bp) {return -ENOSYS; }
126static inline void release_bp_slot(struct perf_event *bp) { }
127
128static inline void flush_ptrace_hw_breakpoint(struct task_struct *tsk) { }
b332828c 129
687b16fb
FW
130static inline struct arch_hw_breakpoint *counter_arch_bp(struct perf_event *bp)
131{
132 return NULL;
133}
134
24f1e32c 135#endif /* CONFIG_HAVE_HW_BREAKPOINT */
b332828c 136
24f1e32c 137#endif /* _LINUX_HW_BREAKPOINT_H */