GLOBAL_STATUS_LBRS_FROZEN);
        if (!status)
                goto done;
+       /*
+        * In case multiple PEBS events are sampled at the same time,
+        * it is possible to have GLOBAL_STATUS bit 62 set indicating
+        * PEBS buffer overflow and also seeing at most 3 PEBS counters
+        * having their bits set in the status register. This is a sign
+        * that there was at least one PEBS record pending at the time
+        * of the PMU interrupt. PEBS counters must only be processed
+        * via the drain_pebs() calls and not via the regular sample
+        * processing loop coming after that the function, otherwise
+        * phony regular samples may be generated in the sampling buffer
+        * not marked with the EXACT tag. Another possibility is to have
+        * one PEBS event and at least one non-PEBS event whic hoverflows
+        * while PEBS has armed. In this case, bit 62 of GLOBAL_STATUS will
+        * not be set, yet the overflow status bit for the PEBS counter will
+        * be on Skylake.
+        *
+        * To avoid this problem, we systematically ignore the PEBS-enabled
+        * counters from the GLOBAL_STATUS mask and we always process PEBS
+        * events via drain_pebs().
+        */
+       status &= ~cpuc->pebs_enabled;
 
        /*
         * PEBS overflow sets bit 62 in the global status register
        if (__test_and_clear_bit(62, (unsigned long *)&status)) {
                handled++;
                x86_pmu.drain_pebs(regs);
-               /*
-                * There are cases where, even though, the PEBS ovfl bit is set
-                * in GLOBAL_OVF_STATUS, the PEBS events may also have their
-                * overflow bits set for their counters. We must clear them
-                * here because they have been processed as exact samples in
-                * the drain_pebs() routine. They must not be processed again
-                * in the for_each_bit_set() loop for regular samples below.
-                */
-               status &= ~cpuc->pebs_enabled;
                status &= x86_pmu.intel_ctrl | GLOBAL_STATUS_TRACE_TOPAPMI;
        }