lkml.org 
[lkml]   [2018]   [Feb]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[tip:perf/urgent] perf mmap: Introduce perf_mmap__read_init()
    Commit-ID:  701b3ef37c0a4a5168bc07cfd48b35727b5a922c
    Gitweb: https://git.kernel.org/tip/701b3ef37c0a4a5168bc07cfd48b35727b5a922c
    Author: Kan Liang <kan.liang@intel.com>
    AuthorDate: Thu, 18 Jan 2018 13:26:19 -0800
    Committer: Arnaldo Carvalho de Melo <acme@redhat.com>
    CommitDate: Tue, 6 Feb 2018 10:11:49 -0300

    perf mmap: Introduce perf_mmap__read_init()

    The new function perf_mmap__read_init() is factored out from
    perf_mmap__push().

    It is to calculate the 'start' and 'end' of the available data in
    ringbuffer.

    No functional change.

    Signed-off-by: Kan Liang <kan.liang@intel.com>
    Acked-by: Jiri Olsa <jolsa@kernel.org>
    Cc: Andi Kleen <ak@linux.intel.com>
    Cc: Jin Yao <yao.jin@linux.intel.com>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Wang Nan <wangnan0@huawei.com>
    Link: http://lkml.kernel.org/r/1516310792-208685-5-git-send-email-kan.liang@intel.com
    Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
    ---
    tools/perf/util/mmap.c | 37 +++++++++++++++++++++++++++----------
    tools/perf/util/mmap.h | 2 ++
    2 files changed, 29 insertions(+), 10 deletions(-)

    diff --git a/tools/perf/util/mmap.c b/tools/perf/util/mmap.c
    index fbbbe87..c19a4e6 100644
    --- a/tools/perf/util/mmap.c
    +++ b/tools/perf/util/mmap.c
    @@ -267,24 +267,24 @@ static int overwrite_rb_find_range(void *buf, int mask, u64 head, u64 *start, u6
    return -1;
    }

    -int perf_mmap__push(struct perf_mmap *md, bool overwrite,
    - void *to, int push(void *to, void *buf, size_t size))
    +/*
    + * Report the start and end of the available data in ringbuffer
    + */
    +int perf_mmap__read_init(struct perf_mmap *md, bool overwrite,
    + u64 *startp, u64 *endp)
    {
    u64 head = perf_mmap__read_head(md);
    u64 old = md->prev;
    - u64 end, start;
    unsigned char *data = md->base + page_size;
    unsigned long size;
    - void *buf;
    - int rc = 0;

    - start = overwrite ? head : old;
    - end = overwrite ? old : head;
    + *startp = overwrite ? head : old;
    + *endp = overwrite ? old : head;

    - if (start == end)
    + if (*startp == *endp)
    return 0;

    - size = end - start;
    + size = *endp - *startp;
    if (size > (unsigned long)(md->mask) + 1) {
    if (!overwrite) {
    WARN_ONCE(1, "failed to keep up with mmap data. (warn only once)\n");
    @@ -298,10 +298,27 @@ int perf_mmap__push(struct perf_mmap *md, bool overwrite,
    * Backward ring buffer is full. We still have a chance to read
    * most of data from it.
    */
    - if (overwrite_rb_find_range(data, md->mask, head, &start, &end))
    + if (overwrite_rb_find_range(data, md->mask, head, startp, endp))
    return -1;
    }

    + return 1;
    +}
    +
    +int perf_mmap__push(struct perf_mmap *md, bool overwrite,
    + void *to, int push(void *to, void *buf, size_t size))
    +{
    + u64 head = perf_mmap__read_head(md);
    + u64 end, start;
    + unsigned char *data = md->base + page_size;
    + unsigned long size;
    + void *buf;
    + int rc = 0;
    +
    + rc = perf_mmap__read_init(md, overwrite, &start, &end);
    + if (rc < 1)
    + return rc;
    +
    size = end - start;

    if ((start & md->mask) + size != (end & md->mask)) {
    diff --git a/tools/perf/util/mmap.h b/tools/perf/util/mmap.h
    index e43d7b5..9ab2b48 100644
    --- a/tools/perf/util/mmap.h
    +++ b/tools/perf/util/mmap.h
    @@ -94,4 +94,6 @@ int perf_mmap__push(struct perf_mmap *md, bool backward,

    size_t perf_mmap__mmap_len(struct perf_mmap *map);

    +int perf_mmap__read_init(struct perf_mmap *md, bool overwrite,
    + u64 *startp, u64 *endp);
    #endif /*__PERF_MMAP_H */
    \
     
     \ /
      Last update: 2018-02-13 13:18    [W:4.271 / U:0.496 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site