Linus,

please pull the latest perf/urgent branch from:

   git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git 
perf-urgent-2020-12-06

up to:  fc17db8aa4c5: perf/x86/intel: Check PEBS status correctly


Two fixes for performance monitoring on X86:

    - Add recursion protection to another callchain invoked from
      x86_pmu_stop() which can recurse back into x86_pmu_stop(). The first
      attempt to fix this missed this extra code path.

    - Use the already filtered status variable to check for PEBS counter
      overflow bits and not the unfiltered full status read from
      IA32_PERF_GLOBAL_STATUS which can have unrelated bits check which
      would be evaluated incorrectly.


Thanks,

        tglx

------------------>
Namhyung Kim (1):
      perf/x86/intel: Fix a warning on x86_pmu_stop() with large PEBS

Stephane Eranian (1):
      perf/x86/intel: Check PEBS status correctly


 arch/x86/events/intel/ds.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/arch/x86/events/intel/ds.c b/arch/x86/events/intel/ds.c
index b47cc4226934..485c5066f8b8 100644
--- a/arch/x86/events/intel/ds.c
+++ b/arch/x86/events/intel/ds.c
@@ -1916,7 +1916,7 @@ static void intel_pmu_drain_pebs_nhm(struct pt_regs 
*iregs, struct perf_sample_d
                 * that caused the PEBS record. It's called collision.
                 * If collision happened, the record will be dropped.
                 */
-               if (p->status != (1ULL << bit)) {
+               if (pebs_status != (1ULL << bit)) {
                        for_each_set_bit(i, (unsigned long *)&pebs_status, size)
                                error[i]++;
                        continue;
@@ -1940,7 +1940,7 @@ static void intel_pmu_drain_pebs_nhm(struct pt_regs 
*iregs, struct perf_sample_d
                if (error[bit]) {
                        perf_log_lost_samples(event, error[bit]);
 
-                       if (perf_event_account_interrupt(event))
+                       if (iregs && perf_event_account_interrupt(event))
                                x86_pmu_stop(event, 0);
                }
 

Reply via email to