aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndi Kleen <ak@linux.intel.com>2015-05-10 15:22:47 -0400
committerIngo Molnar <mingo@kernel.org>2015-08-04 04:16:58 -0400
commit0f29e573dd32bb8598e74271454e97c962da5e05 (patch)
tree25904b376ec79d87574bccbf8a8e0a3cf463ad44
parentd8020bee1d0caa90e7b9d6f39ac1fdfaaee7f67f (diff)
perf/x86/intel: Move PMU ACK to after LBR read
With Arch Perfmon v4 the PMU ack unfreezes the LBRs. So we need to do the PMU ack after the LBR reading, otherwise the LBRs would be polluted by the PMI handler. This is a minimal change. In principle the ACK could be moved much later. Signed-off-by: Andi Kleen <ak@linux.intel.com> Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: eranian@google.com Link: http://lkml.kernel.org/r/1431285767-27027-10-git-send-email-andi@firstfloor.org Signed-off-by: Ingo Molnar <mingo@kernel.org>
-rw-r--r--arch/x86/kernel/cpu/perf_event_intel.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/arch/x86/kernel/cpu/perf_event_intel.c b/arch/x86/kernel/cpu/perf_event_intel.c
index 52c9ded70f6c..da93b4bde963 100644
--- a/arch/x86/kernel/cpu/perf_event_intel.c
+++ b/arch/x86/kernel/cpu/perf_event_intel.c
@@ -1594,6 +1594,7 @@ static int intel_pmu_handle_irq(struct pt_regs *regs)
1594 1594
1595 loops = 0; 1595 loops = 0;
1596again: 1596again:
1597 intel_pmu_lbr_read();
1597 intel_pmu_ack_status(status); 1598 intel_pmu_ack_status(status);
1598 if (++loops > 100) { 1599 if (++loops > 100) {
1599 static bool warned = false; 1600 static bool warned = false;
@@ -1608,7 +1609,6 @@ again:
1608 1609
1609 inc_irq_stat(apic_perf_irqs); 1610 inc_irq_stat(apic_perf_irqs);
1610 1611
1611 intel_pmu_lbr_read();
1612 1612
1613 /* 1613 /*
1614 * Ignore a range of extra bits in status that do not indicate 1614 * Ignore a range of extra bits in status that do not indicate