Commit cf302bfd authored by Alexander Shishkin's avatar Alexander Shishkin Committed by Ingo Molnar

perf/x86/intel/pt: Document pt_buffer_reset_markers()

The comments in the driver don't make it absolutely clear as to what
exactly is the calling order and other possible constraints of buffer
management functions.

Document constraints and calling order for the buffer configuration
functions. While at it, replace a redundant check in
pt_buffer_reset_markers() with an explanation why it is not needed.
Signed-off-by: default avatarAlexander Shishkin <alexander.shishkin@linux.intel.com>
Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: acme@infradead.org
Cc: adrian.hunter@intel.com
Cc: hpa@zytor.com
Link: http://lkml.kernel.org/r/1429622177-22843-4-git-send-email-alexander.shishkin@linux.intel.comSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
parent 74387bcb
...@@ -609,7 +609,12 @@ static unsigned int pt_topa_next_entry(struct pt_buffer *buf, unsigned int pg) ...@@ -609,7 +609,12 @@ static unsigned int pt_topa_next_entry(struct pt_buffer *buf, unsigned int pg)
* @handle: Current output handle. * @handle: Current output handle.
* *
* Place INT and STOP marks to prevent overwriting old data that the consumer * Place INT and STOP marks to prevent overwriting old data that the consumer
* hasn't yet collected. * hasn't yet collected and waking up the consumer after a certain fraction of
* the buffer has filled up. Only needed and sensible for non-snapshot counters.
*
* This obviously relies on buf::head to figure out buffer markers, so it has
* to be called after pt_buffer_reset_offsets() and before the hardware tracing
* is enabled.
*/ */
static int pt_buffer_reset_markers(struct pt_buffer *buf, static int pt_buffer_reset_markers(struct pt_buffer *buf,
struct perf_output_handle *handle) struct perf_output_handle *handle)
...@@ -618,9 +623,6 @@ static int pt_buffer_reset_markers(struct pt_buffer *buf, ...@@ -618,9 +623,6 @@ static int pt_buffer_reset_markers(struct pt_buffer *buf,
unsigned long head = local64_read(&buf->head); unsigned long head = local64_read(&buf->head);
unsigned long idx, npages, wakeup; unsigned long idx, npages, wakeup;
if (buf->snapshot)
return 0;
/* can't stop in the middle of an output region */ /* can't stop in the middle of an output region */
if (buf->output_off + handle->size + 1 < if (buf->output_off + handle->size + 1 <
sizes(TOPA_ENTRY(buf->cur, buf->cur_idx)->size)) sizes(TOPA_ENTRY(buf->cur, buf->cur_idx)->size))
...@@ -901,6 +903,7 @@ void intel_pt_interrupt(void) ...@@ -901,6 +903,7 @@ void intel_pt_interrupt(void)
} }
pt_buffer_reset_offsets(buf, pt->handle.head); pt_buffer_reset_offsets(buf, pt->handle.head);
/* snapshot counters don't use PMI, so it's safe */
ret = pt_buffer_reset_markers(buf, &pt->handle); ret = pt_buffer_reset_markers(buf, &pt->handle);
if (ret) { if (ret) {
perf_aux_output_end(&pt->handle, 0, true); perf_aux_output_end(&pt->handle, 0, true);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment