From 09411cf40d2464465898a0a6765ef28ab23875a2 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Fri, 22 Jan 2010 15:15:30 -0800 Subject: [PATCH] .32 patches --- ...each-cpu-for-per-task-per-cpu-events.patch | 118 ++++++++++++++++++ ...nour-event-state-for-aux-stream-data.patch | 56 +++++++++ ...hart-use-tid-not-pid-for-comm-change.patch | 38 ++++++ queue-2.6.32/series | 3 + 4 files changed, 215 insertions(+) create mode 100644 queue-2.6.32/perf-events-dont-report-side-band-events-on-each-cpu-for-per-task-per-cpu-events.patch create mode 100644 queue-2.6.32/perf-honour-event-state-for-aux-stream-data.patch create mode 100644 queue-2.6.32/perf-timechart-use-tid-not-pid-for-comm-change.patch diff --git a/queue-2.6.32/perf-events-dont-report-side-band-events-on-each-cpu-for-per-task-per-cpu-events.patch b/queue-2.6.32/perf-events-dont-report-side-band-events-on-each-cpu-for-per-task-per-cpu-events.patch new file mode 100644 index 00000000000..a9df23b5815 --- /dev/null +++ b/queue-2.6.32/perf-events-dont-report-side-band-events-on-each-cpu-for-per-task-per-cpu-events.patch @@ -0,0 +1,118 @@ +From 5d27c23df09b702868d9a3bff86ec6abd22963ac Mon Sep 17 00:00:00 2001 +From: Peter Zijlstra +Date: Thu, 17 Dec 2009 13:16:32 +0100 +Subject: perf events: Dont report side-band events on each cpu for per-task-per-cpu events + +From: Peter Zijlstra + +commit 5d27c23df09b702868d9a3bff86ec6abd22963ac upstream. + +Acme noticed that his FORK/MMAP numbers were inflated by about +the same factor as his cpu-count. + +This led to the discovery of a few more sites that need to +respect the event->cpu filter. + +Reported-by: Arnaldo Carvalho de Melo +Signed-off-by: Peter Zijlstra +Cc: Paul Mackerras +LKML-Reference: <20091217121830.215333434@chello.nl> +Signed-off-by: Ingo Molnar +Signed-off-by: Greg Kroah-Hartman + +--- + kernel/perf_event.c | 20 ++++++++++++++++++-- + 1 file changed, 18 insertions(+), 2 deletions(-) + +--- a/kernel/perf_event.c ++++ b/kernel/perf_event.c +@@ -1359,6 +1359,9 @@ static void perf_ctx_adjust_freq(struct + if (event->state != PERF_EVENT_STATE_ACTIVE) + continue; + ++ if (event->cpu != -1 && event->cpu != smp_processor_id()) ++ continue; ++ + hwc = &event->hw; + + interrupts = hwc->interrupts; +@@ -3226,6 +3229,9 @@ static void perf_event_task_output(struc + + static int perf_event_task_match(struct perf_event *event) + { ++ if (event->cpu != -1 && event->cpu != smp_processor_id()) ++ return 0; ++ + if (event->attr.comm || event->attr.mmap || event->attr.task) + return 1; + +@@ -3262,6 +3268,7 @@ static void perf_event_task_event(struct + ctx = rcu_dereference(task_event->task->perf_event_ctxp); + if (ctx) + perf_event_task_ctx(ctx, task_event); ++ put_cpu_var(perf_cpu_context); + rcu_read_unlock(); + } + +@@ -3338,6 +3345,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; ++ + if (event->attr.comm) + return 1; + +@@ -3378,7 +3388,6 @@ static void perf_event_comm_event(struct + + cpuctx = &get_cpu_var(perf_cpu_context); + perf_event_comm_ctx(&cpuctx->ctx, comm_event); +- put_cpu_var(perf_cpu_context); + + rcu_read_lock(); + /* +@@ -3388,6 +3397,7 @@ static void perf_event_comm_event(struct + ctx = rcu_dereference(current->perf_event_ctxp); + if (ctx) + perf_event_comm_ctx(ctx, comm_event); ++ put_cpu_var(perf_cpu_context); + rcu_read_unlock(); + } + +@@ -3462,6 +3472,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->cpu != -1 && event->cpu != smp_processor_id()) ++ return 0; ++ + if (event->attr.mmap) + return 1; + +@@ -3539,7 +3552,6 @@ got_name: + + cpuctx = &get_cpu_var(perf_cpu_context); + perf_event_mmap_ctx(&cpuctx->ctx, mmap_event); +- put_cpu_var(perf_cpu_context); + + rcu_read_lock(); + /* +@@ -3549,6 +3561,7 @@ got_name: + ctx = rcu_dereference(current->perf_event_ctxp); + if (ctx) + perf_event_mmap_ctx(ctx, mmap_event); ++ put_cpu_var(perf_cpu_context); + rcu_read_unlock(); + + kfree(buf); +@@ -3811,6 +3824,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; ++ + if (!perf_swevent_is_counting(event)) + return 0; + diff --git a/queue-2.6.32/perf-honour-event-state-for-aux-stream-data.patch b/queue-2.6.32/perf-honour-event-state-for-aux-stream-data.patch new file mode 100644 index 00000000000..29888f874f3 --- /dev/null +++ b/queue-2.6.32/perf-honour-event-state-for-aux-stream-data.patch @@ -0,0 +1,56 @@ +From 22e190851f8709c48baf00ed9ce6144cdc54d025 Mon Sep 17 00:00:00 2001 +From: Peter Zijlstra +Date: Mon, 18 Jan 2010 09:12:32 +0100 +Subject: perf: Honour event state for aux stream data + +From: Peter Zijlstra + +commit 22e190851f8709c48baf00ed9ce6144cdc54d025 upstream. + +Anton reported that perf record kept receiving events even after calling +ioctl(PERF_EVENT_IOC_DISABLE). It turns out that FORK,COMM and MMAP +events didn't respect the disabled state and kept flowing in. + +Reported-by: Anton Blanchard +Signed-off-by: Peter Zijlstra +Tested-by: Anton Blanchard +LKML-Reference: <1263459187.4244.265.camel@laptop> +Signed-off-by: Ingo Molnar +Signed-off-by: Greg Kroah-Hartman + +--- + kernel/perf_event.c | 9 +++++++++ + 1 file changed, 9 insertions(+) + +--- a/kernel/perf_event.c ++++ b/kernel/perf_event.c +@@ -3229,6 +3229,9 @@ static void perf_event_task_output(struc + + static int perf_event_task_match(struct perf_event *event) + { ++ if (event->state != PERF_EVENT_STATE_ACTIVE) ++ return 0; ++ + if (event->cpu != -1 && event->cpu != smp_processor_id()) + return 0; + +@@ -3345,6 +3348,9 @@ static void perf_event_comm_output(struc + + static int perf_event_comm_match(struct perf_event *event) + { ++ if (event->state != PERF_EVENT_STATE_ACTIVE) ++ return 0; ++ + if (event->cpu != -1 && event->cpu != smp_processor_id()) + return 0; + +@@ -3472,6 +3478,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->state != PERF_EVENT_STATE_ACTIVE) ++ return 0; ++ + if (event->cpu != -1 && event->cpu != smp_processor_id()) + return 0; + diff --git a/queue-2.6.32/perf-timechart-use-tid-not-pid-for-comm-change.patch b/queue-2.6.32/perf-timechart-use-tid-not-pid-for-comm-change.patch new file mode 100644 index 00000000000..dc9b6f71eff --- /dev/null +++ b/queue-2.6.32/perf-timechart-use-tid-not-pid-for-comm-change.patch @@ -0,0 +1,38 @@ +From 8f06d7e6e1bbfb32698d6d455583ab7460c090e2 Mon Sep 17 00:00:00 2001 +From: Arjan van de Ven +Date: Sat, 16 Jan 2010 12:53:19 -0800 +Subject: perf timechart: Use tid not pid for COMM change + +From: Arjan van de Ven + +commit 8f06d7e6e1bbfb32698d6d455583ab7460c090e2 upstream. + +A process that changes its comm field, does this on a per kernel +task struct basis. The timechart tool used, incorrectly, the pid +to track this, and should have used the tid instead... + +Signed-off-by: Arjan van de Ven +Cc: Peter Zijlstra +Cc: Mike Galbraith +Cc: Paul Mackerras +Cc: Arnaldo Carvalho de Melo +Cc: Frederic Weisbecker +LKML-Reference: <20100116125319.34ac3edd@infradead.org> +Signed-off-by: Ingo Molnar +Signed-off-by: Greg Kroah-Hartman + +--- + tools/perf/builtin-timechart.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/tools/perf/builtin-timechart.c ++++ b/tools/perf/builtin-timechart.c +@@ -275,7 +275,7 @@ static u64 cpus_pstate_state[MAX_CPUS]; + static int + process_comm_event(event_t *event) + { +- pid_set_comm(event->comm.pid, event->comm.comm); ++ pid_set_comm(event->comm.tid, event->comm.comm); + return 0; + } + static int diff --git a/queue-2.6.32/series b/queue-2.6.32/series index 33f1e59d7d9..7b2898573b5 100644 --- a/queue-2.6.32/series +++ b/queue-2.6.32/series @@ -24,3 +24,6 @@ dm-fix-device-mapper-topology-stacking.patch x86-pci-pat-return-einval-for-pci-mmap-wc-request-for-pat_enabled.patch usb-fix-usbstorage-for-2770-915d-delivers-no-fat.patch vmalloc-remove-bug_on-due-to-racy-counting-of-vm_lazy_free.patch +perf-timechart-use-tid-not-pid-for-comm-change.patch +perf-events-dont-report-side-band-events-on-each-cpu-for-per-task-per-cpu-events.patch +perf-honour-event-state-for-aux-stream-data.patch -- 2.47.3