Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
- kernel/perf_event.c | 20 ++++++++++++++++++--
- 1 file changed, 18 insertions(+), 2 deletions(-)
+ kernel/perf_event.c | 21 ++++++++++++++++++---
+ 1 file changed, 18 insertions(+), 3 deletions(-)
--- a/kernel/perf_event.c
+++ b/kernel/perf_event.c
if (event->attr.comm || event->attr.mmap || event->attr.task)
return 1;
-@@ -3262,6 +3268,7 @@ static void perf_event_task_event(struct
+@@ -3255,13 +3261,13 @@ static void perf_event_task_event(struct
+
+ cpuctx = &get_cpu_var(perf_cpu_context);
+ perf_event_task_ctx(&cpuctx->ctx, task_event);
+- put_cpu_var(perf_cpu_context);
+
+ rcu_read_lock();
+ if (!ctx)
ctx = rcu_dereference(task_event->task->perf_event_ctxp);
if (ctx)
perf_event_task_ctx(ctx, task_event);
rcu_read_unlock();
}
-@@ -3338,6 +3345,9 @@ static void perf_event_comm_output(struc
+@@ -3338,6 +3344,9 @@ static void perf_event_comm_output(struc
static int perf_event_comm_match(struct perf_event *event)
{
if (event->attr.comm)
return 1;
-@@ -3378,7 +3388,6 @@ static void perf_event_comm_event(struct
+@@ -3378,7 +3387,6 @@ static void perf_event_comm_event(struct
cpuctx = &get_cpu_var(perf_cpu_context);
perf_event_comm_ctx(&cpuctx->ctx, comm_event);
rcu_read_lock();
/*
-@@ -3388,6 +3397,7 @@ static void perf_event_comm_event(struct
+@@ -3388,6 +3396,7 @@ static void perf_event_comm_event(struct
ctx = rcu_dereference(current->perf_event_ctxp);
if (ctx)
perf_event_comm_ctx(ctx, comm_event);
rcu_read_unlock();
}
-@@ -3462,6 +3472,9 @@ static void perf_event_mmap_output(struc
+@@ -3462,6 +3471,9 @@ static void perf_event_mmap_output(struc
static int perf_event_mmap_match(struct perf_event *event,
struct perf_mmap_event *mmap_event)
{
if (event->attr.mmap)
return 1;
-@@ -3539,7 +3552,6 @@ got_name:
+@@ -3539,7 +3551,6 @@ got_name:
cpuctx = &get_cpu_var(perf_cpu_context);
perf_event_mmap_ctx(&cpuctx->ctx, mmap_event);
rcu_read_lock();
/*
-@@ -3549,6 +3561,7 @@ got_name:
+@@ -3549,6 +3560,7 @@ got_name:
ctx = rcu_dereference(current->perf_event_ctxp);
if (ctx)
perf_event_mmap_ctx(ctx, mmap_event);
rcu_read_unlock();
kfree(buf);
-@@ -3811,6 +3824,9 @@ static int perf_swevent_match(struct per
+@@ -3811,6 +3823,9 @@ static int perf_swevent_match(struct per
enum perf_type_id type,
u32 event_id, struct pt_regs *regs)
{
if (event->cpu != -1 && event->cpu != smp_processor_id())
return 0;
-@@ -3345,6 +3348,9 @@ static void perf_event_comm_output(struc
+@@ -3344,6 +3347,9 @@ static void perf_event_comm_output(struc
static int perf_event_comm_match(struct perf_event *event)
{
if (event->cpu != -1 && event->cpu != smp_processor_id())
return 0;
-@@ -3472,6 +3478,9 @@ static void perf_event_mmap_output(struc
+@@ -3471,6 +3477,9 @@ static void perf_event_mmap_output(struc
static int perf_event_mmap_match(struct perf_event *event,
struct perf_mmap_event *mmap_event)
{