lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <1463182576-6035-1-git-send-email-mathieu.poirier@linaro.org>
Date:	Fri, 13 May 2016 17:36:16 -0600
From:	Mathieu Poirier <mathieu.poirier@...aro.org>
To:	acme@...nel.org
Cc:	alexander.shishkin@...ux.intel.com, jolsa@...nel.org,
	linux-kernel@...r.kernel.org
Subject: [RFC PATCH] perf session: fixing uninitialised cpumode

The following patch[1] adds a new "cpumode" to the perf_sample
structure that gets initialised as events are read from the data
event file.

With the advent of HW tracers and more specifically the decoding of
the traces they generate, function perf_session__deliver_synth_event()
gets called directly from the infrastructure that decodes the traces,
for example[2].

As such initialisation of perf_sample::cpumode doesn't get done, which
prevents the shared object name from being printed in the perf report
output.

Before this patch:

     4.13%     4.13%  uname    [unknown]         [H] 0x0000007fae8b4758
     3.74%     3.74%  uname    [unknown]         [H] 0x0000007fae8b4e50
     2.06%     2.06%  uname    [unknown]         [H] 0x0000007fae938af4
     1.65%     1.65%  uname    [unknown]         [H] 0x0000007fae938ae4
     1.59%     1.59%  uname    [unknown]         [H] 0x0000007fae98f7f4
     1.50%     1.50%  uname    [unknown]         [H] 0x0000007fae8b4e40
     1.43%     1.43%  uname    [unknown]         [H] 0x0000007fae938ac4
     1.31%     1.31%  uname    [unknown]         [H] 0x0000007fae86b0c0
     1.26%     1.26%  uname    [unknown]         [H] 0x0000007fae99b888

And after this patch:

     4.13%     4.13%  uname    libc-2.21.so      [.] 0x0000000000078758
     3.74%     3.74%  uname    libc-2.21.so      [.] 0x0000000000078e50
     2.06%     2.06%  uname    libc-2.21.so      [.] 0x00000000000fcaf4
     1.65%     1.65%  uname    libc-2.21.so      [.] 0x00000000000fcae4
     1.59%     1.59%  uname    ld-2.21.so        [.] 0x000000000000a7f4
     1.50%     1.50%  uname    libc-2.21.so      [.] 0x0000000000078e40
     1.43%     1.43%  uname    libc-2.21.so      [.] 0x00000000000fcac4
     1.31%     1.31%  uname    libc-2.21.so      [.] 0x000000000002f0c0
     1.26%     1.26%  uname    ld-2.21.so        [.] 0x0000000000016888

This was tested using CoreSight but the same is very likely to happen on
IntelPT.  I'm pretty sure this isn't the right solution but we can start
building from that.

Comments welcomed.

[1]. commit 473398a21d28 ("perf tools: Add cpumode to struct perf_sample")
[2]. http://lxr.free-electrons.com/source/tools/perf/util/intel-pt.c#L1806

Signed-off-by: Mathieu Poirier <mathieu.poirier@...aro.org>
---
 tools/perf/util/session.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/tools/perf/util/session.c b/tools/perf/util/session.c
index 4abd85c6346d..28cc405e7245 100644
--- a/tools/perf/util/session.c
+++ b/tools/perf/util/session.c
@@ -1352,6 +1352,10 @@ int perf_session__deliver_synth_event(struct perf_session *session,
 {
 	struct perf_evlist *evlist = session->evlist;
 	struct perf_tool *tool = session->tool;
+	u8 mode = event->header.misc & PERF_RECORD_MISC_CPUMODE_MASK;
+
+	if (sample)
+		sample->cpumode = mode;
 
 	events_stats__inc(&evlist->stats, event->header.type);
 
-- 
2.5.0

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ