From: Arnaldo Carvalho de Melo <acme@redhat.com>
To: Stephane Eranian <eranian@google.com>
Cc: linux-kernel@vger.kernel.org, peterz@infradead.org,
mingo@elte.hu, robert.richter@amd.com, ming.m.lin@intel.com,
andi@firstfloor.org, asharma@fb.com, ravitillo@lbl.gov,
vweaver1@eecs.utk.edu, khandual@linux.vnet.ibm.com,
dsahern@gmail.com
Subject: Re: [PATCH v5 16/18] perf: enable reading of perf.data files from different ABI rev
Date: Mon, 6 Feb 2012 16:19:51 -0200 [thread overview]
Message-ID: <20120206181951.GG6367@infradead.org> (raw)
In-Reply-To: <1328187288-24395-17-git-send-email-eranian@google.com>
Em Thu, Feb 02, 2012 at 01:54:46PM +0100, Stephane Eranian escreveu:
> This patch allows perf to process perf.data files generated
> using an ABI that has a different perf_event_attr struct size, i.e.,
> a different ABI version.
>
> The perf_event_attr can be extended, yet perf needs to cope with
> older perf.data files. Similarly, perf must be able to cope with
> a perf.data file which is using a newer version of the ABI than
> what it knows about.
>
> This patch adds read_attr(), a routine that reads a perf_event_attr
> struct from a file incrementally based on its advertised size. If
> the on-file struct is smaller than what perf knows, then the extra
> fields are zeroed. If the on-file struct is bigger, then perf only
> uses what it knows about, the rest is skipped.
Ditto on this one to get Acked/Tested-by David,
- Arnaldo
> Signed-off-by: Stephane Eranian <eranian@google.com>
> ---
> tools/perf/util/header.c | 49 ++++++++++++++++++++++++++++++++++++++++++++-
> 1 files changed, 47 insertions(+), 2 deletions(-)
>
> diff --git a/tools/perf/util/header.c b/tools/perf/util/header.c
> index 6f4187d..8d6c18d 100644
> --- a/tools/perf/util/header.c
> +++ b/tools/perf/util/header.c
> @@ -1959,6 +1959,51 @@ static int perf_header__read_pipe(struct perf_session *session, int fd)
> return 0;
> }
>
> +static int read_attr(int fd, struct perf_header *ph,
> + struct perf_file_attr *f_attr)
> +{
> + struct perf_event_attr *attr = &f_attr->attr;
> + size_t sz, left;
> + size_t our_sz = sizeof(f_attr->attr);
> + int ret;
> +
> + memset(f_attr, 0, sizeof(*f_attr));
> +
> + /* read minimal guaranteed structure */
> + ret = readn(fd, attr, PERF_ATTR_SIZE_VER0);
> + if (ret <= 0)
> + return -1;
> +
> + /* on file perf_event_attr size */
> + sz = attr->size;
> + if (ph->needs_swap)
> + sz = bswap_32(sz);
> +
> + if (sz == 0) {
> + /* assume ABI0 */
> + sz = PERF_ATTR_SIZE_VER0;
> + } else if (sz > our_sz) {
> + /* bigger than what we know about */
> + sz = our_sz;
> +
> + /* skip what we do not know about */
> + lseek(fd, SEEK_CUR, attr->size - our_sz);
> + }
> + /* what we have not yet read and that we know about */
> + left = sz - PERF_ATTR_SIZE_VER0;
> + if (left) {
> + void *ptr = attr;
> + ptr += PERF_ATTR_SIZE_VER0;
> +
> + ret = readn(fd, ptr, left);
> + if (ret <= 0)
> + return -1;
> + }
> + /* read the ids */
> + ret = readn(fd, &f_attr->ids, sizeof(struct perf_file_section));
> + return ret <= 0 ? -1 : 0;
> +}
> +
> int perf_session__read_header(struct perf_session *session, int fd)
> {
> struct perf_header *header = &session->header;
> @@ -1979,14 +2024,14 @@ int perf_session__read_header(struct perf_session *session, int fd)
> return -EINVAL;
> }
>
> - nr_attrs = f_header.attrs.size / sizeof(f_attr);
> + nr_attrs = f_header.attrs.size / f_header.attr_size;
> lseek(fd, f_header.attrs.offset, SEEK_SET);
>
> for (i = 0; i < nr_attrs; i++) {
> struct perf_evsel *evsel;
> off_t tmp;
>
> - if (readn(fd, &f_attr, sizeof(f_attr)) <= 0)
> + if (read_attr(fd, header, &f_attr) < 0)
> goto out_errno;
>
> if (header->needs_swap)
> --
> 1.7.4.1
next prev parent reply other threads:[~2012-02-06 19:16 UTC|newest]
Thread overview: 43+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-02-02 12:54 [PATCH v5 00/18] perf: add support for sampling taken branches Stephane Eranian
2012-02-02 12:54 ` [PATCH v5 01/18] perf: add generic taken branch sampling support Stephane Eranian
2012-02-02 12:54 ` [PATCH v5 02/18] perf: add Intel LBR MSR definitions Stephane Eranian
2012-02-02 12:54 ` [PATCH v5 03/18] perf: add Intel X86 LBR sharing logic Stephane Eranian
2012-02-02 12:54 ` [PATCH v5 04/18] perf: sync branch stack sampling with X86 precise_sampling Stephane Eranian
2012-02-02 12:54 ` [PATCH v5 05/18] perf: add Intel X86 LBR mappings for PERF_SAMPLE_BRANCH filters Stephane Eranian
2012-02-02 12:54 ` [PATCH v5 06/18] perf: disable LBR support for older Intel Atom processors Stephane Eranian
2012-02-02 12:54 ` [PATCH v5 07/18] perf: implement PERF_SAMPLE_BRANCH for Intel X86 Stephane Eranian
2012-02-02 12:54 ` [PATCH v5 08/18] perf: add LBR software filter support " Stephane Eranian
2012-02-02 12:54 ` [PATCH v5 09/18] perf: disable PERF_SAMPLE_BRANCH_* when not supported Stephane Eranian
2012-02-06 19:23 ` Peter Zijlstra
2012-02-06 19:59 ` Stephane Eranian
2012-02-02 12:54 ` [PATCH v5 10/18] perf: add hook to flush branch_stack on context switch Stephane Eranian
2012-02-02 12:54 ` [PATCH v5 11/18] perf: add code to support PERF_SAMPLE_BRANCH_STACK Stephane Eranian
2012-02-06 18:06 ` Arnaldo Carvalho de Melo
2012-02-07 14:11 ` Stephane Eranian
2012-02-07 15:21 ` Arnaldo Carvalho de Melo
2012-02-02 12:54 ` [PATCH v5 12/18] perf: add support for sampling taken branch to perf record Stephane Eranian
2012-02-06 18:08 ` Arnaldo Carvalho de Melo
2012-02-02 12:54 ` [PATCH v5 13/18] perf: add support for taken branch sampling to perf report Stephane Eranian
2012-02-06 18:14 ` Arnaldo Carvalho de Melo
2012-02-02 12:54 ` [PATCH v5 14/18] perf: fix endianness detection in perf.data Stephane Eranian
2012-02-06 18:17 ` Arnaldo Carvalho de Melo
2012-02-06 18:18 ` Stephane Eranian
2012-02-06 21:47 ` David Ahern
2012-02-06 22:06 ` Arnaldo Carvalho de Melo
2012-02-06 22:29 ` David Ahern
2012-02-07 14:13 ` Stephane Eranian
2012-02-07 14:38 ` Arnaldo Carvalho de Melo
2012-02-17 9:42 ` [tip:perf/core] perf tools: " tip-bot for Stephane Eranian
2012-02-02 12:54 ` [PATCH v5 15/18] perf: add ABI reference sizes Stephane Eranian
2012-02-02 12:54 ` [PATCH v5 16/18] perf: enable reading of perf.data files from different ABI rev Stephane Eranian
2012-02-06 18:19 ` Arnaldo Carvalho de Melo [this message]
2012-02-06 18:22 ` Arnaldo Carvalho de Melo
2012-02-07 7:03 ` Anshuman Khandual
2012-02-07 14:52 ` Arnaldo Carvalho de Melo
2012-02-06 22:19 ` David Ahern
2012-02-07 15:50 ` Stephane Eranian
2012-02-07 16:41 ` David Ahern
2012-02-07 17:42 ` Stephane Eranian
2012-02-07 17:57 ` David Ahern
2012-02-02 12:54 ` [PATCH v5 17/18] perf: fix bug print_event_desc() Stephane Eranian
2012-02-02 12:54 ` [PATCH v5 18/18] perf: make perf able to read file from older ABIs Stephane Eranian
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=20120206181951.GG6367@infradead.org \
--to=acme@redhat.com \
--cc=andi@firstfloor.org \
--cc=asharma@fb.com \
--cc=dsahern@gmail.com \
--cc=eranian@google.com \
--cc=khandual@linux.vnet.ibm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=ming.m.lin@intel.com \
--cc=mingo@elte.hu \
--cc=peterz@infradead.org \
--cc=ravitillo@lbl.gov \
--cc=robert.richter@amd.com \
--cc=vweaver1@eecs.utk.edu \
/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.