* [PATCH 30/54] perf intel-pt: Fix overlap detection to identify consecutive buffers correctly
2018-03-08 19:49 [GIT PULL 00/54] perf/core improvements and fixes Arnaldo Carvalho de Melo
@ 2018-03-08 19:50 ` Arnaldo Carvalho de Melo
2018-03-08 19:50 ` [PATCH 31/54] perf intel-pt: Fix sync_switch Arnaldo Carvalho de Melo
` (3 subsequent siblings)
4 siblings, 0 replies; 6+ messages in thread
From: Arnaldo Carvalho de Melo @ 2018-03-08 19:50 UTC (permalink / raw)
To: Ingo Molnar
Cc: linux-kernel, linux-perf-users, Adrian Hunter, Jiri Olsa, stable,
Arnaldo Carvalho de Melo
From: Adrian Hunter <adrian.hunter@intel.com>
Overlap detection was not not updating the buffer's 'consecutive' flag.
Marking buffers consecutive has the advantage that decoding begins from
the start of the buffer instead of the first PSB. Fix overlap detection
to identify consecutive buffers correctly.
Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: stable@vger.kernel.org
Link: http://lkml.kernel.org/r/1520431349-30689-2-git-send-email-adrian.hunter@intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
.../perf/util/intel-pt-decoder/intel-pt-decoder.c | 62 ++++++++++------------
.../perf/util/intel-pt-decoder/intel-pt-decoder.h | 2 +-
tools/perf/util/intel-pt.c | 5 +-
3 files changed, 34 insertions(+), 35 deletions(-)
diff --git a/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c b/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c
index aa1593ce551d..00f25f4b5f48 100644
--- a/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c
+++ b/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c
@@ -2390,14 +2390,6 @@ const struct intel_pt_state *intel_pt_decode(struct intel_pt_decoder *decoder)
return &decoder->state;
}
-static bool intel_pt_at_psb(unsigned char *buf, size_t len)
-{
- if (len < INTEL_PT_PSB_LEN)
- return false;
- return memmem(buf, INTEL_PT_PSB_LEN, INTEL_PT_PSB_STR,
- INTEL_PT_PSB_LEN);
-}
-
/**
* intel_pt_next_psb - move buffer pointer to the start of the next PSB packet.
* @buf: pointer to buffer pointer
@@ -2486,6 +2478,7 @@ static unsigned char *intel_pt_last_psb(unsigned char *buf, size_t len)
* @buf: buffer
* @len: size of buffer
* @tsc: TSC value returned
+ * @rem: returns remaining size when TSC is found
*
* Find a TSC packet in @buf and return the TSC value. This function assumes
* that @buf starts at a PSB and that PSB+ will contain TSC and so stops if a
@@ -2493,7 +2486,8 @@ static unsigned char *intel_pt_last_psb(unsigned char *buf, size_t len)
*
* Return: %true if TSC is found, false otherwise.
*/
-static bool intel_pt_next_tsc(unsigned char *buf, size_t len, uint64_t *tsc)
+static bool intel_pt_next_tsc(unsigned char *buf, size_t len, uint64_t *tsc,
+ size_t *rem)
{
struct intel_pt_pkt packet;
int ret;
@@ -2504,6 +2498,7 @@ static bool intel_pt_next_tsc(unsigned char *buf, size_t len, uint64_t *tsc)
return false;
if (packet.type == INTEL_PT_TSC) {
*tsc = packet.payload;
+ *rem = len;
return true;
}
if (packet.type == INTEL_PT_PSBEND)
@@ -2554,6 +2549,8 @@ static int intel_pt_tsc_cmp(uint64_t tsc1, uint64_t tsc2)
* @len_a: size of first buffer
* @buf_b: second buffer
* @len_b: size of second buffer
+ * @consecutive: returns true if there is data in buf_b that is consecutive
+ * to buf_a
*
* If the trace contains TSC we can look at the last TSC of @buf_a and the
* first TSC of @buf_b in order to determine if the buffers overlap, and then
@@ -2566,33 +2563,41 @@ static int intel_pt_tsc_cmp(uint64_t tsc1, uint64_t tsc2)
static unsigned char *intel_pt_find_overlap_tsc(unsigned char *buf_a,
size_t len_a,
unsigned char *buf_b,
- size_t len_b)
+ size_t len_b, bool *consecutive)
{
uint64_t tsc_a, tsc_b;
unsigned char *p;
- size_t len;
+ size_t len, rem_a, rem_b;
p = intel_pt_last_psb(buf_a, len_a);
if (!p)
return buf_b; /* No PSB in buf_a => no overlap */
len = len_a - (p - buf_a);
- if (!intel_pt_next_tsc(p, len, &tsc_a)) {
+ if (!intel_pt_next_tsc(p, len, &tsc_a, &rem_a)) {
/* The last PSB+ in buf_a is incomplete, so go back one more */
len_a -= len;
p = intel_pt_last_psb(buf_a, len_a);
if (!p)
return buf_b; /* No full PSB+ => assume no overlap */
len = len_a - (p - buf_a);
- if (!intel_pt_next_tsc(p, len, &tsc_a))
+ if (!intel_pt_next_tsc(p, len, &tsc_a, &rem_a))
return buf_b; /* No TSC in buf_a => assume no overlap */
}
while (1) {
/* Ignore PSB+ with no TSC */
- if (intel_pt_next_tsc(buf_b, len_b, &tsc_b) &&
- intel_pt_tsc_cmp(tsc_a, tsc_b) < 0)
- return buf_b; /* tsc_a < tsc_b => no overlap */
+ if (intel_pt_next_tsc(buf_b, len_b, &tsc_b, &rem_b)) {
+ int cmp = intel_pt_tsc_cmp(tsc_a, tsc_b);
+
+ /* Same TSC, so buffers are consecutive */
+ if (!cmp && rem_b >= rem_a) {
+ *consecutive = true;
+ return buf_b + len_b - (rem_b - rem_a);
+ }
+ if (cmp < 0)
+ return buf_b; /* tsc_a < tsc_b => no overlap */
+ }
if (!intel_pt_step_psb(&buf_b, &len_b))
return buf_b + len_b; /* No PSB in buf_b => no data */
@@ -2606,6 +2611,8 @@ static unsigned char *intel_pt_find_overlap_tsc(unsigned char *buf_a,
* @buf_b: second buffer
* @len_b: size of second buffer
* @have_tsc: can use TSC packets to detect overlap
+ * @consecutive: returns true if there is data in buf_b that is consecutive
+ * to buf_a
*
* When trace samples or snapshots are recorded there is the possibility that
* the data overlaps. Note that, for the purposes of decoding, data is only
@@ -2616,7 +2623,7 @@ static unsigned char *intel_pt_find_overlap_tsc(unsigned char *buf_a,
*/
unsigned char *intel_pt_find_overlap(unsigned char *buf_a, size_t len_a,
unsigned char *buf_b, size_t len_b,
- bool have_tsc)
+ bool have_tsc, bool *consecutive)
{
unsigned char *found;
@@ -2628,7 +2635,8 @@ unsigned char *intel_pt_find_overlap(unsigned char *buf_a, size_t len_a,
return buf_b; /* No overlap */
if (have_tsc) {
- found = intel_pt_find_overlap_tsc(buf_a, len_a, buf_b, len_b);
+ found = intel_pt_find_overlap_tsc(buf_a, len_a, buf_b, len_b,
+ consecutive);
if (found)
return found;
}
@@ -2643,28 +2651,16 @@ unsigned char *intel_pt_find_overlap(unsigned char *buf_a, size_t len_a,
}
/* Now len_b >= len_a */
- if (len_b > len_a) {
- /* The leftover buffer 'b' must start at a PSB */
- while (!intel_pt_at_psb(buf_b + len_a, len_b - len_a)) {
- if (!intel_pt_step_psb(&buf_a, &len_a))
- return buf_b; /* No overlap */
- }
- }
-
while (1) {
/* Potential overlap so check the bytes */
found = memmem(buf_a, len_a, buf_b, len_a);
- if (found)
+ if (found) {
+ *consecutive = true;
return buf_b + len_a;
+ }
/* Try again at next PSB in buffer 'a' */
if (!intel_pt_step_psb(&buf_a, &len_a))
return buf_b; /* No overlap */
-
- /* The leftover buffer 'b' must start at a PSB */
- while (!intel_pt_at_psb(buf_b + len_a, len_b - len_a)) {
- if (!intel_pt_step_psb(&buf_a, &len_a))
- return buf_b; /* No overlap */
- }
}
}
diff --git a/tools/perf/util/intel-pt-decoder/intel-pt-decoder.h b/tools/perf/util/intel-pt-decoder/intel-pt-decoder.h
index 921b22e8ca0e..fc1752d50019 100644
--- a/tools/perf/util/intel-pt-decoder/intel-pt-decoder.h
+++ b/tools/perf/util/intel-pt-decoder/intel-pt-decoder.h
@@ -117,7 +117,7 @@ const struct intel_pt_state *intel_pt_decode(struct intel_pt_decoder *decoder);
unsigned char *intel_pt_find_overlap(unsigned char *buf_a, size_t len_a,
unsigned char *buf_b, size_t len_b,
- bool have_tsc);
+ bool have_tsc, bool *consecutive);
int intel_pt__strerror(int code, char *buf, size_t buflen);
diff --git a/tools/perf/util/intel-pt.c b/tools/perf/util/intel-pt.c
index 3773d9c54f45..4a7746249999 100644
--- a/tools/perf/util/intel-pt.c
+++ b/tools/perf/util/intel-pt.c
@@ -207,14 +207,17 @@ static void intel_pt_dump_event(struct intel_pt *pt, unsigned char *buf,
static int intel_pt_do_fix_overlap(struct intel_pt *pt, struct auxtrace_buffer *a,
struct auxtrace_buffer *b)
{
+ bool consecutive = false;
void *start;
start = intel_pt_find_overlap(a->data, a->size, b->data, b->size,
- pt->have_tsc);
+ pt->have_tsc, &consecutive);
if (!start)
return -EINVAL;
b->use_size = b->data + b->size - start;
b->use_data = start;
+ if (b->use_size && consecutive)
+ b->consecutive = true;
return 0;
}
--
2.14.3
^ permalink raw reply related [flat|nested] 6+ messages in thread* [PATCH 31/54] perf intel-pt: Fix sync_switch
2018-03-08 19:49 [GIT PULL 00/54] perf/core improvements and fixes Arnaldo Carvalho de Melo
2018-03-08 19:50 ` [PATCH 30/54] perf intel-pt: Fix overlap detection to identify consecutive buffers correctly Arnaldo Carvalho de Melo
@ 2018-03-08 19:50 ` Arnaldo Carvalho de Melo
2018-03-08 19:50 ` [PATCH 32/54] perf intel-pt: Fix error recovery from missing TIP packet Arnaldo Carvalho de Melo
` (2 subsequent siblings)
4 siblings, 0 replies; 6+ messages in thread
From: Arnaldo Carvalho de Melo @ 2018-03-08 19:50 UTC (permalink / raw)
To: Ingo Molnar
Cc: linux-kernel, linux-perf-users, Adrian Hunter, Jiri Olsa, stable,
Arnaldo Carvalho de Melo
From: Adrian Hunter <adrian.hunter@intel.com>
sync_switch is a facility to synchronize decoding more closely with the
point in the kernel when the context actually switched.
The flag when sync_switch is enabled was global to the decoding, whereas
it is really specific to the CPU.
The trace data for different CPUs is put on different queues, so add
sync_switch to the intel_pt_queue structure and use that in preference
to the global setting in the intel_pt structure.
That fixes problems decoding one CPU's trace because sync_switch was
disabled on a different CPU's queue.
Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: stable@vger.kernel.org
Link: http://lkml.kernel.org/r/1520431349-30689-3-git-send-email-adrian.hunter@intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
tools/perf/util/intel-pt.c | 32 +++++++++++++++++++++++++-------
1 file changed, 25 insertions(+), 7 deletions(-)
diff --git a/tools/perf/util/intel-pt.c b/tools/perf/util/intel-pt.c
index 4a7746249999..0979a6e8b2b7 100644
--- a/tools/perf/util/intel-pt.c
+++ b/tools/perf/util/intel-pt.c
@@ -143,6 +143,7 @@ struct intel_pt_queue {
bool stop;
bool step_through_buffers;
bool use_buffer_pid_tid;
+ bool sync_switch;
pid_t pid, tid;
int cpu;
int switch_state;
@@ -963,10 +964,12 @@ static int intel_pt_setup_queue(struct intel_pt *pt,
if (pt->timeless_decoding || !pt->have_sched_switch)
ptq->use_buffer_pid_tid = true;
}
+
+ ptq->sync_switch = pt->sync_switch;
}
if (!ptq->on_heap &&
- (!pt->sync_switch ||
+ (!ptq->sync_switch ||
ptq->switch_state != INTEL_PT_SS_EXPECTING_SWITCH_EVENT)) {
const struct intel_pt_state *state;
int ret;
@@ -1549,7 +1552,7 @@ static int intel_pt_sample(struct intel_pt_queue *ptq)
if (pt->synth_opts.last_branch)
intel_pt_update_last_branch_rb(ptq);
- if (!pt->sync_switch)
+ if (!ptq->sync_switch)
return 0;
if (intel_pt_is_switch_ip(ptq, state->to_ip)) {
@@ -1630,6 +1633,21 @@ static u64 intel_pt_switch_ip(struct intel_pt *pt, u64 *ptss_ip)
return switch_ip;
}
+static void intel_pt_enable_sync_switch(struct intel_pt *pt)
+{
+ unsigned int i;
+
+ pt->sync_switch = true;
+
+ for (i = 0; i < pt->queues.nr_queues; i++) {
+ struct auxtrace_queue *queue = &pt->queues.queue_array[i];
+ struct intel_pt_queue *ptq = queue->priv;
+
+ if (ptq)
+ ptq->sync_switch = true;
+ }
+}
+
static int intel_pt_run_decoder(struct intel_pt_queue *ptq, u64 *timestamp)
{
const struct intel_pt_state *state = ptq->state;
@@ -1646,7 +1664,7 @@ static int intel_pt_run_decoder(struct intel_pt_queue *ptq, u64 *timestamp)
if (pt->switch_ip) {
intel_pt_log("switch_ip: %"PRIx64" ptss_ip: %"PRIx64"\n",
pt->switch_ip, pt->ptss_ip);
- pt->sync_switch = true;
+ intel_pt_enable_sync_switch(pt);
}
}
}
@@ -1662,9 +1680,9 @@ static int intel_pt_run_decoder(struct intel_pt_queue *ptq, u64 *timestamp)
if (state->err) {
if (state->err == INTEL_PT_ERR_NODATA)
return 1;
- if (pt->sync_switch &&
+ if (ptq->sync_switch &&
state->from_ip >= pt->kernel_start) {
- pt->sync_switch = false;
+ ptq->sync_switch = false;
intel_pt_next_tid(pt, ptq);
}
if (pt->synth_opts.errors) {
@@ -1690,7 +1708,7 @@ static int intel_pt_run_decoder(struct intel_pt_queue *ptq, u64 *timestamp)
state->timestamp, state->est_timestamp);
ptq->timestamp = state->est_timestamp;
/* Use estimated TSC in unknown switch state */
- } else if (pt->sync_switch &&
+ } else if (ptq->sync_switch &&
ptq->switch_state == INTEL_PT_SS_UNKNOWN &&
intel_pt_is_switch_ip(ptq, state->to_ip) &&
ptq->next_tid == -1) {
@@ -1837,7 +1855,7 @@ static int intel_pt_sync_switch(struct intel_pt *pt, int cpu, pid_t tid,
return 1;
ptq = intel_pt_cpu_to_ptq(pt, cpu);
- if (!ptq)
+ if (!ptq || !ptq->sync_switch)
return 1;
switch (ptq->switch_state) {
--
2.14.3
^ permalink raw reply related [flat|nested] 6+ messages in thread* [PATCH 32/54] perf intel-pt: Fix error recovery from missing TIP packet
2018-03-08 19:49 [GIT PULL 00/54] perf/core improvements and fixes Arnaldo Carvalho de Melo
2018-03-08 19:50 ` [PATCH 30/54] perf intel-pt: Fix overlap detection to identify consecutive buffers correctly Arnaldo Carvalho de Melo
2018-03-08 19:50 ` [PATCH 31/54] perf intel-pt: Fix sync_switch Arnaldo Carvalho de Melo
@ 2018-03-08 19:50 ` Arnaldo Carvalho de Melo
2018-03-08 19:50 ` [PATCH 33/54] perf intel-pt: Fix timestamp following overflow Arnaldo Carvalho de Melo
2018-03-09 7:29 ` [GIT PULL 00/54] perf/core improvements and fixes Ingo Molnar
4 siblings, 0 replies; 6+ messages in thread
From: Arnaldo Carvalho de Melo @ 2018-03-08 19:50 UTC (permalink / raw)
To: Ingo Molnar
Cc: linux-kernel, linux-perf-users, Adrian Hunter, Jiri Olsa, stable,
Arnaldo Carvalho de Melo
From: Adrian Hunter <adrian.hunter@intel.com>
When a TIP packet is expected but there is a different packet, it is an
error. However the unexpected packet might be something important like a
TSC packet, so after the error, it is necessary to continue from there,
rather than the next packet. That is achieved by setting pkt_step to
zero.
Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: stable@vger.kernel.org
Link: http://lkml.kernel.org/r/1520431349-30689-4-git-send-email-adrian.hunter@intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
tools/perf/util/intel-pt-decoder/intel-pt-decoder.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c b/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c
index 00f25f4b5f48..5e4d0bbafc8b 100644
--- a/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c
+++ b/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c
@@ -1616,6 +1616,7 @@ static int intel_pt_walk_fup_tip(struct intel_pt_decoder *decoder)
case INTEL_PT_PWRX:
intel_pt_log("ERROR: Missing TIP after FUP\n");
decoder->pkt_state = INTEL_PT_STATE_ERR3;
+ decoder->pkt_step = 0;
return -ENOENT;
case INTEL_PT_OVF:
--
2.14.3
^ permalink raw reply related [flat|nested] 6+ messages in thread* [PATCH 33/54] perf intel-pt: Fix timestamp following overflow
2018-03-08 19:49 [GIT PULL 00/54] perf/core improvements and fixes Arnaldo Carvalho de Melo
` (2 preceding siblings ...)
2018-03-08 19:50 ` [PATCH 32/54] perf intel-pt: Fix error recovery from missing TIP packet Arnaldo Carvalho de Melo
@ 2018-03-08 19:50 ` Arnaldo Carvalho de Melo
2018-03-09 7:29 ` [GIT PULL 00/54] perf/core improvements and fixes Ingo Molnar
4 siblings, 0 replies; 6+ messages in thread
From: Arnaldo Carvalho de Melo @ 2018-03-08 19:50 UTC (permalink / raw)
To: Ingo Molnar
Cc: linux-kernel, linux-perf-users, Adrian Hunter, Jiri Olsa, stable,
Arnaldo Carvalho de Melo
From: Adrian Hunter <adrian.hunter@intel.com>
timestamp_insn_cnt is used to estimate the timestamp based on the number of
instructions since the last known timestamp.
If the estimate is not accurate enough decoding might not be correctly
synchronized with side-band events causing more trace errors.
However there are always timestamps following an overflow, so the
estimate is not needed and can indeed result in more errors.
Suppress the estimate by setting timestamp_insn_cnt to zero.
Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: stable@vger.kernel.org
Link: http://lkml.kernel.org/r/1520431349-30689-5-git-send-email-adrian.hunter@intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
tools/perf/util/intel-pt-decoder/intel-pt-decoder.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c b/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c
index 5e4d0bbafc8b..f9157aed1289 100644
--- a/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c
+++ b/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c
@@ -1378,6 +1378,7 @@ static int intel_pt_overflow(struct intel_pt_decoder *decoder)
intel_pt_clear_tx_flags(decoder);
decoder->have_tma = false;
decoder->cbr = 0;
+ decoder->timestamp_insn_cnt = 0;
decoder->pkt_state = INTEL_PT_STATE_ERR_RESYNC;
decoder->overflow = true;
return -EOVERFLOW;
--
2.14.3
^ permalink raw reply related [flat|nested] 6+ messages in thread* Re: [GIT PULL 00/54] perf/core improvements and fixes
2018-03-08 19:49 [GIT PULL 00/54] perf/core improvements and fixes Arnaldo Carvalho de Melo
` (3 preceding siblings ...)
2018-03-08 19:50 ` [PATCH 33/54] perf intel-pt: Fix timestamp following overflow Arnaldo Carvalho de Melo
@ 2018-03-09 7:29 ` Ingo Molnar
4 siblings, 0 replies; 6+ messages in thread
From: Ingo Molnar @ 2018-03-09 7:29 UTC (permalink / raw)
To: Arnaldo Carvalho de Melo
Cc: linux-kernel, linux-perf-users, Adrian Hunter, Agustin Vega-Frias,
Alexander Shishkin, Andi Kleen, Changbin Du, David Ahern,
Heiko Carstens, Hendrik Brueckner, Jin Yao, Jiri Olsa, Kan Liang,
Lakshman Annadorai, linux-arm-kernel, Martin Schwidefsky,
Namhyung Kim, Peter Zijlstra, Ravi Bangoria, stable,
Stephane Eranian, Takashi Iwai, Thomas Richter, Timur Tabi,
Wang Nan, Wang YanQing, Arnaldo Carvalho de Melo
* Arnaldo Carvalho de Melo <acme@kernel.org> wrote:
> Hi Ingo,
>
> Please consider pulling,
>
> - Arnaldo
>
> Test results at the end of this message, as usual.
>
> The following changes since commit 3f986eefc89c528bf2d398a6dc3637b743a7139e:
>
> Merge branch 'perf/urgent' into perf/core, to resolve conflict (2018-03-07 09:23:12 +0100)
>
> are available in the Git repository at:
>
> git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux.git tags/perf-core-for-mingo-4.17-20180308
>
> for you to fetch changes up to 2427b432e63b4b911100f717c48289195b7a7d62:
>
> perf tools: Update quipper information (2018-03-08 11:30:54 -0300)
>
> ----------------------------------------------------------------
> perf/core improvements and fixes:
>
> - Support to display the IPC/Cycle in 'annotate' TUI, for systems
> where this info can be obtained, like Intel's >= Skylake (Jin Yao)
>
> - Support wildcards on PMU name in dynamic PMU events (Agustin Vega-Frias)
>
> - Display pmu name when printing unmerged events in stat (Agustin Vega-Frias)
>
> - Auto-merge PMU events created by prefix or glob match (Agustin Vega-Frias)
>
> - Fix s390 'call' operations target function annotation (Thomas Richter)
>
> - Handle s390 PC relative load and store instruction in the augmented
> 'annotate', code, used so far in the TUI modes of 'perf report' and
> 'perf annotate' (Thomas Richter)
>
> - Provide libtraceevent with a kernel symbol resolver, so that
> symbols in tracepoint fields can be resolved when showing them in
> tools such as 'perf report' (Wang YanQing)
>
> - Refactor the cgroups code to look more like other code in tools/perf,
> using cgroup__{put,get} for refcount operations instead of its
> open-coded equivalent, breaking larger functions, etc (Arnaldo Carvalho de Melo)
>
> - Implement support for the -G/--cgroup target in 'perf trace', allowing
> strace like tracing (plus other events, backtraces, etc) for cgroups
> (Arnaldo Carvalho de Melo)
>
> - Update thread shortname in 'perf sched map' when the thread's COMM
> changes (Changbin Du)
>
> - refcount 'struct mem_info', for better sharing it over several
> users, avoid duplicating structs and fixing crashes related to
> use after free (Jiri Olsa)
>
> - Display perf.data version, offsets in 'perf report --header' (Jiri Olsa)
>
> - Record the machine's memory topology information in a perf.data
> feature section, to be used by tools such as 'perf c2c' (Jiri Olsa)
>
> - Fix output of forced groups in the header for 'perf report' --stdio
> and --tui (Jiri Olsa)
>
> - Better support llvm, clang, cxx make tests in the build process (Jiri Olsa)
>
> - Streamline the 'struct perf_mmap' methods, storing some info in the
> struct instead of passing it via various methods, shortening its
> signatures (Kan Liang)
>
> - Update the quipper perf.data parser library site information (Stephane Eranian)
>
> - Correct perf's man pages title markers for asciidoctor (Takashi Iwai)
>
> - Intel PT fixes and refactorings paving the way for implementing
> support for AUX area sampling (Adrian Hunter)
>
> Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
>
> ----------------------------------------------------------------
> Adrian Hunter (13):
> perf record: Combine some auxtrace initialization into a single function
> perf auxtrace: Add missing parameters from kernel-doc comments
> perf auxtrace: Rename some buffer-queuing functions
> perf auxtrace: Make auxtrace_queues__add_buffer() return buffer_ptr
> perf intel-pt: Fix overlap detection to identify consecutive buffers correctly
> perf intel-pt: Fix sync_switch
> perf intel-pt: Fix error recovery from missing TIP packet
> perf intel-pt: Fix timestamp following overflow
> perf intel-pt/bts: In auxtrace_record__init_intel() evlist is never NULL
> perf intel-pt: Get rid of intel_pt_use_buffer_pid_tid()
> perf intel-pt: Tidy old_buffer handling in intel_pt_get_trace()
> perf intel-pt: Remove a check for sampling mode
> perf intel-pt: Adjust overlap-checking to support sampling mode
>
> Agustin Vega-Frias (3):
> perf pmu: Support wildcards on pmu name in dynamic pmu events
> perf pmu: Display pmu name when printing unmerged events in stat
> perf pmu: Auto-merge PMU events created by prefix or glob match
>
> Arnaldo Carvalho de Melo (11):
> perf cgroup: Remove misplaced __maybe_unused
> perf cgroup: Rename 'struct cgroup_sel' to 'struct cgroup'
> perf cgroup: Introduce cgroup__delete()
> perf cgroup: Rename close_cgroup() to cgroup__put()
> perf cgroup: Introduce cgroup__get()
> perf cgroup: Introduce find_cgroup() method
> perf cgroup: Introduce cgroup__new() out of open coded equivalent
> perf cgroup: Add evlist__findnew_cgroup()
> perf cgroup: Add evlist__add_default_cgroup()
> perf cgroup: Make the cgroup name be const char *
> perf trace: Support setting cgroups as targets
>
> Changbin Du (2):
> perf sched: Move thread::shortname to thread_runtime
> perf sched map: Re-annotate shortname if thread comm changed
>
> Jin Yao (1):
> perf annotate: Support to display the IPC/Cycle in TUI mode
>
> Jiri Olsa (11):
> perf report: Fix the output for stdio events list
> perf report: Display perf.data header info
> perf record: Move machine variable down the function
> perf record: Remove progname from struct record
> perf tools: Add refcnt into struct mem_info
> perf c2c: Use mem_info refcnt logic
> perf tools: Add MEM_TOPOLOGY feature to perf data file
> perf tools: Update tags with .cpp files
> perf build: Add llvm/clang/cxx make tests into FEATURE_TESTS_EXTRA
> perf build: Add llvm/clang make targets to FILES
> perf build: Force llvm/clang test compile output to .make.output
>
> Kan Liang (8):
> perf evlist: Store 'overwrite' in struct perf_mmap
> perf mmap: Store mmap scope in struct perf_mmap()
> perf mmap: Use the stored scope data in perf_mmap__push()
> perf mmap: Use the stored data in perf_mmap__read_event()
> perf mmap: Use stored 'overwrite' in perf_mmap__consume()
> perf mmap: Simplify perf_mmap__consume()
> perf mmap: Simplify perf_mmap__read_event()
> perf mmap: Simplify perf_mmap__read_init()
>
> Stephane Eranian (1):
> perf tools: Update quipper information
>
> Takashi Iwai (1):
> perf tools: Correct title markers for asciidoctor
>
> Thomas Richter (2):
> perf annotate: Fix s390 target function disassembly
> perf annotate: Handle s390 PC relative load and store instruction.
>
> Wang YanQing (1):
> perf report: Provide libtraceevent with a kernel symbol resolver
>
> tools/build/Makefile.feature | 6 +-
> tools/build/feature/Makefile | 14 +-
> tools/include/linux/bitmap.h | 2 +-
> tools/perf/Documentation/perf-data.txt | 2 +-
> tools/perf/Documentation/perf-ftrace.txt | 2 +-
> tools/perf/Documentation/perf-kallsyms.txt | 2 +-
> tools/perf/Documentation/perf-list.txt | 8 +-
> tools/perf/Documentation/perf-sched.txt | 2 +-
> tools/perf/Documentation/perf-script-perl.txt | 2 +-
> tools/perf/Documentation/perf-stat.txt | 17 ++
> tools/perf/Documentation/perf-trace.txt | 25 ++
> tools/perf/Documentation/perf.data-file-format.txt | 7 +-
> tools/perf/Makefile.perf | 6 +-
> tools/perf/arch/s390/annotate/instructions.c | 116 +++++++-
> tools/perf/arch/x86/tests/perf-time-to-tsc.c | 7 +-
> tools/perf/arch/x86/util/auxtrace.c | 14 +-
> tools/perf/builtin-annotate.c | 88 +++++-
> tools/perf/builtin-c2c.c | 24 +-
> tools/perf/builtin-kvm.c | 9 +-
> tools/perf/builtin-record.c | 45 +--
> tools/perf/builtin-report.c | 26 +-
> tools/perf/builtin-sched.c | 133 ++++++---
> tools/perf/builtin-stat.c | 29 +-
> tools/perf/builtin-top.c | 7 +-
> tools/perf/builtin-trace.c | 57 +++-
> tools/perf/tests/backward-ring-buffer.c | 5 +-
> tools/perf/tests/bpf.c | 5 +-
> tools/perf/tests/code-reading.c | 7 +-
> tools/perf/tests/keep-tracking.c | 7 +-
> tools/perf/tests/mmap-basic.c | 7 +-
> tools/perf/tests/openat-syscall-tp-fields.c | 7 +-
> tools/perf/tests/perf-record.c | 7 +-
> tools/perf/tests/sw-clock.c | 7 +-
> tools/perf/tests/switch-tracking.c | 7 +-
> tools/perf/tests/task-exit.c | 7 +-
> tools/perf/ui/browsers/hists.c | 5 +-
> tools/perf/util/annotate.c | 2 +-
> tools/perf/util/auxtrace.c | 37 ++-
> tools/perf/util/auxtrace.h | 2 +
> tools/perf/util/cgroup.c | 111 +++++---
> tools/perf/util/cgroup.h | 13 +-
> tools/perf/util/env.h | 9 +
> tools/perf/util/evlist.c | 8 +-
> tools/perf/util/evsel.c | 23 +-
> tools/perf/util/evsel.h | 6 +-
> tools/perf/util/header.c | 312 ++++++++++++++++++++-
> tools/perf/util/header.h | 1 +
> tools/perf/util/hist.c | 4 +-
> .../perf/util/intel-pt-decoder/intel-pt-decoder.c | 64 ++---
> .../perf/util/intel-pt-decoder/intel-pt-decoder.h | 2 +-
> tools/perf/util/intel-pt.c | 110 ++++----
> tools/perf/util/machine.c | 2 +-
> tools/perf/util/mmap.c | 63 ++---
> tools/perf/util/mmap.h | 16 +-
> tools/perf/util/parse-events.c | 21 +-
> tools/perf/util/parse-events.h | 2 +-
> tools/perf/util/parse-events.l | 2 +-
> tools/perf/util/parse-events.y | 18 +-
> tools/perf/util/python.c | 7 +-
> tools/perf/util/symbol.c | 22 ++
> tools/perf/util/symbol.h | 19 +-
> tools/perf/util/thread.h | 1 -
> 62 files changed, 1197 insertions(+), 401 deletions(-)
Pulled, thanks a lot Arnaldo!
Ingo
^ permalink raw reply [flat|nested] 6+ messages in thread