From: tip-bot for Alexander Shishkin <tipbot@zytor.com>
To: linux-tip-commits@vger.kernel.org
Cc: tglx@linutronix.de, alexander.shishkin@linux.intel.com,
peterz@infradead.org, paulus@samba.org,
linux-kernel@vger.kernel.org, torvalds@linux-foundation.org,
hpa@zytor.com, mingo@kernel.org
Subject: [tip:perf/core] perf/x86/intel/pt: Untangle pt_buffer_reset_markers()
Date: Wed, 27 May 2015 03:02:21 -0700 [thread overview]
Message-ID: <tip-f73ec48c90016f89d05726f6c48e66991a790fd7@git.kernel.org> (raw)
In-Reply-To: <1432308626-18845-4-git-send-email-alexander.shishkin@linux.intel.com>
Commit-ID: f73ec48c90016f89d05726f6c48e66991a790fd7
Gitweb: http://git.kernel.org/tip/f73ec48c90016f89d05726f6c48e66991a790fd7
Author: Alexander Shishkin <alexander.shishkin@linux.intel.com>
AuthorDate: Fri, 22 May 2015 18:30:22 +0300
Committer: Ingo Molnar <mingo@kernel.org>
CommitDate: Wed, 27 May 2015 09:16:20 +0200
perf/x86/intel/pt: Untangle pt_buffer_reset_markers()
Currently, pt_buffer_reset_markers() is a difficult to read knot of
arithmetics with a redundant check for multiple-entry TOPA capability,
a commented out wakeup marker placement and a logical error wrt to
stop marker placement. The latter happens when write head is not page
aligned and results in stop marker being placed one page earlier than
it actually should.
All these problems only affect PT implementations that support
multiple-entry TOPA tables (read: proper scatter-gather).
For single-entry TOPA implementations, there is no functional impact.
This patch deals with all of the above. Tested on both single-entry
and multiple-entry TOPA PT implementations.
Signed-off-by: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Signed-off-by: Peter 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/1432308626-18845-4-git-send-email-alexander.shishkin@linux.intel.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
---
arch/x86/kernel/cpu/perf_event_intel_pt.c | 34 ++++++++++++++++++++-----------
1 file changed, 22 insertions(+), 12 deletions(-)
diff --git a/arch/x86/kernel/cpu/perf_event_intel_pt.c b/arch/x86/kernel/cpu/perf_event_intel_pt.c
index ffe666c..5b804f9 100644
--- a/arch/x86/kernel/cpu/perf_event_intel_pt.c
+++ b/arch/x86/kernel/cpu/perf_event_intel_pt.c
@@ -615,7 +615,8 @@ static int pt_buffer_reset_markers(struct pt_buffer *buf,
struct perf_output_handle *handle)
{
- unsigned long idx, npages, end;
+ unsigned long head = local64_read(&buf->head);
+ unsigned long idx, npages, wakeup;
if (buf->snapshot)
return 0;
@@ -634,17 +635,26 @@ static int pt_buffer_reset_markers(struct pt_buffer *buf,
buf->topa_index[buf->stop_pos]->stop = 0;
buf->topa_index[buf->intr_pos]->intr = 0;
- if (pt_cap_get(PT_CAP_topa_multiple_entries)) {
- npages = (handle->size + 1) >> PAGE_SHIFT;
- end = (local64_read(&buf->head) >> PAGE_SHIFT) + npages;
- /*if (end > handle->wakeup >> PAGE_SHIFT)
- end = handle->wakeup >> PAGE_SHIFT;*/
- idx = end & (buf->nr_pages - 1);
- buf->stop_pos = idx;
- idx = (local64_read(&buf->head) >> PAGE_SHIFT) + npages - 1;
- idx &= buf->nr_pages - 1;
- buf->intr_pos = idx;
- }
+ /* how many pages till the STOP marker */
+ npages = handle->size >> PAGE_SHIFT;
+
+ /* if it's on a page boundary, fill up one more page */
+ if (!offset_in_page(head + handle->size + 1))
+ npages++;
+
+ idx = (head >> PAGE_SHIFT) + npages;
+ idx &= buf->nr_pages - 1;
+ buf->stop_pos = idx;
+
+ wakeup = handle->wakeup >> PAGE_SHIFT;
+
+ /* in the worst case, wake up the consumer one page before hard stop */
+ idx = (head >> PAGE_SHIFT) + npages - 1;
+ if (idx > wakeup)
+ idx = wakeup;
+
+ idx &= buf->nr_pages - 1;
+ buf->intr_pos = idx;
buf->topa_index[buf->stop_pos]->stop = 1;
buf->topa_index[buf->intr_pos]->intr = 1;
next prev parent reply other threads:[~2015-05-27 10:02 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-05-22 15:30 [PATCH v1 0/7] perf/x86/intel/pt: Fixes and cleanups Alexander Shishkin
2015-05-22 15:30 ` [PATCH v1 1/7] perf: Disallow sparse AUX allocations for non-SG PMUs in overwrite mode Alexander Shishkin
2015-05-27 10:02 ` [tip:perf/core] " tip-bot for Alexander Shishkin
2015-05-22 15:30 ` [PATCH v1 2/7] perf/x86/intel/pt: Kill an unused variable Alexander Shishkin
2015-05-22 15:30 ` [PATCH v1 3/7] perf/x86/intel/pt: Untangle pt_buffer_reset_markers() Alexander Shishkin
2015-05-27 10:02 ` tip-bot for Alexander Shishkin [this message]
2015-05-22 15:30 ` [PATCH v1 4/7] perf/x86/intel/pt: Document pt_buffer_reset_markers() Alexander Shishkin
2015-05-22 15:30 ` [PATCH v1 5/7] perf/x86/intel/pt: Document pt_buffer_reset_offsets() Alexander Shishkin
2015-05-22 15:30 ` [PATCH v1 6/7] perf/x86/intel/pt: Kill pt_is_running() Alexander Shishkin
2015-05-22 15:30 ` [PATCH v1 7/7] perf/x86/intel/pt: Remove an extra variable declaration Alexander Shishkin
2015-05-27 10:08 ` [tip:perf/core] perf/x86/intel/pt: Remove redundant " tip-bot for Alexander Shishkin
2015-05-22 17:04 ` [PATCH v1 0/7] perf/x86/intel/pt: Fixes and cleanups Alexander Shishkin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=tip-f73ec48c90016f89d05726f6c48e66991a790fd7@git.kernel.org \
--to=tipbot@zytor.com \
--cc=alexander.shishkin@linux.intel.com \
--cc=hpa@zytor.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-tip-commits@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=paulus@samba.org \
--cc=peterz@infradead.org \
--cc=tglx@linutronix.de \
--cc=torvalds@linux-foundation.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).