lkml.org 
[lkml]   [2020]   [Feb]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH V2 10/13] perf evlist: Disable 'immediate' events last
    Date
    Events marked as 'immediate' are started before other events to ensure
    that there is context at the start of the main tracing events. The same
    is true at the end of tracing, so disable 'immediate' events after other
    events.

    Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
    ---
    tools/perf/util/evlist.c | 31 +++++++++++++++++++++----------
    1 file changed, 21 insertions(+), 10 deletions(-)

    diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c
    index 1548237b6558..06c4586065cc 100644
    --- a/tools/perf/util/evlist.c
    +++ b/tools/perf/util/evlist.c
    @@ -379,22 +379,33 @@ void evlist__disable(struct evlist *evlist)
    {
    struct evsel *pos;
    struct affinity affinity;
    - int cpu, i;
    + int cpu, i, imm = 0;
    + bool has_imm = false;

    if (affinity__setup(&affinity) < 0)
    return;

    - evlist__for_each_cpu(evlist, i, cpu) {
    - affinity__set(&affinity, cpu);
    -
    - evlist__for_each_entry(evlist, pos) {
    - if (evsel__cpu_iter_skip(pos, cpu))
    - continue;
    - if (pos->disabled || !perf_evsel__is_group_leader(pos) || !pos->core.fd)
    - continue;
    - evsel__disable_cpu(pos, pos->cpu_iter - 1);
    + /* Disable 'immediate' events last */
    + for (imm = 0; imm <= 1; imm++) {
    + evlist__for_each_cpu(evlist, i, cpu) {
    + affinity__set(&affinity, cpu);
    +
    + evlist__for_each_entry(evlist, pos) {
    + if (evsel__cpu_iter_skip(pos, cpu))
    + continue;
    + if (pos->disabled || !perf_evsel__is_group_leader(pos) || !pos->core.fd)
    + continue;
    + if (pos->immediate)
    + has_imm = true;
    + if (pos->immediate != imm)
    + continue;
    + evsel__disable_cpu(pos, pos->cpu_iter - 1);
    + }
    }
    + if (!has_imm)
    + break;
    }
    +
    affinity__cleanup(&affinity);
    evlist__for_each_entry(evlist, pos) {
    if (!perf_evsel__is_group_leader(pos) || !pos->core.fd)
    --
    2.17.1
    \
     
     \ /
      Last update: 2020-02-12 13:51    [W:2.637 / U:0.868 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site