diff options
Diffstat (limited to 'kernel/events/internal.h')
| -rw-r--r-- | kernel/events/internal.h | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/kernel/events/internal.h b/kernel/events/internal.h index 569b218782ad..9f6ce9ba4a04 100644 --- a/kernel/events/internal.h +++ b/kernel/events/internal.h | |||
| @@ -27,6 +27,7 @@ struct ring_buffer { | |||
| 27 | local_t lost; /* nr records lost */ | 27 | local_t lost; /* nr records lost */ |
| 28 | 28 | ||
| 29 | long watermark; /* wakeup watermark */ | 29 | long watermark; /* wakeup watermark */ |
| 30 | long aux_watermark; | ||
| 30 | /* poll crap */ | 31 | /* poll crap */ |
| 31 | spinlock_t event_lock; | 32 | spinlock_t event_lock; |
| 32 | struct list_head event_list; | 33 | struct list_head event_list; |
| @@ -35,6 +36,20 @@ struct ring_buffer { | |||
| 35 | unsigned long mmap_locked; | 36 | unsigned long mmap_locked; |
| 36 | struct user_struct *mmap_user; | 37 | struct user_struct *mmap_user; |
| 37 | 38 | ||
| 39 | /* AUX area */ | ||
| 40 | local_t aux_head; | ||
| 41 | local_t aux_nest; | ||
| 42 | local_t aux_wakeup; | ||
| 43 | unsigned long aux_pgoff; | ||
| 44 | int aux_nr_pages; | ||
| 45 | int aux_overwrite; | ||
| 46 | atomic_t aux_mmap_count; | ||
| 47 | unsigned long aux_mmap_locked; | ||
| 48 | void (*free_aux)(void *); | ||
| 49 | atomic_t aux_refcount; | ||
| 50 | void **aux_pages; | ||
| 51 | void *aux_priv; | ||
| 52 | |||
| 38 | struct perf_event_mmap_page *user_page; | 53 | struct perf_event_mmap_page *user_page; |
| 39 | void *data_pages[0]; | 54 | void *data_pages[0]; |
| 40 | }; | 55 | }; |
| @@ -43,6 +58,19 @@ extern void rb_free(struct ring_buffer *rb); | |||
| 43 | extern struct ring_buffer * | 58 | extern struct ring_buffer * |
| 44 | rb_alloc(int nr_pages, long watermark, int cpu, int flags); | 59 | rb_alloc(int nr_pages, long watermark, int cpu, int flags); |
| 45 | extern void perf_event_wakeup(struct perf_event *event); | 60 | extern void perf_event_wakeup(struct perf_event *event); |
| 61 | extern int rb_alloc_aux(struct ring_buffer *rb, struct perf_event *event, | ||
| 62 | pgoff_t pgoff, int nr_pages, long watermark, int flags); | ||
| 63 | extern void rb_free_aux(struct ring_buffer *rb); | ||
| 64 | extern struct ring_buffer *ring_buffer_get(struct perf_event *event); | ||
| 65 | extern void ring_buffer_put(struct ring_buffer *rb); | ||
| 66 | |||
| 67 | static inline bool rb_has_aux(struct ring_buffer *rb) | ||
| 68 | { | ||
| 69 | return !!rb->aux_nr_pages; | ||
| 70 | } | ||
| 71 | |||
| 72 | void perf_event_aux_event(struct perf_event *event, unsigned long head, | ||
| 73 | unsigned long size, u64 flags); | ||
| 46 | 74 | ||
| 47 | extern void | 75 | extern void |
| 48 | perf_event_header__init_id(struct perf_event_header *header, | 76 | perf_event_header__init_id(struct perf_event_header *header, |
| @@ -81,6 +109,11 @@ static inline unsigned long perf_data_size(struct ring_buffer *rb) | |||
| 81 | return rb->nr_pages << (PAGE_SHIFT + page_order(rb)); | 109 | return rb->nr_pages << (PAGE_SHIFT + page_order(rb)); |
| 82 | } | 110 | } |
| 83 | 111 | ||
| 112 | static inline unsigned long perf_aux_size(struct ring_buffer *rb) | ||
| 113 | { | ||
| 114 | return rb->aux_nr_pages << PAGE_SHIFT; | ||
| 115 | } | ||
| 116 | |||
| 84 | #define DEFINE_OUTPUT_COPY(func_name, memcpy_func) \ | 117 | #define DEFINE_OUTPUT_COPY(func_name, memcpy_func) \ |
| 85 | static inline unsigned long \ | 118 | static inline unsigned long \ |
| 86 | func_name(struct perf_output_handle *handle, \ | 119 | func_name(struct perf_output_handle *handle, \ |
