Re: [PATCH 2/2] perf tools: Improve IBS error handling

From: Kim Phillips
Date: Thu Nov 18 2021 - 17:45:50 EST


On 10/7/21 2:17 PM, Kim Phillips wrote:
On 10/7/21 12:28 PM, Jiri Olsa wrote:
On Mon, Oct 04, 2021 at 04:41:14PM -0500, Kim Phillips wrote:
---
  tools/perf/util/evsel.c | 24 ++++++++++++++++++++++++
  1 file changed, 24 insertions(+)

diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c
index b915840690d4..f8a9cbd99314 100644
--- a/tools/perf/util/evsel.c
+++ b/tools/perf/util/evsel.c
@@ -2743,9 +2743,22 @@ static bool find_process(const char *name)
      return ret ? false : true;
  }
+static bool is_amd(const char *arch, const char *cpuid)
+{
+    return arch && !strcmp("x86", arch) && cpuid && strstarts(cpuid, "AuthenticAMD");
+}
+
+static bool is_amd_ibs(struct evsel *evsel)
+{
+    return evsel->core.attr.precise_ip || !strncmp(evsel->pmu_name, "ibs", 3);
+}
+
  int evsel__open_strerror(struct evsel *evsel, struct target *target,
               int err, char *msg, size_t size)
  {
+    struct perf_env *env = evsel__env(evsel);
+    const char *arch = perf_env__arch(env);
+    const char *cpuid = perf_env__cpuid(env);
      char sbuf[STRERR_BUFSIZE];
      int printed = 0, enforced = 0;
@@ -2841,6 +2854,17 @@ int evsel__open_strerror(struct evsel *evsel, struct target *target,
              return scnprintf(msg, size, "wrong clockid (%d).", clockid);
          if (perf_missing_features.aux_output)
              return scnprintf(msg, size, "The 'aux_output' feature is not supported, update the kernel.");
+        if (is_amd(arch, cpuid)) {
+            if (is_amd_ibs(evsel)) {

would single 'is_amd_ibs' call be better? checking on both amd and ibs

Good suggestion. If you look at the later patch in the
BRS series, I have rewritten it to add the new
AMD PMU like so:

 if (is_amd()) {
     if (is_amd_ibs()) {
         if (evsel->this)
             return
         if (evsel->that)
             return
     }
+    if (is_amd_brs()) {
+        if (evsel->this)
+            return
+        if (evsel->that)
+            return
+    }
 }

Below is the full proposed replacement patch for patch 12
of 13 of the BRS series.

Another option is to have the is_amd_{ibs,brs} functions
call is_amd() themselves, so the if (evsel->) code could be
unindented by one tab, would that be better?

No reply, so guessing not.

Arnaldo, can these two patches be applied please?

Thanks,

Kim