diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2010-10-05 11:57:37 -0700 | 
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-10-05 11:57:37 -0700 | 
| commit | 39c12be86aaedd2f81bfb2236aca5333a2334dea (patch) | |
| tree | ba3edacaa130bc875813674ed960b100c9158e64 | |
| parent | 231d0aefd88e94129cb8fb84794f9bb788c6366e (diff) | |
| parent | 0f940cb7d970f4fd569bb5f9f49774422f2ccbee (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:
  perf trace scripting: Fix extern struct definitions
  perf ui hist browser: Fix segfault on 'a' for annotate
  perf tools: Fix build breakage
  perf, x86: Handle in flight NMIs on P4 platform
  oprofile, ARM: Release resources on failure
  oprofile: Add Support for Intel CPU Family 6 / Model 29
| -rw-r--r-- | arch/arm/oprofile/common.c | 7 | ||||
| -rw-r--r-- | arch/x86/kernel/cpu/perf_event_p4.c | 6 | ||||
| -rw-r--r-- | arch/x86/oprofile/nmi_int.c | 1 | ||||
| -rw-r--r-- | tools/perf/Makefile | 2 | ||||
| -rw-r--r-- | tools/perf/util/trace-event-scripting.c | 4 | ||||
| -rw-r--r-- | tools/perf/util/ui/browsers/hists.c | 2 | 
6 files changed, 15 insertions, 7 deletions
| diff --git a/arch/arm/oprofile/common.c b/arch/arm/oprofile/common.c index 0691176899ff..72e09eb642dd 100644 --- a/arch/arm/oprofile/common.c +++ b/arch/arm/oprofile/common.c @@ -102,6 +102,7 @@ static int op_create_counter(int cpu, int event)  	if (IS_ERR(pevent)) {  		ret = PTR_ERR(pevent);  	} else if (pevent->state != PERF_EVENT_STATE_ACTIVE) { +		perf_event_release_kernel(pevent);  		pr_warning("oprofile: failed to enable event %d "  				"on CPU %d\n", event, cpu);  		ret = -EBUSY; @@ -365,6 +366,7 @@ int __init oprofile_arch_init(struct oprofile_operations *ops)  	ret = init_driverfs();  	if (ret) {  		kfree(counter_config); +		counter_config = NULL;  		return ret;  	} @@ -402,7 +404,6 @@ void oprofile_arch_exit(void)  	struct perf_event *event;  	if (*perf_events) { -		exit_driverfs();  		for_each_possible_cpu(cpu) {  			for (id = 0; id < perf_num_counters; ++id) {  				event = perf_events[cpu][id]; @@ -413,8 +414,10 @@ void oprofile_arch_exit(void)  		}  	} -	if (counter_config) +	if (counter_config) {  		kfree(counter_config); +		exit_driverfs(); +	}  }  #else  int __init oprofile_arch_init(struct oprofile_operations *ops) diff --git a/arch/x86/kernel/cpu/perf_event_p4.c b/arch/x86/kernel/cpu/perf_event_p4.c index b560db3305be..249015173992 100644 --- a/arch/x86/kernel/cpu/perf_event_p4.c +++ b/arch/x86/kernel/cpu/perf_event_p4.c @@ -660,8 +660,12 @@ static int p4_pmu_handle_irq(struct pt_regs *regs)  	for (idx = 0; idx < x86_pmu.num_counters; idx++) {  		int overflow; -		if (!test_bit(idx, cpuc->active_mask)) +		if (!test_bit(idx, cpuc->active_mask)) { +			/* catch in-flight IRQs */ +			if (__test_and_clear_bit(idx, cpuc->running)) +				handled++;  			continue; +		}  		event = cpuc->events[idx];  		hwc = &event->hw; diff --git a/arch/x86/oprofile/nmi_int.c b/arch/x86/oprofile/nmi_int.c index 009b819f48d0..f1575c9a2572 100644 --- a/arch/x86/oprofile/nmi_int.c +++ b/arch/x86/oprofile/nmi_int.c @@ -674,6 +674,7 @@ static int __init ppro_init(char **cpu_type)  	case 0x0f:  	case 0x16:  	case 0x17: +	case 0x1d:  		*cpu_type = "i386/core_2";  		break;  	case 0x1a: diff --git a/tools/perf/Makefile b/tools/perf/Makefile index 4f1fa77c1feb..1950e19af1cf 100644 --- a/tools/perf/Makefile +++ b/tools/perf/Makefile @@ -1017,7 +1017,7 @@ builtin-revert.o wt-status.o: wt-status.h  # we compile into subdirectories. if the target directory is not the source directory, they might not exists. So  # we depend the various files onto their directories.  DIRECTORY_DEPS = $(LIB_OBJS) $(BUILTIN_OBJS) $(OUTPUT)PERF-VERSION-FILE $(OUTPUT)common-cmds.h -$(DIRECTORY_DEPS): $(sort $(dir $(DIRECTORY_DEPS))) +$(DIRECTORY_DEPS): | $(sort $(dir $(DIRECTORY_DEPS)))  # In the second step, we make a rule to actually create these directories  $(sort $(dir $(DIRECTORY_DEPS))):  	$(QUIET_MKDIR)$(MKDIR) -p $@ 2>/dev/null diff --git a/tools/perf/util/trace-event-scripting.c b/tools/perf/util/trace-event-scripting.c index 7ea983acfaea..f7af2fca965d 100644 --- a/tools/perf/util/trace-event-scripting.c +++ b/tools/perf/util/trace-event-scripting.c @@ -97,7 +97,7 @@ void setup_python_scripting(void)  	register_python_scripting(&python_scripting_unsupported_ops);  }  #else -struct scripting_ops python_scripting_ops; +extern struct scripting_ops python_scripting_ops;  void setup_python_scripting(void)  { @@ -158,7 +158,7 @@ void setup_perl_scripting(void)  	register_perl_scripting(&perl_scripting_unsupported_ops);  }  #else -struct scripting_ops perl_scripting_ops; +extern struct scripting_ops perl_scripting_ops;  void setup_perl_scripting(void)  { diff --git a/tools/perf/util/ui/browsers/hists.c b/tools/perf/util/ui/browsers/hists.c index dafdf6775d77..6866aa4c41e0 100644 --- a/tools/perf/util/ui/browsers/hists.c +++ b/tools/perf/util/ui/browsers/hists.c @@ -773,7 +773,7 @@ int hists__browse(struct hists *self, const char *helpline, const char *ev_name)  			switch (key) {  			case 'a': -				if (browser->selection->map == NULL && +				if (browser->selection->map == NULL ||  				    browser->selection->map->dso->annotate_warned)  					continue;  				goto do_annotate; | 
