@@ -633,6 +633,10 @@ struct perf_sample_data {
PERF_MEM_S(LOCK, NA) |\
PERF_MEM_S(TLB, NA))
+extern void perf_event_header__init_id(struct perf_event_header *header,
+ struct perf_sample_data *data,
+ struct perf_event *event);
+
static inline void perf_sample_data_init(struct perf_sample_data *data,
u64 addr, u64 period)
{
@@ -654,6 +658,9 @@ extern void perf_prepare_sample(struct perf_event_header *header,
struct perf_sample_data *data,
struct perf_event *event,
struct pt_regs *regs);
+extern void perf_event__output_id_sample(struct perf_event *event,
+ struct perf_output_handle *handle,
+ struct perf_sample_data *sample);
extern int perf_event_overflow(struct perf_event *event,
struct perf_sample_data *data,
@@ -4793,6 +4793,7 @@ void perf_event_header__init_id(struct perf_event_header *header,
if (event->attr.sample_id_all)
__perf_event_header__init_id(header, data, event);
}
+EXPORT_SYMBOL_GPL(perf_event_header__init_id);
static void __perf_event__output_id_sample(struct perf_output_handle *handle,
struct perf_sample_data *data)
@@ -4825,6 +4826,7 @@ void perf_event__output_id_sample(struct perf_event *event,
if (event->attr.sample_id_all)
__perf_event__output_id_sample(handle, sample);
}
+EXPORT_SYMBOL_GPL(perf_event__output_id_sample);
static void perf_output_read_one(struct perf_output_handle *handle,
struct perf_event *event,
@@ -44,15 +44,6 @@ extern struct ring_buffer *
rb_alloc(int nr_pages, long watermark, int cpu, int flags);
extern void perf_event_wakeup(struct perf_event *event);
-extern void
-perf_event_header__init_id(struct perf_event_header *header,
- struct perf_sample_data *data,
- struct perf_event *event);
-extern void
-perf_event__output_id_sample(struct perf_event *event,
- struct perf_output_handle *handle,
- struct perf_sample_data *sample);
-
extern struct page *
perf_mmap_to_page(struct ring_buffer *rb, unsigned long pgoff);
@@ -202,12 +202,14 @@ out:
return -ENOSPC;
}
+EXPORT_SYMBOL_GPL(perf_output_begin);
unsigned int perf_output_copy(struct perf_output_handle *handle,
const void *buf, unsigned int len)
{
return __output_copy(handle, buf, len);
}
+EXPORT_SYMBOL_GPL(perf_output_copy);
unsigned int perf_output_skip(struct perf_output_handle *handle,
unsigned int len)
@@ -220,6 +222,7 @@ void perf_output_end(struct perf_output_handle *handle)
perf_output_put_handle(handle);
rcu_read_unlock();
}
+EXPORT_SYMBOL_GPL(perf_output_end);
static void
ring_buffer_init(struct ring_buffer *rb, long watermark, int flags)
This exports enough api to allow drivers to output their own PERF_RECORD_DEVICE events. Signed-off-by: Robert Bragg <robert@sixbynine.org> --- include/linux/perf_event.h | 7 +++++++ kernel/events/core.c | 2 ++ kernel/events/internal.h | 9 --------- kernel/events/ring_buffer.c | 3 +++ 4 files changed, 12 insertions(+), 9 deletions(-)