diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2011-03-18 13:38:34 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-03-18 13:38:34 -0400 |
commit | 619297855aa16646246ea4b1f6e05f1b2455c808 (patch) | |
tree | a07fe1b24c372f5eabf244555db41fdf574c1205 /kernel | |
parent | e16b396ce314b2bcdfe6c173fe075bf8e3432368 (diff) | |
parent | 1ef1d1c2353967e2d61ecaddf76edfd058a778b4 (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.c | 17 | ||||
-rw-r--r-- | kernel/trace/Kconfig | 4 | ||||
-rw-r--r-- | kernel/trace/trace_events_filter.c | 2 |
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 | /* |