lkml.org 
[lkml]   [2016]   [May]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.5 01/87] perf/x86/intel/pt: Generate PMI in the STOP region as well
    Date
    4.5-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Alexander Shishkin <alexander.shishkin@linux.intel.com>

    commit ab92b232ae05c382c3df0e3d6a5c6d16b639ac8c upstream.

    Currently, the PT driver always sets the PMI bit one region (page) before
    the STOP region so that we can wake up the consumer before we run out of
    room in the buffer and have to disable the event. However, we also need
    an interrupt in the last output region, so that we actually get to disable
    the event (if no more room from new data is available at that point),
    otherwise hardware just quietly refuses to start, but the event is
    scheduled in and we end up losing trace data till the event gets removed.

    For a cpu-wide event it is even worse since there may not be any
    re-scheduling at all and no chance for the ring buffer code to notice
    that its buffer is filled up and the event needs to be disabled (so that
    the consumer can re-enable it when it finishes reading the data out). In
    other words, all the trace data will be lost after the buffer gets filled
    up.

    This patch makes PT also generate a PMI when the last output region is
    full.

    Reported-by: Markus Metzger <markus.t.metzger@intel.com>
    Signed-off-by: Alexander Shishkin <alexander.shishkin@linux.intel.com>
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Cc: Arnaldo Carvalho de Melo <acme@infradead.org>
    Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
    Cc: Borislav Petkov <bp@alien8.de>
    Cc: Jiri Olsa <jolsa@redhat.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Stephane Eranian <eranian@google.com>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Vince Weaver <vincent.weaver@maine.edu>
    Cc: vince@deater.net
    Link: http://lkml.kernel.org/r/1462886313-13660-2-git-send-email-alexander.shishkin@linux.intel.com
    Signed-off-by: Ingo Molnar <mingo@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    --- a/arch/x86/kernel/cpu/perf_event_intel_pt.c
    +++ b/arch/x86/kernel/cpu/perf_event_intel_pt.c
    @@ -709,6 +709,7 @@ static int pt_buffer_reset_markers(struct pt_buffer *buf,

    /* clear STOP and INT from current entry */
    buf->topa_index[buf->stop_pos]->stop = 0;
    + buf->topa_index[buf->stop_pos]->intr = 0;
    buf->topa_index[buf->intr_pos]->intr = 0;

    /* how many pages till the STOP marker */
    @@ -733,6 +734,7 @@ static int pt_buffer_reset_markers(struct pt_buffer *buf,
    buf->intr_pos = idx;

    buf->topa_index[buf->stop_pos]->stop = 1;
    + buf->topa_index[buf->stop_pos]->intr = 1;
    buf->topa_index[buf->intr_pos]->intr = 1;

    return 0;

    \
     
     \ /
      Last update: 2016-05-31 00:01    [W:4.215 / U:0.028 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site