RO mmap()s don't update the tail pointer, so
comparing against it for determining the written data
size doesn't really do any good.
Keep track of when we last did a wakeup, and compare
against that.
Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Mike Galbraith <efault@gmx.de>
Cc: Steven Rostedt <rostedt@goodmis.org>
LKML-Reference: <
20100521090710.
684479310@chello.nl>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
 
        local_t                         head;           /* write position    */
        local_t                         nest;           /* nested writers    */
        local_t                         events;         /* event limit       */
-       local_t                         wakeup;         /* needs a wakeup    */
+       local_t                         wakeup;         /* wakeup stamp      */
        local_t                         lost;           /* nr records lost   */
 
        long                            watermark;      /* wakeup watermark  */
 
        handle->offset  = offset;
        handle->head    = head;
 
-       if (head - tail > data->watermark)
-               local_inc(&data->wakeup);
+       if (head - local_read(&data->wakeup) > data->watermark)
+               local_add(data->watermark, &data->wakeup);
 
        if (have_lost) {
                lost_event.header.type = PERF_RECORD_LOST;