lkml.org 
[lkml]   [2017]   [Jun]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v4 11/16] perf header: make write_pmu_mappings pipe-mode friendly
    Date
    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 a02959c78067..deb02343fccf 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
    \
     
     \ /
      Last update: 2017-06-13 06:33    [W:5.094 / U:0.628 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site