Em Tue, May 12, 2020 at 03:19:17PM +0300, Adrian Hunter escreveu:
> 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.

Applied, thanks,

- Arnaldo
 
> Signed-off-by: Adrian Hunter <[email protected]>
> ---
>  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 2a9de6491700..173b4f0e0e6e 100644
> --- a/tools/perf/util/evlist.c
> +++ b/tools/perf/util/evlist.c
> @@ -380,22 +380,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 || !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 || 
> !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 (!evsel__is_group_leader(pos) || !pos->core.fd)
> -- 
> 2.17.1
> 

-- 

- Arnaldo

Reply via email to