On Tue, Nov 24, 2020 at 12:19:34AM -0800, Stephane Eranian wrote: > Hi, > > Another remark on the PEBS drainage code, it seems to me like a test > is not quite correct: > intel_pmu_drain_pebs_nhm() > { > ... > if (p->status != (1ULL << bit)) { > for_each_set_bit(i, (unsigned long *)&pebs_status, > size) > error[i]++; > continue; > } > > The kernel cannot disambiguate when 2+ PEBS counters overflow at the > same time. This is what the comment for this code suggests. > However, I see the comparison is done with the unfiltered p->status > which is a copy of IA32_PERF_GLOBAL_STATUS at the time of > the sample. This register contains more than the PEBS counter overflow > bits. It also includes many other bits which could also be set. > > Shouldn't this test use pebs_status instead (which covers only the > PEBS counters)?
Hmm, yes, think so.