|
@@ -9,7 +9,7 @@
|
|
|
#include <linux/kprobes.h>
|
|
|
#include "trace.h"
|
|
|
|
|
|
-static char *perf_trace_buf[PERF_NR_CONTEXTS];
|
|
|
+static char __percpu *perf_trace_buf[PERF_NR_CONTEXTS];
|
|
|
|
|
|
/*
|
|
|
* Force it to be aligned to unsigned long to avoid misaligned accesses
|
|
@@ -24,7 +24,7 @@ static int total_ref_count;
|
|
|
static int perf_trace_event_init(struct ftrace_event_call *tp_event,
|
|
|
struct perf_event *p_event)
|
|
|
{
|
|
|
- struct hlist_head *list;
|
|
|
+ struct hlist_head __percpu *list;
|
|
|
int ret = -ENOMEM;
|
|
|
int cpu;
|
|
|
|
|
@@ -42,11 +42,11 @@ static int perf_trace_event_init(struct ftrace_event_call *tp_event,
|
|
|
tp_event->perf_events = list;
|
|
|
|
|
|
if (!total_ref_count) {
|
|
|
- char *buf;
|
|
|
+ char __percpu *buf;
|
|
|
int i;
|
|
|
|
|
|
for (i = 0; i < PERF_NR_CONTEXTS; i++) {
|
|
|
- buf = (char *)alloc_percpu(perf_trace_t);
|
|
|
+ buf = (char __percpu *)alloc_percpu(perf_trace_t);
|
|
|
if (!buf)
|
|
|
goto fail;
|
|
|
|
|
@@ -102,13 +102,14 @@ int perf_trace_init(struct perf_event *p_event)
|
|
|
int perf_trace_enable(struct perf_event *p_event)
|
|
|
{
|
|
|
struct ftrace_event_call *tp_event = p_event->tp_event;
|
|
|
+ struct hlist_head __percpu *pcpu_list;
|
|
|
struct hlist_head *list;
|
|
|
|
|
|
- list = tp_event->perf_events;
|
|
|
- if (WARN_ON_ONCE(!list))
|
|
|
+ pcpu_list = tp_event->perf_events;
|
|
|
+ if (WARN_ON_ONCE(!pcpu_list))
|
|
|
return -EINVAL;
|
|
|
|
|
|
- list = this_cpu_ptr(list);
|
|
|
+ list = this_cpu_ptr(pcpu_list);
|
|
|
hlist_add_head_rcu(&p_event->hlist_entry, list);
|
|
|
|
|
|
return 0;
|