aboutsummaryrefslogtreecommitdiffstats
path: root/kernel
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2011-03-18 13:38:34 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2011-03-18 13:38:34 -0400
commit619297855aa16646246ea4b1f6e05f1b2455c808 (patch)
treea07fe1b24c372f5eabf244555db41fdf574c1205 /kernel
parente16b396ce314b2bcdfe6c173fe075bf8e3432368 (diff)
parent1ef1d1c2353967e2d61ecaddf76edfd058a778b4 (diff)
Merge branch 'perf-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip
* 'perf-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip: (30 commits) trace, filters: Initialize the match variable in process_ops() properly trace, documentation: Fix branch profiling location in debugfs oprofile, s390: Cleanups oprofile, s390: Remove hwsampler_files.c and merge it into init.c perf: Fix tear-down of inherited group events perf: Reorder & optimize perf_event_context to remove alignment padding on 64 bit builds perf: Handle stopped state with tracepoints perf: Fix the software events state check perf, powerpc: Handle events that raise an exception without overflowing perf, x86: Use INTEL_*_CONSTRAINT() for all PEBS event constraints perf, x86: Clean up SandyBridge PEBS events perf lock: Fix sorting by wait_min perf tools: Version incorrect with some versions of grep perf evlist: New command to list the names of events present in a perf.data file perf script: Add support for H/W and S/W events perf script: Add support for dumping symbols perf script: Support custom field selection for output perf script: Move printing of 'common' data from print_event and rename perf tracing: Remove print_graph_cpu and print_graph_proc from trace-event-parse perf script: Change process_event prototype ...
Diffstat (limited to 'kernel')
-rw-r--r--kernel/perf_event.c17
-rw-r--r--kernel/trace/Kconfig4
-rw-r--r--kernel/trace/trace_events_filter.c2
3 files changed, 14 insertions, 9 deletions
diff --git a/kernel/perf_event.c b/kernel/perf_event.c
index ed253aa24ba4..3472bb1a070c 100644
--- a/kernel/perf_event.c
+++ b/kernel/perf_event.c
@@ -5122,7 +5122,7 @@ static int perf_exclude_event(struct perf_event *event,
5122 struct pt_regs *regs) 5122 struct pt_regs *regs)
5123{ 5123{
5124 if (event->hw.state & PERF_HES_STOPPED) 5124 if (event->hw.state & PERF_HES_STOPPED)
5125 return 0; 5125 return 1;
5126 5126
5127 if (regs) { 5127 if (regs) {
5128 if (event->attr.exclude_user && user_mode(regs)) 5128 if (event->attr.exclude_user && user_mode(regs))
@@ -5478,6 +5478,8 @@ static int perf_tp_event_match(struct perf_event *event,
5478 struct perf_sample_data *data, 5478 struct perf_sample_data *data,
5479 struct pt_regs *regs) 5479 struct pt_regs *regs)
5480{ 5480{
5481 if (event->hw.state & PERF_HES_STOPPED)
5482 return 0;
5481 /* 5483 /*
5482 * All tracepoints are from kernel-space. 5484 * All tracepoints are from kernel-space.
5483 */ 5485 */
@@ -6720,17 +6722,20 @@ __perf_event_exit_task(struct perf_event *child_event,
6720 struct perf_event_context *child_ctx, 6722 struct perf_event_context *child_ctx,
6721 struct task_struct *child) 6723 struct task_struct *child)
6722{ 6724{
6723 struct perf_event *parent_event; 6725 if (child_event->parent) {
6726 raw_spin_lock_irq(&child_ctx->lock);
6727 perf_group_detach(child_event);
6728 raw_spin_unlock_irq(&child_ctx->lock);
6729 }
6724 6730
6725 perf_remove_from_context(child_event); 6731 perf_remove_from_context(child_event);
6726 6732
6727 parent_event = child_event->parent;
6728 /* 6733 /*
6729 * It can happen that parent exits first, and has events 6734 * It can happen that the parent exits first, and has events
6730 * that are still around due to the child reference. These 6735 * that are still around due to the child reference. These
6731 * events need to be zapped - but otherwise linger. 6736 * events need to be zapped.
6732 */ 6737 */
6733 if (parent_event) { 6738 if (child_event->parent) {
6734 sync_child_event(child_event, child); 6739 sync_child_event(child_event, child);
6735 free_event(child_event); 6740 free_event(child_event);
6736 } 6741 }
diff --git a/kernel/trace/Kconfig b/kernel/trace/Kconfig
index 14674dce77a6..61d7d59f4a1a 100644
--- a/kernel/trace/Kconfig
+++ b/kernel/trace/Kconfig
@@ -275,7 +275,7 @@ config PROFILE_ANNOTATED_BRANCHES
275 This tracer profiles all the the likely and unlikely macros 275 This tracer profiles all the the likely and unlikely macros
276 in the kernel. It will display the results in: 276 in the kernel. It will display the results in:
277 277
278 /sys/kernel/debug/tracing/profile_annotated_branch 278 /sys/kernel/debug/tracing/trace_stat/branch_annotated
279 279
280 Note: this will add a significant overhead; only turn this 280 Note: this will add a significant overhead; only turn this
281 on if you need to profile the system's use of these macros. 281 on if you need to profile the system's use of these macros.
@@ -288,7 +288,7 @@ config PROFILE_ALL_BRANCHES
288 taken in the kernel is recorded whether it hit or miss. 288 taken in the kernel is recorded whether it hit or miss.
289 The results will be displayed in: 289 The results will be displayed in:
290 290
291 /sys/kernel/debug/tracing/profile_branch 291 /sys/kernel/debug/tracing/trace_stat/branch_all
292 292
293 This option also enables the likely/unlikely profiler. 293 This option also enables the likely/unlikely profiler.
294 294
diff --git a/kernel/trace/trace_events_filter.c b/kernel/trace/trace_events_filter.c
index 3249b4f77ef0..8008ddcfbf20 100644
--- a/kernel/trace/trace_events_filter.c
+++ b/kernel/trace/trace_events_filter.c
@@ -391,8 +391,8 @@ static int process_ops(struct filter_pred *preds,
391 struct filter_pred *op, void *rec) 391 struct filter_pred *op, void *rec)
392{ 392{
393 struct filter_pred *pred; 393 struct filter_pred *pred;
394 int match = 0;
394 int type; 395 int type;
395 int match;
396 int i; 396 int i;
397 397
398 /* 398 /*