lkml.org 
[lkml]   [2022]   [Mar]   [25]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[RFC PATCH v2 2/7] libperf: Move 'open_flags' from tools/perf to evsel::open_flags
    Date
    Move evsel::open_flags to perf_evsel::open_flags, so we can move
    the open_flags interface to libperf.

    Signed-off-by: Shunsuke Nakamura <nakamura.shun@fujitsu.com>
    ---
    tools/lib/perf/evsel.c | 3 ++-
    tools/lib/perf/include/internal/evsel.h | 2 ++
    tools/perf/util/evsel.c | 16 +++++++++-------
    tools/perf/util/evsel.h | 1 -
    4 files changed, 13 insertions(+), 9 deletions(-)

    diff --git a/tools/lib/perf/evsel.c b/tools/lib/perf/evsel.c
    index 210ea7c06ce8..6640a333e6d9 100644
    --- a/tools/lib/perf/evsel.c
    +++ b/tools/lib/perf/evsel.c
    @@ -26,6 +26,7 @@ void perf_evsel__init(struct perf_evsel *evsel, struct perf_event_attr *attr,
    evsel->attr = *attr;
    evsel->idx = idx;
    evsel->leader = evsel;
    + evsel->open_flags = 0;
    }

    struct perf_evsel *perf_evsel__new(struct perf_event_attr *attr)
    @@ -158,7 +159,7 @@ int perf_evsel__open(struct perf_evsel *evsel, struct perf_cpu_map *cpus,

    fd = sys_perf_event_open(&evsel->attr,
    threads->map[thread].pid,
    - cpu, group_fd, 0);
    + cpu, group_fd, evsel->open_flags);

    if (fd < 0)
    return -errno;
    diff --git a/tools/lib/perf/include/internal/evsel.h b/tools/lib/perf/include/internal/evsel.h
    index cfc9ebd7968e..37a99cf261b3 100644
    --- a/tools/lib/perf/include/internal/evsel.h
    +++ b/tools/lib/perf/include/internal/evsel.h
    @@ -51,6 +51,8 @@ struct perf_evsel {
    int nr_members;
    bool system_wide;
    int idx;
    +
    + unsigned long open_flags;
    };

    void perf_evsel__init(struct perf_evsel *evsel, struct perf_event_attr *attr,
    diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c
    index 22d3267ce294..52c34552ee76 100644
    --- a/tools/perf/util/evsel.c
    +++ b/tools/perf/util/evsel.c
    @@ -1794,9 +1794,9 @@ static int __evsel__prepare_open(struct evsel *evsel, struct perf_cpu_map *cpus,
    perf_evsel__alloc_fd(&evsel->core, perf_cpu_map__nr(cpus), nthreads) < 0)
    return -ENOMEM;

    - evsel->open_flags = PERF_FLAG_FD_CLOEXEC;
    + evsel->core.open_flags = PERF_FLAG_FD_CLOEXEC;
    if (evsel->cgrp)
    - evsel->open_flags |= PERF_FLAG_PID_CGROUP;
    + evsel->core.open_flags |= PERF_FLAG_PID_CGROUP;

    return 0;
    }
    @@ -1814,7 +1814,7 @@ static void evsel__disable_missing_features(struct evsel *evsel)
    evsel->core.attr.clockid = 0;
    }
    if (perf_missing_features.cloexec)
    - evsel->open_flags &= ~(unsigned long)PERF_FLAG_FD_CLOEXEC;
    + evsel->core.open_flags &= ~(unsigned long)PERF_FLAG_FD_CLOEXEC;
    if (perf_missing_features.mmap2)
    evsel->core.attr.mmap2 = 0;
    if (evsel->pmu && evsel->pmu->missing_features.exclude_guest)
    @@ -1902,7 +1902,8 @@ bool evsel__detect_missing_features(struct evsel *evsel)
    perf_missing_features.clockid = true;
    pr_debug2_peo("switching off use_clockid\n");
    return true;
    - } else if (!perf_missing_features.cloexec && (evsel->open_flags & PERF_FLAG_FD_CLOEXEC)) {
    + } else if (!perf_missing_features.cloexec &&
    + (evsel->core.open_flags & PERF_FLAG_FD_CLOEXEC)) {
    perf_missing_features.cloexec = true;
    pr_debug2_peo("switching off cloexec flag\n");
    return true;
    @@ -2029,11 +2030,12 @@ static int evsel__open_cpu(struct evsel *evsel, struct perf_cpu_map *cpus,
    test_attr__ready();

    pr_debug2_peo("sys_perf_event_open: pid %d cpu %d group_fd %d flags %#lx",
    - pid, perf_cpu_map__cpu(cpus, idx).cpu, group_fd, evsel->open_flags);
    + pid, perf_cpu_map__cpu(cpus, idx).cpu, group_fd,
    + evsel->core.open_flags);

    fd = sys_perf_event_open(&evsel->core.attr, pid,
    perf_cpu_map__cpu(cpus, idx).cpu,
    - group_fd, evsel->open_flags);
    + group_fd, evsel->core.open_flags);

    FD(evsel, idx, thread) = fd;

    @@ -2050,7 +2052,7 @@ static int evsel__open_cpu(struct evsel *evsel, struct perf_cpu_map *cpus,
    if (unlikely(test_attr__enabled)) {
    test_attr__open(&evsel->core.attr, pid,
    perf_cpu_map__cpu(cpus, idx),
    - fd, group_fd, evsel->open_flags);
    + fd, group_fd, evsel->core.open_flags);
    }

    pr_debug2_peo(" = %d\n", fd);
    diff --git a/tools/perf/util/evsel.h b/tools/perf/util/evsel.h
    index 041b42d33bf5..8a545954eec7 100644
    --- a/tools/perf/util/evsel.h
    +++ b/tools/perf/util/evsel.h
    @@ -152,7 +152,6 @@ struct evsel {
    struct bperf_leader_bpf *leader_skel;
    struct bperf_follower_bpf *follower_skel;
    };
    - unsigned long open_flags;
    int precise_ip_original;

    /* for missing_features */
    --
    2.25.1
    \
     
     \ /
      Last update: 2022-03-25 05:44    [W:4.878 / U:0.028 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site