On Fri, Feb 09, 2018 at 10:49:35AM -0500, Liang, Kan wrote: > > > On 2/9/2018 9:09 AM, Peter Zijlstra wrote: > > On Tue, Feb 06, 2018 at 12:58:23PM -0500, Liang, Kan wrote: > > > > > > > > > > With the exception of handling 'empty' buffers, I ended up with the > > > > below. Please try again. > > > > > > > > > > There are two small errors. After fixing them, the patch works well. > > > > Well, it still doesn't do A, two read()s without PEBS record in between. > > So that needs fixing. What 3/5 does, call x86_perf_event_update() after > > drain_pebs() is actively wrong after this patch. > > > > As my understanding, for case A, drain_pebs() will return immediately. It > cannot reach the patch. > Because there is no PEBS record ready. So the ds->pebs_index should be the > same as ds->pebs_buffer_base.
Right, so fix that. > 3/5 is to handle case A. 3/5 is terminatlly broken, you should not call x86_perf_event_update() on a auto-reload event _ever_ after my patch.