All of lore.kernel.org
 help / color / mirror / Atom feed
From: David Carrillo-Cisneros <davidcc@google.com>
To: linux-kernel@vger.kernel.org
Cc: Peter Zijlstra <peterz@infradead.org>,
	Ingo Molnar <mingo@redhat.com>,
	Arnaldo Carvalho de Melo <acme@kernel.org>,
	Alexander Shishkin <alexander.shishkin@linux.intel.com>,
	Andi Kleen <ak@linux.intel.com>, Simon Que <sque@chromium.org>,
	Wang Nan <wangnan0@huawei.com>, Jiri Olsa <jolsa@kernel.org>,
	He Kuang <hekuang@huawei.com>,
	Masami Hiramatsu <mhiramat@kernel.org>,
	Stephane Eranian <eranian@google.com>,
	Paul Turner <pjt@google.com>,
	David Carrillo-Cisneros <davidcc@google.com>
Subject: [PATCH v3 10/15] perf header: make write_pmu_mappings pipe-mode friendly
Date: Tue,  6 Jun 2017 00:07:17 -0700	[thread overview]
Message-ID: <20170606070722.35213-11-davidcc@google.com> (raw)
In-Reply-To: <20170606070722.35213-1-davidcc@google.com>

In pipe-mode, we will operate over a buffer instead of a file descriptor
but write_pmu_mappings uses lseek to move over the perf.data file.

Refactor write_pmu_mappings to avoid the usage of lseek and allow
reusing the same logic in pipe-mode (next patch).

Signed-off-by: David Carrillo-Cisneros <davidcc@google.com>
---
 tools/perf/util/header.c | 21 +++++++++++----------
 1 file changed, 11 insertions(+), 10 deletions(-)

diff --git a/tools/perf/util/header.c b/tools/perf/util/header.c
index f607c3c00f49..323ccd5df382 100644
--- a/tools/perf/util/header.c
+++ b/tools/perf/util/header.c
@@ -796,11 +796,19 @@ static int write_pmu_mappings(struct feat_fd *ff,
 			      struct perf_evlist *evlist __maybe_unused)
 {
 	struct perf_pmu *pmu = NULL;
-	off_t offset = lseek(ff->fd, 0, SEEK_CUR);
-	__u32 pmu_num = 0;
+	u32 pmu_num = 0;
 	int ret;
 
-	/* write real pmu_num later */
+	/*
+	 * Do a first pass to count number of pmu to avoid lseek so this
+	 * works in pipe mode as well.
+	 */
+	while ((pmu = perf_pmu__scan(pmu))) {
+		if (!pmu->name)
+			continue;
+		pmu_num++;
+	}
+
 	ret = do_write(ff, &pmu_num, sizeof(pmu_num));
 	if (ret < 0)
 		return ret;
@@ -808,7 +816,6 @@ static int write_pmu_mappings(struct feat_fd *ff,
 	while ((pmu = perf_pmu__scan(pmu))) {
 		if (!pmu->name)
 			continue;
-		pmu_num++;
 
 		ret = do_write(ff, &pmu->type, sizeof(pmu->type));
 		if (ret < 0)
@@ -819,12 +826,6 @@ static int write_pmu_mappings(struct feat_fd *ff,
 			return ret;
 	}
 
-	if (pwrite(ff->fd, &pmu_num, sizeof(pmu_num), offset) != sizeof(pmu_num)) {
-		/* discard all */
-		lseek(ff->fd, offset, SEEK_SET);
-		return -1;
-	}
-
 	return 0;
 }
 
-- 
2.13.1.508.gb3defc5cc-goog

  parent reply	other threads:[~2017-06-06  7:08 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-06-06  7:07 [PATCH v3 00/15] perf tool: add meta-data header support for pipe-mode David Carrillo-Cisneros
2017-06-06  7:07 ` [PATCH v3 01/15] perf header: encapsulate read and swap David Carrillo-Cisneros
2017-06-06  7:07 ` [PATCH v3 02/15] perf header: add PROCESS_STR_FUN macro David Carrillo-Cisneros
2017-06-06  7:07 ` [PATCH v3 03/15] perf header: fail on write_padded error David Carrillo-Cisneros
2017-06-06  7:07 ` [PATCH v3 04/15] perf util: add const modifier to buf in "writen" function David Carrillo-Cisneros
2017-06-06  7:07 ` [PATCH v3 05/15] perf header: revamp do_write David Carrillo-Cisneros
2017-06-06  7:07 ` [PATCH v3 06/15] perf header: add struct feat_fd for write David Carrillo-Cisneros
2017-06-06  7:07 ` [PATCH v3 07/15] perf header: use struct feat_fd for print David Carrillo-Cisneros
2017-06-06  7:07 ` [PATCH v3 08/15] perf header: use struct feat_fd to process header records David Carrillo-Cisneros
2017-06-08 11:54   ` Jiri Olsa
2017-06-13  4:18     ` David Carrillo-Cisneros
2017-06-06  7:07 ` [PATCH v3 09/15] perf header: use struct feat_fd in read " David Carrillo-Cisneros
2017-06-06  7:07 ` David Carrillo-Cisneros [this message]
2017-06-06  7:07 ` [PATCH v3 11/15] perf header: add a buffer to struct feat_fd David Carrillo-Cisneros
2017-06-08 11:54   ` Jiri Olsa
2017-06-08 11:54   ` Jiri Olsa
2017-06-06  7:07 ` [PATCH v3 12/15] perf header: change FEAT_OP* macros David Carrillo-Cisneros
2017-06-06  7:07 ` [PATCH v3 13/15] perf tool: add show_feature_header to perf_tool David Carrillo-Cisneros
2017-06-06  7:07 ` [PATCH v3 14/15] perf tools: add feature header record to pipe-mode David Carrillo-Cisneros
2017-06-06  7:07 ` [PATCH v3 15/15] perf header: add event desc to pipe-mode header David Carrillo-Cisneros
2017-06-08 11:54   ` Jiri Olsa
2017-06-13  4:23     ` David Carrillo-Cisneros
2017-06-06 12:35 ` [PATCH v3 00/15] perf tool: add meta-data header support for pipe-mode Jiri Olsa
2017-06-06 18:15   ` David Carrillo-Cisneros
2017-06-07 11:19     ` Jiri Olsa
2017-06-07 15:02       ` David Carrillo-Cisneros
2017-06-13  4:28         ` David Carrillo-Cisneros

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=20170606070722.35213-11-davidcc@google.com \
    --to=davidcc@google.com \
    --cc=acme@kernel.org \
    --cc=ak@linux.intel.com \
    --cc=alexander.shishkin@linux.intel.com \
    --cc=eranian@google.com \
    --cc=hekuang@huawei.com \
    --cc=jolsa@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mhiramat@kernel.org \
    --cc=mingo@redhat.com \
    --cc=peterz@infradead.org \
    --cc=pjt@google.com \
    --cc=sque@chromium.org \
    --cc=wangnan0@huawei.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.