|
@@ -6741,7 +6741,6 @@ void perf_swevent_put_recursion_context(int rctx)
|
|
|
|
|
|
put_recursion_context(swhash->recursion, rctx);
|
|
|
}
|
|
|
-EXPORT_SYMBOL_GPL(perf_swevent_put_recursion_context);
|
|
|
|
|
|
void ___perf_sw_event(u32 event_id, u64 nr, struct pt_regs *regs, u64 addr)
|
|
|
{
|
|
@@ -6998,6 +6997,25 @@ static int perf_tp_event_match(struct perf_event *event,
|
|
|
return 1;
|
|
|
}
|
|
|
|
|
|
+void perf_trace_run_bpf_submit(void *raw_data, int size, int rctx,
|
|
|
+ struct trace_event_call *call, u64 count,
|
|
|
+ struct pt_regs *regs, struct hlist_head *head,
|
|
|
+ struct task_struct *task)
|
|
|
+{
|
|
|
+ struct bpf_prog *prog = call->prog;
|
|
|
+
|
|
|
+ if (prog) {
|
|
|
+ *(struct pt_regs **)raw_data = regs;
|
|
|
+ if (!trace_call_bpf(prog, raw_data) || hlist_empty(head)) {
|
|
|
+ perf_swevent_put_recursion_context(rctx);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ perf_tp_event(call->event.type, count, raw_data, size, regs, head,
|
|
|
+ rctx, task);
|
|
|
+}
|
|
|
+EXPORT_SYMBOL_GPL(perf_trace_run_bpf_submit);
|
|
|
+
|
|
|
void perf_tp_event(u16 event_type, u64 count, void *record, int entry_size,
|
|
|
struct pt_regs *regs, struct hlist_head *head, int rctx,
|
|
|
struct task_struct *task)
|