Blame view
include/linux/hw_breakpoint.h
4.16 KB
2da3e160c hw-breakpoint: Mo... |
1 2 |
#ifndef _LINUX_HW_BREAKPOINT_H #define _LINUX_HW_BREAKPOINT_H |
b332828c3 hw-breakpoints: p... |
3 |
|
24f1e32c6 hw-breakpoints: R... |
4 5 6 7 8 |
enum { HW_BREAKPOINT_LEN_1 = 1, HW_BREAKPOINT_LEN_2 = 2, HW_BREAKPOINT_LEN_4 = 4, HW_BREAKPOINT_LEN_8 = 8, |
b332828c3 hw-breakpoints: p... |
9 |
}; |
24f1e32c6 hw-breakpoints: R... |
10 |
enum { |
0102752e4 hw-breakpoints: S... |
11 12 13 14 15 16 |
HW_BREAKPOINT_EMPTY = 0, HW_BREAKPOINT_R = 1, HW_BREAKPOINT_W = 2, HW_BREAKPOINT_RW = HW_BREAKPOINT_R | HW_BREAKPOINT_W, HW_BREAKPOINT_X = 4, HW_BREAKPOINT_INVALID = HW_BREAKPOINT_RW | HW_BREAKPOINT_X, |
24f1e32c6 hw-breakpoints: R... |
17 |
}; |
feef47d0c hw-breakpoints: G... |
18 19 20 21 22 23 24 25 26 |
enum bp_type_idx { TYPE_INST = 0, #ifdef CONFIG_HAVE_MIXED_BREAKPOINTS_REGS TYPE_DATA = 0, #else TYPE_DATA = 1, #endif TYPE_MAX }; |
5093ebad5 hw-breakpoints: S... |
27 |
#ifdef __KERNEL__ |
688bcaff2 hw-breakpoints: F... |
28 |
|
e6db48765 hw-breakpoints: I... |
29 |
#include <linux/perf_event.h> |
fa7c27ee9 hw-breakpoints: F... |
30 |
#ifdef CONFIG_HAVE_HW_BREAKPOINT |
3c502e7a0 perf,hw_breakpoin... |
31 |
extern int __init init_hw_breakpoint(void); |
dd1853c3f hw-breakpoints: U... |
32 33 |
static inline void hw_breakpoint_init(struct perf_event_attr *attr) { |
ed872d09e hw-breakpoints: Z... |
34 |
memset(attr, 0, sizeof(*attr)); |
dd1853c3f hw-breakpoints: U... |
35 36 |
attr->type = PERF_TYPE_BREAKPOINT; attr->size = sizeof(*attr); |
b326e9560 hw-breakpoints: U... |
37 38 39 40 |
/* * As it's for in-kernel or ptrace use, we want it to be pinned * and to call its callback every hits. */ |
dd1853c3f hw-breakpoints: U... |
41 |
attr->pinned = 1; |
b326e9560 hw-breakpoints: U... |
42 |
attr->sample_period = 1; |
73266fc1d hw-breakpoints: T... |
43 44 45 46 47 48 |
} static inline void ptrace_breakpoint_init(struct perf_event_attr *attr) { hw_breakpoint_init(attr); attr->exclude_kernel = 1; |
dd1853c3f hw-breakpoints: U... |
49 |
} |
24f1e32c6 hw-breakpoints: R... |
50 51 52 53 54 55 56 57 58 |
static inline unsigned long hw_breakpoint_addr(struct perf_event *bp) { return bp->attr.bp_addr; } static inline int hw_breakpoint_type(struct perf_event *bp) { return bp->attr.bp_type; } |
cd757645f perf: Make bp_len... |
59 |
static inline unsigned long hw_breakpoint_len(struct perf_event *bp) |
24f1e32c6 hw-breakpoints: R... |
60 61 62 |
{ return bp->attr.bp_len; } |
24f1e32c6 hw-breakpoints: R... |
63 |
extern struct perf_event * |
5fa10b28e hw-breakpoints: U... |
64 |
register_user_hw_breakpoint(struct perf_event_attr *attr, |
b326e9560 hw-breakpoints: U... |
65 |
perf_overflow_handler_t triggered, |
5fa10b28e hw-breakpoints: U... |
66 |
struct task_struct *tsk); |
24f1e32c6 hw-breakpoints: R... |
67 68 |
/* FIXME: only change from the attr, and don't unregister */ |
44234adcd hw-breakpoints: M... |
69 |
extern int |
2f0993e0f hw-breakpoints: D... |
70 |
modify_user_hw_breakpoint(struct perf_event *bp, struct perf_event_attr *attr); |
b332828c3 hw-breakpoints: p... |
71 |
|
b332828c3 hw-breakpoints: p... |
72 73 74 |
/* * Kernel breakpoints are not associated with any particular thread. */ |
24f1e32c6 hw-breakpoints: R... |
75 |
extern struct perf_event * |
dd1853c3f hw-breakpoints: U... |
76 |
register_wide_hw_breakpoint_cpu(struct perf_event_attr *attr, |
b326e9560 hw-breakpoints: U... |
77 |
perf_overflow_handler_t triggered, |
dd1853c3f hw-breakpoints: U... |
78 |
int cpu); |
24f1e32c6 hw-breakpoints: R... |
79 |
|
44ee63587 percpu: Add __per... |
80 |
extern struct perf_event * __percpu * |
dd1853c3f hw-breakpoints: U... |
81 |
register_wide_hw_breakpoint(struct perf_event_attr *attr, |
b326e9560 hw-breakpoints: U... |
82 |
perf_overflow_handler_t triggered); |
24f1e32c6 hw-breakpoints: R... |
83 84 85 86 |
extern int register_perf_hw_breakpoint(struct perf_event *bp); extern int __register_perf_hw_breakpoint(struct perf_event *bp); extern void unregister_hw_breakpoint(struct perf_event *bp); |
44ee63587 percpu: Add __per... |
87 |
extern void unregister_wide_hw_breakpoint(struct perf_event * __percpu *cpu_events); |
24f1e32c6 hw-breakpoints: R... |
88 |
|
5352ae638 perf, hw_breakpoi... |
89 90 |
extern int dbg_reserve_bp_slot(struct perf_event *bp); extern int dbg_release_bp_slot(struct perf_event *bp); |
24f1e32c6 hw-breakpoints: R... |
91 92 93 94 |
extern int reserve_bp_slot(struct perf_event *bp); extern void release_bp_slot(struct perf_event *bp); extern void flush_ptrace_hw_breakpoint(struct task_struct *tsk); |
687b16fb6 hw-breakpoints: P... |
95 96 97 98 |
static inline struct arch_hw_breakpoint *counter_arch_bp(struct perf_event *bp) { return &bp->hw.info; } |
24f1e32c6 hw-breakpoints: R... |
99 |
#else /* !CONFIG_HAVE_HW_BREAKPOINT */ |
3c502e7a0 perf,hw_breakpoin... |
100 |
static inline int __init init_hw_breakpoint(void) { return 0; } |
24f1e32c6 hw-breakpoints: R... |
101 |
static inline struct perf_event * |
5fa10b28e hw-breakpoints: U... |
102 |
register_user_hw_breakpoint(struct perf_event_attr *attr, |
b326e9560 hw-breakpoints: U... |
103 |
perf_overflow_handler_t triggered, |
5fa10b28e hw-breakpoints: U... |
104 |
struct task_struct *tsk) { return NULL; } |
44234adcd hw-breakpoints: M... |
105 |
static inline int |
24f1e32c6 hw-breakpoints: R... |
106 |
modify_user_hw_breakpoint(struct perf_event *bp, |
99ac64c82 hw-breakpoints: H... |
107 |
struct perf_event_attr *attr) { return -ENOSYS; } |
24f1e32c6 hw-breakpoints: R... |
108 |
static inline struct perf_event * |
dd1853c3f hw-breakpoints: U... |
109 |
register_wide_hw_breakpoint_cpu(struct perf_event_attr *attr, |
b326e9560 hw-breakpoints: U... |
110 |
perf_overflow_handler_t triggered, |
dd1853c3f hw-breakpoints: U... |
111 |
int cpu) { return NULL; } |
44ee63587 percpu: Add __per... |
112 |
static inline struct perf_event * __percpu * |
dd1853c3f hw-breakpoints: U... |
113 |
register_wide_hw_breakpoint(struct perf_event_attr *attr, |
b326e9560 hw-breakpoints: U... |
114 |
perf_overflow_handler_t triggered) { return NULL; } |
24f1e32c6 hw-breakpoints: R... |
115 116 117 118 119 120 |
static inline int register_perf_hw_breakpoint(struct perf_event *bp) { return -ENOSYS; } static inline int __register_perf_hw_breakpoint(struct perf_event *bp) { return -ENOSYS; } static inline void unregister_hw_breakpoint(struct perf_event *bp) { } static inline void |
44ee63587 percpu: Add __per... |
121 |
unregister_wide_hw_breakpoint(struct perf_event * __percpu *cpu_events) { } |
24f1e32c6 hw-breakpoints: R... |
122 123 124 125 126 |
static inline int reserve_bp_slot(struct perf_event *bp) {return -ENOSYS; } static inline void release_bp_slot(struct perf_event *bp) { } static inline void flush_ptrace_hw_breakpoint(struct task_struct *tsk) { } |
b332828c3 hw-breakpoints: p... |
127 |
|
687b16fb6 hw-breakpoints: P... |
128 129 130 131 |
static inline struct arch_hw_breakpoint *counter_arch_bp(struct perf_event *bp) { return NULL; } |
24f1e32c6 hw-breakpoints: R... |
132 |
#endif /* CONFIG_HAVE_HW_BREAKPOINT */ |
5093ebad5 hw-breakpoints: S... |
133 |
#endif /* __KERNEL__ */ |
b332828c3 hw-breakpoints: p... |
134 |
|
24f1e32c6 hw-breakpoints: R... |
135 |
#endif /* _LINUX_HW_BREAKPOINT_H */ |