All of lore.kernel.org
 help / color / mirror / Atom feed
From: Namhyung Kim <namhyung@kernel.org>
To: Chun-Tse Shao <ctshao@google.com>
Cc: Arnaldo Carvalho de Melo <acme@kernel.org>,
	Ian Rogers <irogers@google.com>,
	Kan Liang <kan.liang@linux.intel.com>,
	Jiri Olsa <jolsa@kernel.org>,
	Adrian Hunter <adrian.hunter@intel.com>,
	Peter Zijlstra <peterz@infradead.org>,
	Ingo Molnar <mingo@kernel.org>,
	LKML <linux-kernel@vger.kernel.org>,
	linux-perf-users@vger.kernel.org,
	Ravi Bangoria <ravi.bangoria@amd.com>
Subject: Re: [PATCH] perf tools: Remove evsel__handle_error_quirks()
Date: Thu, 10 Apr 2025 09:31:02 -0700	[thread overview]
Message-ID: <Z_fyRpjnXjXukLwM@google.com> (raw)
In-Reply-To: <CAJpZYjWTN09uXcArncRVXRRDcCH042MeN4UC1FAokoUNzsuG6A@mail.gmail.com>

Hello,

On Wed, Apr 09, 2025 at 08:26:07PM -0700, Chun-Tse Shao wrote:
> On Wed, Apr 9, 2025 at 6:02 PM Namhyung Kim <namhyung@kernel.org> wrote:
> >
> > The evsel__handle_error_quirks() is to fixup invalid event attributes on
> > some architecture based on the error code.  Currently it's only used for
> > AMD to disable precise_ip not to use IBS which has more restrictions.
> >
> > But the commit c33aea446bf555ab changed call evsel__precise_ip_fallback
> > for any errors so there's no difference with the above function.  To
> > make matter worse, it caused a problem with branch stack on Zen3.
> >
> > The IBS doesn't support branch stack so it should use a regular core
> > PMU event.  The default event is set precise_max and it starts with 3.
> > And evsel__precise_ip_fallback() tries with it and reduces the level one
> > by one.  At last it tries with 0 but it also failed on Zen3 since the
> > branch stack is not supported for the cycles event.
> >
> > At this point, evsel__precise_ip_fallback() restores the original
> > precise_ip value (3) in the hope that it can succeed with other modifier
> > (like exclude_kernel).  Then evsel__handle_error_quirks() see it has
> > precise_ip != 0 and make it retry with 0.  This created an infinite
> > loop.
> >
> > Before:
> >
> >   $ perf record -b -vv |& grep removing
> >   removing precise_ip on AMD
> >   removing precise_ip on AMD
> >   removing precise_ip on AMD
> >   removing precise_ip on AMD
> >   removing precise_ip on AMD
> >   removing precise_ip on AMD
> >   removing precise_ip on AMD
> >   removing precise_ip on AMD
> >   removing precise_ip on AMD
> >   removing precise_ip on AMD
> >   removing precise_ip on AMD
> >   removing precise_ip on AMD
> >   ...
> >
> > After:
> >
> >   $ perf record -b true
> >   Error:
> >   Failure to open event 'cycles:P' on PMU 'cpu' which will be removed.
> >   Invalid event (cycles:P) in per-thread mode, enable system wide with '-a'.
> >   Error:
> >   Failure to open any events for recording.
> >
> > Fixes: c33aea446bf555ab ("perf tools: Fix precise_ip fallback logic")
> > Cc: Ravi Bangoria <ravi.bangoria@amd.com>
> > Signed-off-by: Namhyung Kim <namhyung@kernel.org>
> Tested-by: Chun-Tse Shao <ctshao@google.com>

Thanks for the test.

Arnaldo, I think we can have this in the perf-tools tree.

Thanks,
Namhyung


> > ---
> >  tools/perf/util/evsel.c | 22 ----------------------
> >  1 file changed, 22 deletions(-)
> >
> > diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c
> > index 1974395492d7da5e..3c030da2e477c707 100644
> > --- a/tools/perf/util/evsel.c
> > +++ b/tools/perf/util/evsel.c
> > @@ -2566,25 +2566,6 @@ static bool evsel__detect_missing_features(struct evsel *evsel, struct perf_cpu
> >         return false;
> >  }
> >
> > -static bool evsel__handle_error_quirks(struct evsel *evsel, int error)
> > -{
> > -       /*
> > -        * AMD core PMU tries to forward events with precise_ip to IBS PMU
> > -        * implicitly.  But IBS PMU has more restrictions so it can fail with
> > -        * supported event attributes.  Let's forward it back to the core PMU
> > -        * by clearing precise_ip only if it's from precise_max (:P).
> > -        */
> > -       if ((error == -EINVAL || error == -ENOENT) && x86__is_amd_cpu() &&
> > -           evsel->core.attr.precise_ip && evsel->precise_max) {
> > -               evsel->core.attr.precise_ip = 0;
> > -               pr_debug2_peo("removing precise_ip on AMD\n");
> > -               display_attr(&evsel->core.attr);
> > -               return true;
> > -       }
> > -
> > -       return false;
> > -}
> > -
> >  static int evsel__open_cpu(struct evsel *evsel, struct perf_cpu_map *cpus,
> >                 struct perf_thread_map *threads,
> >                 int start_cpu_map_idx, int end_cpu_map_idx)
> > @@ -2730,9 +2711,6 @@ static int evsel__open_cpu(struct evsel *evsel, struct perf_cpu_map *cpus,
> >         if (evsel__precise_ip_fallback(evsel))
> >                 goto retry_open;
> >
> > -       if (evsel__handle_error_quirks(evsel, err))
> > -               goto retry_open;
> > -
> >  out_close:
> >         if (err)
> >                 threads->err_thread = thread;
> > --
> > 2.49.0.504.g3bcea36a83-goog
> >

      reply	other threads:[~2025-04-10 16:31 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-04-10  1:02 [PATCH] perf tools: Remove evsel__handle_error_quirks() Namhyung Kim
2025-04-10  3:26 ` Chun-Tse Shao
2025-04-10 16:31   ` Namhyung Kim [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=Z_fyRpjnXjXukLwM@google.com \
    --to=namhyung@kernel.org \
    --cc=acme@kernel.org \
    --cc=adrian.hunter@intel.com \
    --cc=ctshao@google.com \
    --cc=irogers@google.com \
    --cc=jolsa@kernel.org \
    --cc=kan.liang@linux.intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-perf-users@vger.kernel.org \
    --cc=mingo@kernel.org \
    --cc=peterz@infradead.org \
    --cc=ravi.bangoria@amd.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.