aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
Diffstat (limited to 'arch')
-rw-r--r--arch/x86/kernel/cpu/perf_event_intel.c11
1 files changed, 5 insertions, 6 deletions
diff --git a/arch/x86/kernel/cpu/perf_event_intel.c b/arch/x86/kernel/cpu/perf_event_intel.c
index 12e811a7d747..c582449163fa 100644
--- a/arch/x86/kernel/cpu/perf_event_intel.c
+++ b/arch/x86/kernel/cpu/perf_event_intel.c
@@ -745,11 +745,11 @@ static int intel_pmu_handle_irq(struct pt_regs *regs)
745 745
746 cpuc = &__get_cpu_var(cpu_hw_events); 746 cpuc = &__get_cpu_var(cpu_hw_events);
747 747
748 perf_disable(); 748 intel_pmu_disable_all();
749 intel_pmu_drain_bts_buffer(); 749 intel_pmu_drain_bts_buffer();
750 status = intel_pmu_get_status(); 750 status = intel_pmu_get_status();
751 if (!status) { 751 if (!status) {
752 perf_enable(); 752 intel_pmu_enable_all();
753 return 0; 753 return 0;
754 } 754 }
755 755
@@ -759,8 +759,7 @@ again:
759 WARN_ONCE(1, "perfevents: irq loop stuck!\n"); 759 WARN_ONCE(1, "perfevents: irq loop stuck!\n");
760 perf_event_print_debug(); 760 perf_event_print_debug();
761 intel_pmu_reset(); 761 intel_pmu_reset();
762 perf_enable(); 762 goto done;
763 return 1;
764 } 763 }
765 764
766 inc_irq_stat(apic_perf_irqs); 765 inc_irq_stat(apic_perf_irqs);
@@ -790,8 +789,8 @@ again:
790 if (status) 789 if (status)
791 goto again; 790 goto again;
792 791
793 perf_enable(); 792done:
794 793 intel_pmu_enable_all();
795 return 1; 794 return 1;
796} 795}
797 796