From nobody Sun Jun 14 06:07:09 2026 Received: from mail-dl1-f73.google.com (mail-dl1-f73.google.com [74.125.82.73]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4F10C2F362B for ; Sat, 2 May 2026 06:59:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777705196; cv=none; b=GQrl5A6D8SgK+wAP3QFZ97lEb3vw6Ph+IbicCPtltgSdySfwcLILCKmddmdm5E9fowSfz6oXDu6FpNN9mRn10HRxBI1/WF6QbffkGKZqvAcPyli/FbZSN+GgNJHXzoT2AX8lj91r6igdyLghigtX/Z0M9Q7zarFpR+zonS6iLEE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777705196; c=relaxed/simple; bh=I7dWa4sA2DmHDib9I9Joif+/HekqHFesSfAhb22Wkro=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=G0pjBMa5QQFnMx+kq09itoSOvO/mo867foJdR2zYkN5qC0SJUAX5uKSSXtjhL2wz5QA/rL0/r07FdHFHh1G4cmZTKlIoPL1Hoe5FV9eLdbgYcQmsY/RuJsIbyW5ZS5G/HBuXwoMAaEKtyj4j7nk3vj9YhAP18LrH/NSNlaYwwQU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=kjx4Iiqt; arc=none smtp.client-ip=74.125.82.73 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="kjx4Iiqt" Received: by mail-dl1-f73.google.com with SMTP id a92af1059eb24-12dfb99429bso623847c88.1 for ; Fri, 01 May 2026 23:59:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1777705194; x=1778309994; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=JxPExewUyN6sc60fQwdM51r4YTcpFnkXi30ouADRRmE=; b=kjx4IiqtBPyUALDtyzm4sGXNj7ri7ICTvpiu8MtRO0iFHBhh7lsdbjJ9uHgBuz00op 7pgy+iP0gFwH55/veRX7Zj295+OHgxU0zPXC6v9XEp5+Sh27n67c2aMZwhk1J9lRZ5qb +Y66/wdMZk9Ay6/4g7x030kyfsI3s3xa8phll+eczSWJeVXI46b1yFyH90sDyzaPySLt zaWG/GyusWWJgXaqLShCIXtWHUeO66lhdNEaTzVcx3o4a2eeJjmzRN2wZ6XDAId5AeNn 1l+up8Kj0L+Hkm87MxMng6dD1P4N215z1JmVS0BMgoKqJE060dL5CPt5Au4vsdQDyDRv TmsA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777705194; x=1778309994; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=JxPExewUyN6sc60fQwdM51r4YTcpFnkXi30ouADRRmE=; b=IuXx9osrzA/+DuUYC7ii3xQ3sSQci8LUZ0D6Q3d7RPpPBdKhpnJMUTf4GOkQ+mmqBi ZWQXKJBWSjPsdGunHMZPJ95aUtsbyMJmjFThRsNGPbgP38jTMrHfjvZdZEnMjHEgdFuu Vp3uftk1d2i2xe34DC3agj6WDjJf8yQKSCX8Z1v8yHmgDeFyhKroifx8aQHt+Fz3m2R2 Nh9hWcM6gxqn6l26d5clEE1h2zb15msnW/RPHy9SEaAZWLGAvDvoaGx2Dm2syAxNwuT1 2V5L6RdJUkjDdSfeDxfOGJKjDSoZK3LshPRQRid9q45sk5yCENq1VfIabNVWwyrRpl3A NeDQ== X-Forwarded-Encrypted: i=1; AFNElJ/7WFwuKaXIyhpp+IgIYX5eqZx/NOU5Zd0UEHE+mulPjDWOyXRIdFCjSjRVXMhDi75Fmvwc3no2QjstTC4=@vger.kernel.org X-Gm-Message-State: AOJu0YxEgelhr+tL8f9cXlmw5XckhwoN81hF2HNWlOlnXz12e6RGZbLW PIF0p4DHiE/40B0nFro5X6HS1kUYDpqJZYQL1OH87q8WgY9CWmlzkgdaIyag+B2TJANJXQAlcnn ZbTtWMsgw7Q== X-Received: from dlbcf14.prod.google.com ([2002:a05:7022:458e:b0:12d:ba61:2512]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7022:38d:b0:12a:94ab:e20 with SMTP id a92af1059eb24-12dfd8256bamr1185485c88.20.1777705194254; Fri, 01 May 2026 23:59:54 -0700 (PDT) Date: Fri, 1 May 2026 23:59:19 -0700 In-Reply-To: <20260502065935.291960-1-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260409230620.4176210-2-irogers@google.com> <20260502065935.291960-1-irogers@google.com> X-Mailer: git-send-email 2.54.0.545.g6539524ca2-goog Message-ID: <20260502065935.291960-2-irogers@google.com> Subject: [PATCH v8 01/17] perf env: Add perf_env__e_machine helper and use in perf_env__arch From: Ian Rogers To: irogers@google.com, acme@kernel.org, namhyung@kernel.org, tmricht@linux.ibm.com Cc: agordeev@linux.ibm.com, gor@linux.ibm.com, hca@linux.ibm.com, jameshongleiwang@126.com, japo@linux.ibm.com, linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, linux-s390@vger.kernel.org, sumanthk@linux.ibm.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add a helper that lazily computes the e_machine and falls back to EM_HOST. Use the perf_env's arch to compute the e_machine if available. Use a binary search for some efficiency in this, but handle somewhat complex duplicate rules. Switch perf_env__arch to be derived the e_machine for consistency. This switches arch from being uname derived to matching that of the perf binary (via EM_HOST). Update session to use the helper, which may mean using EM_HOST when no threads are available. This also updates the perf data file header that gets the e_machine/e_flags from the session. Signed-off-by: Ian Rogers --- tools/perf/util/env.c | 231 +++++++++++++++++++++++++++++++------- tools/perf/util/env.h | 2 + tools/perf/util/header.c | 47 ++++++-- tools/perf/util/session.c | 26 +++-- 4 files changed, 243 insertions(+), 63 deletions(-) diff --git a/tools/perf/util/env.c b/tools/perf/util/env.c index 1e54e2c86360..4ff4caab3b32 100644 --- a/tools/perf/util/env.c +++ b/tools/perf/util/env.c @@ -1,10 +1,12 @@ // SPDX-License-Identifier: GPL-2.0 #include "cpumap.h" +#include "dwarf-regs.h" #include "debug.h" #include "env.h" #include "util/header.h" #include "util/rwsem.h" #include +#include #include #include #include @@ -309,12 +311,21 @@ void perf_env__init(struct perf_env *env) =20 static void perf_env__init_kernel_mode(struct perf_env *env) { - const char *arch =3D perf_env__raw_arch(env); + uint16_t e_machine =3D env->e_machine; =20 - if (!strncmp(arch, "x86_64", 6) || !strncmp(arch, "aarch64", 7) || - !strncmp(arch, "arm64", 5) || !strncmp(arch, "mips64", 6) || - !strncmp(arch, "parisc64", 8) || !strncmp(arch, "riscv64", 7) || - !strncmp(arch, "s390x", 5) || !strncmp(arch, "sparc64", 7)) + if (env->arch && (e_machine =3D=3D EM_NONE || e_machine =3D=3D EM_MIPS ||= e_machine =3D=3D EM_RISCV)) { + if (str_ends_with(env->arch, "64") || !strncmp(env->arch, "s390x", 5)) + env->kernel_is_64_bit =3D 1; + else + env->kernel_is_64_bit =3D 0; + return; + } + if (e_machine =3D=3D EM_NONE) + e_machine =3D perf_env__e_machine(env, /*e_flags=3D*/NULL); + + if (e_machine =3D=3D EM_X86_64 || e_machine =3D=3D EM_AARCH64 || + e_machine =3D=3D EM_PPC64 || e_machine =3D=3D EM_SPARCV9 || + e_machine =3D=3D EM_S390) env->kernel_is_64_bit =3D 1; else env->kernel_is_64_bit =3D 0; @@ -588,51 +599,187 @@ void cpu_cache_level__free(struct cpu_cache_level *c= ache) zfree(&cache->size); } =20 +struct arch_to_e_machine { + const char *prefix; + uint16_t e_machine; +}; + /* - * Return architecture name in a normalized form. - * The conversion logic comes from the Makefile. + * A mapping from an arch prefix string to an ELF machine that can be used= in a + * bsearch. Some arch prefixes are shared an need additional processing as + * marked next to the architecture. The prefixes handle both perf's archit= ecture + * naming and those from uname. */ -static const char *normalize_arch(char *arch) -{ - if (!strcmp(arch, "x86_64")) - return "x86"; - if (arch[0] =3D=3D 'i' && arch[2] =3D=3D '8' && arch[3] =3D=3D '6') - return "x86"; - if (!strcmp(arch, "sun4u") || !strncmp(arch, "sparc", 5)) - return "sparc"; - if (!strncmp(arch, "aarch64", 7) || !strncmp(arch, "arm64", 5)) - return "arm64"; - if (!strncmp(arch, "arm", 3) || !strcmp(arch, "sa110")) - return "arm"; - if (!strncmp(arch, "s390", 4)) - return "s390"; - if (!strncmp(arch, "parisc", 6)) - return "parisc"; - if (!strncmp(arch, "powerpc", 7) || !strncmp(arch, "ppc", 3)) - return "powerpc"; - if (!strncmp(arch, "mips", 4)) - return "mips"; - if (!strncmp(arch, "sh", 2) && isdigit(arch[2])) - return "sh"; - if (!strncmp(arch, "loongarch", 9)) - return "loongarch"; - - return arch; +static const struct arch_to_e_machine prefix_to_e_machine[] =3D { + {"aarch64", EM_AARCH64}, + {"alpha", EM_ALPHA}, + {"arc", EM_ARC}, + {"arm", EM_ARM}, /* Check also for EM_AARCH64. */ + {"avr", EM_AVR}, /* Check also for EM_AVR32. */ + {"bfin", EM_BLACKFIN}, + {"blackfin", EM_BLACKFIN}, + {"cris", EM_CRIS}, + {"csky", EM_CSKY}, + {"hppa", EM_PARISC}, + {"i386", EM_386}, + {"i486", EM_386}, + {"i586", EM_386}, + {"i686", EM_386}, + {"loongarch", EM_LOONGARCH}, + {"m32r", EM_M32R}, + {"m68k", EM_68K}, + {"microblaze", EM_MICROBLAZE}, + {"mips", EM_MIPS}, + {"msp430", EM_MSP430}, + {"parisc", EM_PARISC}, + {"powerpc", EM_PPC}, /* Check also for EM_PPC64. */ + {"ppc", EM_PPC}, /* Check also for EM_PPC64. */ + {"riscv", EM_RISCV}, + {"s390", EM_S390}, + {"sa110", EM_ARM}, + {"sh", EM_SH}, + {"sparc", EM_SPARC}, /* Check also for EM_SPARCV9. */ + {"sun4u", EM_SPARC}, + {"x86", EM_X86_64}, /* Check also for EM_386. */ + {"xtensa", EM_XTENSA}, +}; + +static int compare_prefix(const void *key, const void *element) +{ + const char *search_key =3D key; + const struct arch_to_e_machine *map_element =3D element; + size_t prefix_len =3D strlen(map_element->prefix); + + return strncmp(search_key, map_element->prefix, prefix_len); +} + +static uint16_t perf_arch_to_e_machine(const char *perf_arch, int is_64_bi= t) +{ + /* Binary search for a matching prefix. */ + const struct arch_to_e_machine *result; + + if (!perf_arch) + return EM_HOST; + + result =3D bsearch(perf_arch, + prefix_to_e_machine, ARRAY_SIZE(prefix_to_e_machine), + sizeof(prefix_to_e_machine[0]), + compare_prefix); + + if (!result) { + pr_debug("Unknown perf arch for ELF machine mapping: %s\n", perf_arch); + return EM_NONE; + } + + /* + * Handle conflicting prefixes. If the is_64_bit is unknown (-1) then + * assume 64-bit. We can't use perf_env__kernel_is_64_bit as that + * depends on the arch string. + */ + switch (result->e_machine) { + case EM_ARM: + return !strcmp(perf_arch, "arm64") ? EM_AARCH64 : EM_ARM; + case EM_AVR: + return !strcmp(perf_arch, "avr32") ? EM_AVR32 : EM_AVR; + case EM_PPC: + return (is_64_bit !=3D 0) || strstarts(perf_arch, "ppc64") ? EM_PPC64 : = EM_PPC; + case EM_SPARC: + return (is_64_bit !=3D 0) || !strcmp(perf_arch, "sparc64") ? EM_SPARCV9 = : EM_SPARC; + case EM_X86_64: + return (is_64_bit !=3D 0) || !strcmp(perf_arch, "x86_64") ? EM_X86_64 : = EM_386; + default: + return result->e_machine; + } +} + +static const char *e_machine_to_perf_arch(uint16_t e_machine) +{ + /* + * Table for if either the perf arch string differs from uname or there + * are >1 ELF machine with the prefix. + */ + static const struct arch_to_e_machine extras[] =3D { + {"arm64", EM_AARCH64}, + {"avr32", EM_AVR32}, + {"powerpc", EM_PPC}, + {"powerpc", EM_PPC64}, + {"sparc", EM_SPARCV9}, + {"x86", EM_386}, + {"x86", EM_X86_64}, + {"none", EM_NONE}, + }; + + for (size_t i =3D 0; i < ARRAY_SIZE(extras); i++) { + if (extras[i].e_machine =3D=3D e_machine) + return extras[i].prefix; + } + + for (size_t i =3D 0; i < ARRAY_SIZE(prefix_to_e_machine); i++) { + if (prefix_to_e_machine[i].e_machine =3D=3D e_machine) + return prefix_to_e_machine[i].prefix; + + } + return "unknown"; +} + +uint16_t perf_env__e_machine_nocache(struct perf_env *env, uint32_t *e_fla= gs) +{ + uint16_t e_machine =3D EM_HOST; + + if (env) + e_machine =3D perf_arch_to_e_machine(env->arch, env->kernel_is_64_bit); + + if (e_flags && e_machine =3D=3D EM_HOST) + *e_flags =3D EF_HOST; + + return e_machine; +} + +uint16_t perf_env__e_machine(struct perf_env *env, uint32_t *e_flags) +{ + uint16_t e_machine; + uint32_t local_e_flags; + + if (env && env->e_machine !=3D EM_NONE) { + if (e_flags) + *e_flags =3D env->e_flags; + + return env->e_machine; + } + e_machine =3D perf_env__e_machine_nocache(env, &local_e_flags); + if (env) { + env->e_machine =3D e_machine; + env->e_flags =3D local_e_flags; + } + if (e_flags) + *e_flags =3D local_e_flags; + + return e_machine; } =20 const char *perf_env__arch(struct perf_env *env) { - char *arch_name; + uint16_t e_machine; + const char *arch; =20 - if (!env || !env->arch) { /* Assume local operation */ - static struct utsname uts =3D { .machine[0] =3D '\0', }; - if (uts.machine[0] =3D=3D '\0' && uname(&uts) < 0) - return NULL; - arch_name =3D uts.machine; - } else - arch_name =3D env->arch; + if (!env) + return e_machine_to_perf_arch(EM_HOST); + + if (env->arch) + return env->arch; =20 - return normalize_arch(arch_name); + /* + * Lazily compute/allocate arch. The e_machine may have been + * read from a data file and so may not be EM_HOST. + */ + e_machine =3D perf_env__e_machine(env, /*e_flags=3D*/NULL); + arch =3D e_machine_to_perf_arch(e_machine); + env->arch =3D strdup(arch); + /* + * Avoid potential crashes on the arch string if memory allocation in + * strdup fails and NULL were to be returned. + */ + return env->arch ?: arch; } =20 #if defined(HAVE_LIBTRACEEVENT) diff --git a/tools/perf/util/env.h b/tools/perf/util/env.h index c7052ac1f856..7151a9138e3f 100644 --- a/tools/perf/util/env.h +++ b/tools/perf/util/env.h @@ -187,6 +187,8 @@ int perf_env__read_cpu_topology_map(struct perf_env *en= v); =20 void cpu_cache_level__free(struct cpu_cache_level *cache); =20 +uint16_t perf_env__e_machine_nocache(struct perf_env *env, uint32_t *e_fla= gs); +uint16_t perf_env__e_machine(struct perf_env *env, uint32_t *e_flags); const char *perf_env__arch(struct perf_env *env); const char *perf_env__arch_strerrno(struct perf_env *env, int err); const char *perf_env__cpuid(struct perf_env *env); diff --git a/tools/perf/util/header.c b/tools/perf/util/header.c index f30e48eb3fc3..8d5152bde25d 100644 --- a/tools/perf/util/header.c +++ b/tools/perf/util/header.c @@ -379,21 +379,28 @@ static int write_osrelease(struct feat_fd *ff, return do_write_string(ff, uts.release); } =20 -static int write_arch(struct feat_fd *ff, - struct evlist *evlist __maybe_unused) +static int write_arch(struct feat_fd *ff, struct evlist *evlist) { struct utsname uts; - int ret; + const char *arch =3D NULL; =20 - ret =3D uname(&uts); - if (ret < 0) - return -1; + if (evlist->session) { + /* Force the computation in the perf_env of the e_machine of the threads= . */ + perf_session__e_machine(evlist->session, /*e_flags=3D*/NULL); + arch =3D perf_env__arch(perf_session__env(evlist->session)); + } + + if (!arch) { + int ret =3D uname(&uts); =20 - return do_write_string(ff, uts.machine); + if (ret < 0) + return -1; + arch =3D uts.machine; + } + return do_write_string(ff, arch); } =20 -static int write_e_machine(struct feat_fd *ff, - struct evlist *evlist __maybe_unused) +static int write_e_machine(struct feat_fd *ff, struct evlist *evlist) { /* e_machine expanded from 16 to 32-bits for alignment. */ uint32_t e_flags; @@ -2684,10 +2691,30 @@ static int process_##__feat(struct feat_fd *ff, voi= d *data __maybe_unused) \ FEAT_PROCESS_STR_FUN(hostname, hostname); FEAT_PROCESS_STR_FUN(osrelease, os_release); FEAT_PROCESS_STR_FUN(version, version); -FEAT_PROCESS_STR_FUN(arch, arch); FEAT_PROCESS_STR_FUN(cpudesc, cpu_desc); FEAT_PROCESS_STR_FUN(cpuid, cpuid); =20 +static int process_arch(struct feat_fd *ff, void *data __maybe_unused) +{ + uint16_t saved_e_machine =3D ff->ph->env.e_machine; + + free(ff->ph->env.arch); + ff->ph->env.arch =3D do_read_string(ff); + if (!ff->ph->env.arch) + return -ENOMEM; + /* + * Make the arch string canonical by computing the e_machine from it, + * then turning the e_machine back into an arch string. + */ + ff->ph->env.e_machine =3D EM_NONE; + if (perf_env__e_machine(&ff->ph->env, /*e_flags=3D*/NULL) !=3D EM_NONE) { + zfree(&ff->ph->env.arch); + perf_env__arch(&ff->ph->env); + } + ff->ph->env.e_machine =3D saved_e_machine; + return 0; +} + static int process_e_machine(struct feat_fd *ff, void *data __maybe_unused) { int ret; diff --git a/tools/perf/util/session.c b/tools/perf/util/session.c index fe0de2a0277f..3e64db2d27c2 100644 --- a/tools/perf/util/session.c +++ b/tools/perf/util/session.c @@ -3023,14 +3023,19 @@ uint16_t perf_session__e_machine(struct perf_sessio= n *session, uint32_t *e_flags return EM_HOST; } =20 + /* + * Is the env caching an e_machine? If not we want to compute from the + * more accurate threads. + */ env =3D perf_session__env(session); - if (env && env->e_machine !=3D EM_NONE) { - if (e_flags) - *e_flags =3D env->e_flags; - - return env->e_machine; - } + if (env && env->e_machine !=3D EM_NONE) + return perf_env__e_machine(env, e_flags); =20 + /* + * Compute from threads, note this is more accurate than + * perf_env__e_machine that falls back on EM_HOST and doesn't consider + * mixed 32-bit and 64-bit threads. + */ machines__for_each_thread(&session->machines, perf_session__e_machine_cb, &args); @@ -3048,10 +3053,9 @@ uint16_t perf_session__e_machine(struct perf_session= *session, uint32_t *e_flags =20 /* * Couldn't determine from the perf_env or current set of - * threads. Default to the host. + * threads. Potentially use logic that uses the arch string otherwise + * default to the host. Don't cache in the perf_env in case later + * threads indicate a better ELF machine type. */ - if (e_flags) - *e_flags =3D EF_HOST; - - return EM_HOST; + return perf_env__e_machine_nocache(env, e_flags); } --=20 2.54.0.545.g6539524ca2-goog From nobody Sun Jun 14 06:07:09 2026 Received: from mail-dl1-f74.google.com (mail-dl1-f74.google.com [74.125.82.74]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D686C2FC01B for ; Sat, 2 May 2026 06:59:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.74 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777705198; cv=none; b=O/lgcXW953Lm6pbPbg4+nLEaphX8ronroOYjnpTNYjk0I9fpvbJyM98OE00QifJ5+p7gl6+QIz3VYtoo8OZS0uwVarcBZfMLzHbxwpxJBRcsipARjQk9TayoVyoyHxIuBfMMxFRwI9meNeVqwKFw+Ligu9Aw94Uu/JXoHKHXk2w= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777705198; c=relaxed/simple; bh=dePQroO1x6u4W4p4OjprVA1y6YkSFx4TAjmbutXcF6o=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=VTDGsj4HMsbeu5vLXaQDQu/RYqeQqUi5WlnhONoIU83pXUetBKlWrKYQbTjZx7rcqIeY7iDkxecZOJHPmr36VK4KeYZlpii6VjOMDRvW4Ut4h5bTq9aOeEfOQD13X2t26dDBHNaXuIoI3POW28IenMtqRc9nd6k0pecYdnlaKVo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=ThjHX8Xc; arc=none smtp.client-ip=74.125.82.74 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="ThjHX8Xc" Received: by mail-dl1-f74.google.com with SMTP id a92af1059eb24-12c8ccc7593so1694914c88.1 for ; Fri, 01 May 2026 23:59:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1777705196; x=1778309996; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=M+bU3LlfHduMRXriJM/lVN2ewJoBx+eB8b+i1D8BIsU=; b=ThjHX8XcL/ZOdnFE9kKFgK219G5okeqhE2DKv5DJyPNrf01543xtqu/WOYsTRi0BQP UX6ThB5Xdr2Ki00rYsBuX/E0K/ap+O/O2TX//CsPxZLiLW26dKsAt95TaQ1c76t0vCXd osugVWI4/ElyfBYVjr3XBgPNzeuOvU48gnziNDmki8HbYko4HdYcXiygK/IvicJmt5tt YMd7/oSt3daP9d8mXRsRbNmFH0xAi5CJI0yMpSaokNTIonsPBmsVc2cDpetZzM+Dx0Sn IiJLtcvfLyW/j1ruGYuEenpnqV54goutDRnQWqhYqgBrRmOO8A+LmOCH0hSWX5MNmF0E 1BmQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777705196; x=1778309996; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=M+bU3LlfHduMRXriJM/lVN2ewJoBx+eB8b+i1D8BIsU=; b=r+Qcyd5WGn7sxEHpE51q6ct80OuVjRkIVPuDN81tGuofXKEORC1hPo36c1wzHRvxXv YzKRpN2g5+nOfyMLRUzikBk6xOPKz0HVD/5MGTI4yvcDTu1xWswKEhOHT5Kw0xrVxL/9 DbgOjsmm7KkLcecoPmtsjhZFEmYc8mV8SAKxWwAWhUya71FOfGn2uEjI4YrsRrVYAmaA UqmFepyEPRi8KHfWECeXckpaRClBG9+T7jn2gGP2l+cAkYQvd6VE0Ci6pmU0aQpBLJ1o DyXq79IS8S2LCGsi6pHjz216hE0C4dhU52aoiqyO2PPhlT8gR1ILG7ZfdDg9eoj+FKeO gIZw== X-Forwarded-Encrypted: i=1; AFNElJ+ajqHuC/pJpNHkNVyonTOGXWIRdYisRdNJN4VyV78yyNvgKctXAgktMW0+bfKVulA8xbCSh+DDZK1vB4s=@vger.kernel.org X-Gm-Message-State: AOJu0YzgOaYYh9ZD71R22seJXcF8hPQHTHVeHeUD4aFU1IlmAdIdQkob UEgvIoVQNrEnc4lEiZI/fNqQw/y//LkWeN+LBVFA47fTrd8qFhR9jPNg7Y6ASvbzFKCLMOXcOD1 MaXFhHTRFXw== X-Received: from dlea17-n2.prod.google.com ([2002:a05:701b:4211:20b0:12d:b7d3:3e31]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7022:102:b0:12d:de3f:f3e0 with SMTP id a92af1059eb24-12dfd858799mr978909c88.42.1777705195974; Fri, 01 May 2026 23:59:55 -0700 (PDT) Date: Fri, 1 May 2026 23:59:20 -0700 In-Reply-To: <20260502065935.291960-1-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260409230620.4176210-2-irogers@google.com> <20260502065935.291960-1-irogers@google.com> X-Mailer: git-send-email 2.54.0.545.g6539524ca2-goog Message-ID: <20260502065935.291960-3-irogers@google.com> Subject: [PATCH v8 02/17] perf tests topology: Switch env->arch use to env->e_machine From: Ian Rogers To: irogers@google.com, acme@kernel.org, namhyung@kernel.org, tmricht@linux.ibm.com Cc: agordeev@linux.ibm.com, gor@linux.ibm.com, hca@linux.ibm.com, jameshongleiwang@126.com, japo@linux.ibm.com, linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, linux-s390@vger.kernel.org, sumanthk@linux.ibm.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Some arch string comparisons weren't normalized. Avoid potential issues with normalized names vs uname values by swtiching to using the e_machine. Signed-off-by: Ian Rogers --- tools/perf/tests/topology.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/tools/perf/tests/topology.c b/tools/perf/tests/topology.c index f54502ebef4b..d4c5c330c679 100644 --- a/tools/perf/tests/topology.c +++ b/tools/perf/tests/topology.c @@ -11,6 +11,7 @@ #include "pmus.h" #include "target.h" #include +#include =20 #define TEMPL "/tmp/perf-test-XXXXXX" #define DATA_SIZE 10 @@ -74,6 +75,7 @@ static int check_cpu_topology(char *path, struct perf_cpu= _map *map) struct aggr_cpu_id id; struct perf_cpu cpu; struct perf_env *env; + uint16_t e_machine; =20 session =3D perf_session__new(&data, NULL); TEST_ASSERT_VAL("can't get session", !IS_ERR(session)); @@ -101,7 +103,9 @@ static int check_cpu_topology(char *path, struct perf_c= pu_map *map) * condition is true (see do_core_id_test in header.c). So always * run this test on those platforms. */ - if (!env->cpu && strncmp(env->arch, "s390", 4) && strncmp(env->arch, "aar= ch64", 7)) + e_machine =3D perf_env__e_machine(env, NULL); + + if (!env->cpu && e_machine !=3D EM_S390 && e_machine !=3D EM_AARCH64) return TEST_SKIP; =20 /* @@ -110,7 +114,7 @@ static int check_cpu_topology(char *path, struct perf_c= pu_map *map) * physical_package_id will be set to -1. Hence skip this * test if physical_package_id returns -1 for cpu from perf_cpu_map. */ - if (!strncmp(env->arch, "ppc64le", 7)) { + if (e_machine =3D=3D EM_PPC64) { if (cpu__get_socket_id(perf_cpu_map__cpu(map, 0)) =3D=3D -1) return TEST_SKIP; } --=20 2.54.0.545.g6539524ca2-goog From nobody Sun Jun 14 06:07:09 2026 Received: from mail-dl1-f73.google.com (mail-dl1-f73.google.com [74.125.82.73]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 00F5D3016F5 for ; Sat, 2 May 2026 06:59:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777705200; cv=none; b=ZjvU/3+FKUFCvrBMsmp3kc7NrrKfAtB/u3Masv5QETztlZO5ROLy6SqbSGp5wsC4qT3d4H2RY98eATavCjAP72S93Oc0DwS/cLdUhLGfdjGVECYx9v4oy2rB0dOgl9YpiB8Y8rDcSEGmlygKqaNKIedkLUrIUYRsI9JdU4l6I8U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777705200; c=relaxed/simple; bh=Ih3Q2eYIF9wFvgMWGsJmW93qVjkDo2mDZ0DTIg/LtdY=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=WxG49fariESHXMSqC69f3CoCPNNQ2WgpPrMrr/qCwQrh+MoG8+A54oLqAIgpVrUfW+HYZnOHTE01zDKu33ZxXNwyTWQlOjoFs98+IuR4WRr7esRP4DEwuqiYtvJsrFoIOliWzlzGbI7LH++JefD9Ntp0H3i23IDPbKU9KFy7OCI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=fTLbsZ0Z; arc=none smtp.client-ip=74.125.82.73 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="fTLbsZ0Z" Received: by mail-dl1-f73.google.com with SMTP id a92af1059eb24-12c8ccc7593so1694946c88.1 for ; Fri, 01 May 2026 23:59:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1777705198; x=1778309998; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=cGghryugrj5pfe+2ckovcxGulzRiLQqYShkhaYL4998=; b=fTLbsZ0ZHh5blRtAAfbeDJX2wTg8RlQ9VpLhwdCP4OH88YrDWtFy7TXRKp7AcWMX4I /WFhtRYljochEDAQc0o/wjjwz7uEtwhwLwincjrj4GJdAxJtPuCBCylbmBKwDeKQTuxv zKAYDRNPoitymZvU9mxB+2aPL/VVYyi2gWydQ1b+k4N9xKJ3wAvVS55cuWH+MpjgZXG5 KF8hlQgGiE/9TKpYYoDH69JWE4MVQZ4NZML/lTCWW7/nFnlNcZDhRWI3RU2cvODhzDym /E+7XCjJ8OTb3GI9EBO2QdHOUr95hyZAqG0oMQekfPoBoUjRpcHlQzfB4ei06lN0l+d5 NrKA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777705198; x=1778309998; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=cGghryugrj5pfe+2ckovcxGulzRiLQqYShkhaYL4998=; b=FoNm0Ardt40g99kfc6Zgs6mnNc2nAIPt3Gh+jBdBHqsqKCOO4ztXFNfucmMS9GHRgr OsirhaLLPHQbcUeWk+fVPuwBqpP8RibP0Q0OumtB8KQsVXbD7fE2mIULC1XMkSKWm5cD qyeIOZyQoYKnh6jHayXCS2booZNp+t0JagMKwoSuqKqeo3OcuaDAVvWAJKfRm2UpfKCs tsgo8aoNTTecRWVuJ9m1NO4xCCYv5uAPDw4IlG0SC/O8mFh35mAJ3+2Tja4MsNnRIO8c WpzBNS1kZ1mjhihzgv5BNcnfLMtbC3cN+TTv6luxZVYKJn3LtwulVpd7iwUWrzuN3tps +SNA== X-Forwarded-Encrypted: i=1; AFNElJ8KL/DvQBUs2UCd0y2fZugFsHMvY6n8jA3+yJCnSAWI1kezktOUiHqbitY4DB06hpEqf/kepKiQhOJpUzw=@vger.kernel.org X-Gm-Message-State: AOJu0Yz0Mg4IBo1JQIxGMwiFa1UPs0T4kOrXEBqRJRphGBpRxMSmC38r BvcBKewQ1JACCnCoyfLqp/ewlBMCwZsORblQ94Cp3WSdWUbPdwiB2z9U7rm776NwCM1XGuCqtgs g1vr9PzFCoA== X-Received: from dlbto8.prod.google.com ([2002:a05:7022:3b08:b0:12c:1fa5:ab7c]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7022:608:b0:12b:f8f0:80c7 with SMTP id a92af1059eb24-12dfd82435emr682325c88.21.1777705198041; Fri, 01 May 2026 23:59:58 -0700 (PDT) Date: Fri, 1 May 2026 23:59:21 -0700 In-Reply-To: <20260502065935.291960-1-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260409230620.4176210-2-irogers@google.com> <20260502065935.291960-1-irogers@google.com> X-Mailer: git-send-email 2.54.0.545.g6539524ca2-goog Message-ID: <20260502065935.291960-4-irogers@google.com> Subject: [PATCH v8 03/17] perf capstone: Determine architecture from e_machine From: Ian Rogers To: irogers@google.com, acme@kernel.org, namhyung@kernel.org, tmricht@linux.ibm.com Cc: agordeev@linux.ibm.com, gor@linux.ibm.com, hca@linux.ibm.com, jameshongleiwang@126.com, japo@linux.ibm.com, linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, linux-s390@vger.kernel.org, sumanthk@linux.ibm.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Avoid the use of arch string that is imprecise and use the e_machine. Do more e_machine to capstone machine translations adding MIPS and RISCV. Remove unnecessary maybe_unused annotations. Signed-off-by: Ian Rogers --- tools/perf/util/capstone.c | 115 +++++++++++++++++++++++++------------ 1 file changed, 79 insertions(+), 36 deletions(-) diff --git a/tools/perf/util/capstone.c b/tools/perf/util/capstone.c index 25cf6e15ec27..e6226b751c36 100644 --- a/tools/perf/util/capstone.c +++ b/tools/perf/util/capstone.c @@ -16,6 +16,7 @@ #include #include #include +#include =20 #include =20 @@ -137,37 +138,74 @@ static enum cs_err perf_cs_close(csh *handle) #endif } =20 -static int capstone_init(struct machine *machine, csh *cs_handle, bool is6= 4, - bool disassembler_style) +static bool e_machine_to_capstone(uint16_t e_machine, bool is64, + enum cs_arch *arch, enum cs_mode *mode) +{ + switch (e_machine) { + case EM_X86_64: + *arch =3D CS_ARCH_X86; + *mode =3D CS_MODE_64; + return true; + case EM_386: + *arch =3D CS_ARCH_X86; + *mode =3D CS_MODE_32; + return true; + case EM_AARCH64: + *arch =3D CS_ARCH_ARM64; + *mode =3D CS_MODE_ARM; + return true; + case EM_ARM: + *arch =3D CS_ARCH_ARM; + *mode =3D CS_MODE_ARM | CS_MODE_V8; + return true; + case EM_S390: + *arch =3D CS_ARCH_SYSZ; + *mode =3D CS_MODE_BIG_ENDIAN; + return true; + case EM_MIPS: + *arch =3D CS_ARCH_MIPS; + *mode =3D is64 ? CS_MODE_MIPS64 : CS_MODE_MIPS32; + *mode |=3D CS_MODE_BIG_ENDIAN; + return true; + case EM_PPC: + *arch =3D CS_ARCH_PPC; + *mode =3D CS_MODE_BIG_ENDIAN | CS_MODE_32; + return true; + case EM_PPC64: + *arch =3D CS_ARCH_PPC; + *mode =3D CS_MODE_BIG_ENDIAN | CS_MODE_64; + return true; + case EM_SPARC: + *arch =3D CS_ARCH_SPARC; + *mode =3D CS_MODE_BIG_ENDIAN | CS_MODE_32; + return true; + case EM_SPARCV9: + *arch =3D CS_ARCH_SPARC; + *mode =3D CS_MODE_BIG_ENDIAN | CS_MODE_V9 | CS_MODE_64; + return true; + case EM_RISCV: + *arch =3D CS_ARCH_RISCV; + *mode =3D is64 ? CS_MODE_RISCV64 : CS_MODE_RISCV32; + return true; + default: + return false; + } +} + +static int capstone_init(uint16_t e_machine, csh *cs_handle, bool is64, bo= ol disassembler_style) { enum cs_arch arch; enum cs_mode mode; =20 - if (machine__is(machine, "x86_64") && is64) { - arch =3D CS_ARCH_X86; - mode =3D CS_MODE_64; - } else if (machine__normalized_is(machine, "x86")) { - arch =3D CS_ARCH_X86; - mode =3D CS_MODE_32; - } else if (machine__normalized_is(machine, "arm64")) { - arch =3D CS_ARCH_ARM64; - mode =3D CS_MODE_ARM; - } else if (machine__normalized_is(machine, "arm")) { - arch =3D CS_ARCH_ARM; - mode =3D CS_MODE_ARM + CS_MODE_V8; - } else if (machine__normalized_is(machine, "s390")) { - arch =3D CS_ARCH_SYSZ; - mode =3D CS_MODE_BIG_ENDIAN; - } else { + if (!e_machine_to_capstone(e_machine, is64, &arch, &mode)) return -1; - } =20 if (perf_cs_open(arch, mode, cs_handle) !=3D CS_ERR_OK) { pr_warning_once("cs_open failed\n"); return -1; } =20 - if (machine__normalized_is(machine, "x86")) { + if (arch =3D=3D CS_ARCH_X86) { /* * In case of using capstone_init while symbol__disassemble * setting CS_OPT_SYNTAX_ATT depends if disassembler_style opts @@ -212,28 +250,31 @@ static size_t print_insn_x86(struct thread *thread, u= 8 cpumode, struct cs_insn * } =20 =20 -ssize_t capstone__fprintf_insn_asm(struct machine *machine __maybe_unused, - struct thread *thread __maybe_unused, - u8 cpumode __maybe_unused, bool is64bit __maybe_unused, - const uint8_t *code __maybe_unused, - size_t code_size __maybe_unused, - uint64_t ip __maybe_unused, int *lenp __maybe_unused, - int print_opts __maybe_unused, FILE *fp __maybe_unused) +ssize_t capstone__fprintf_insn_asm(struct machine *machine, + struct thread *thread, + u8 cpumode, + bool is64bit, + const uint8_t *code, + size_t code_size, + uint64_t ip, int *lenp, + int print_opts, + FILE *fp) { size_t printed; struct cs_insn *insn; csh cs_handle; size_t count; + uint16_t e_machine =3D thread__e_machine(thread, machine, /*e_flags=3D*/N= ULL); int ret; =20 /* TODO: Try to initiate capstone only once but need a proper place. */ - ret =3D capstone_init(machine, &cs_handle, is64bit, true); + ret =3D capstone_init(e_machine, &cs_handle, is64bit, /*disassembler_styl= e=3D*/true); if (ret < 0) return ret; =20 count =3D perf_cs_disasm(cs_handle, code, code_size, ip, 1, &insn); if (count > 0) { - if (machine__normalized_is(machine, "x86")) + if (e_machine =3D=3D EM_X86_64 || e_machine =3D=3D EM_386) printed =3D print_insn_x86(thread, cpumode, &insn[0], print_opts, fp); else printed =3D fprintf(fp, "%s %s", insn[0].mnemonic, insn[0].op_str); @@ -322,9 +363,9 @@ static int find_file_offset(u64 start, u64 len, u64 pgo= ff, void *arg) return 0; } =20 -int symbol__disassemble_capstone(const char *filename __maybe_unused, - struct symbol *sym __maybe_unused, - struct annotate_args *args __maybe_unused) +int symbol__disassemble_capstone(const char *filename, + struct symbol *sym, + struct annotate_args *args) { struct annotation *notes =3D symbol__annotation(sym); struct map *map =3D args->ms->map; @@ -344,6 +385,7 @@ int symbol__disassemble_capstone(const char *filename _= _maybe_unused, char disasm_buf[512]; struct disasm_line *dl; bool disassembler_style =3D false; + uint16_t e_machine; =20 if (args->options->objdump_path) return -1; @@ -373,8 +415,8 @@ int symbol__disassemble_capstone(const char *filename _= _maybe_unused, !strcmp(args->options->disassembler_style, "att")) disassembler_style =3D true; =20 - if (capstone_init(maps__machine(thread__maps(args->ms->thread)), &handle,= is_64bit, - disassembler_style) < 0) + e_machine =3D thread__e_machine(args->ms->thread, /*machine=3D*/NULL, /*e= _flags=3D*/NULL); + if (capstone_init(e_machine, &handle, is_64bit, disassembler_style) < 0) goto err; =20 needs_cs_close =3D true; @@ -466,6 +508,7 @@ int symbol__disassemble_capstone_powerpc(const char *fi= lename __maybe_unused, struct disasm_line *dl; u32 *line; bool disassembler_style =3D false; + uint16_t e_machine; =20 if (args->options->objdump_path) return -1; @@ -484,8 +527,8 @@ int symbol__disassemble_capstone_powerpc(const char *fi= lename __maybe_unused, !strcmp(args->options->disassembler_style, "att")) disassembler_style =3D true; =20 - if (capstone_init(maps__machine(thread__maps(args->ms->thread)), &handle,= is_64bit, - disassembler_style) < 0) + e_machine =3D thread__e_machine(args->ms->thread, /*machine=3D*/NULL, /*e= _flags=3D*/NULL); + if (capstone_init(e_machine, &handle, is_64bit, disassembler_style) < 0) goto err; =20 needs_cs_close =3D true; --=20 2.54.0.545.g6539524ca2-goog From nobody Sun Jun 14 06:07:09 2026 Received: from mail-dl1-f74.google.com (mail-dl1-f74.google.com [74.125.82.74]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 27B3D30214B for ; Sat, 2 May 2026 07:00:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.74 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777705202; cv=none; b=jjXL5q46scxZDWBrSEtyzfduCRbWHGBMFziBi30WEW3VKHNzAGwtvdmlZhEH+rsq+pXBvrg9EgRiyfOsoAoobNyPiYS6eO8yOKrHxK4jIi+YcWqo1rTEbO3J8g1kvqoyLXOjJ1s6jMZ6PdwFjLC+Eksq+w+qD6efY0HewOWrIO0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777705202; c=relaxed/simple; bh=+Dwduun+tmVj+ZELsZc9j2WnUnKWnNcSWbU5YGl2oTE=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=J3nUMOqt4gIXL4Wq7YI4XtThU96RyBJR//fDd1cKpL+bReTFqveyQdcsam5se4tNwK+ZpD37ROk2FeKl882GEPk+5sYVz0G7o35vVeVrmPmLJadL/rxfmxaP8omJK01FCeCy5gGViAjMqu/Fymo6kUSZz2e9bgvlTuPrnvf1OEg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=Hn4X0kzA; arc=none smtp.client-ip=74.125.82.74 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="Hn4X0kzA" Received: by mail-dl1-f74.google.com with SMTP id a92af1059eb24-1270dcd11c1so4620285c88.0 for ; Sat, 02 May 2026 00:00:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1777705200; x=1778310000; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=6Nq2EPpcKxJGq1ZHta1JguJ9mMsz5mvveNgAQQT6Szs=; b=Hn4X0kzAA3HCch/xtWfoa7eE9w7THRp5oLjeF0zeBQPWvtotjfDPoxsRAA4COpd5U1 FPUIlUA3hStxsuz58FfA4RdBdYAIBbUEv+lU50rAgIre929MMKUhci9nbw8K4LflfoTV 0NW1w9M3Viw5ilMmz7Fih68LAN4fb26X32LUKU0lDVwr2gm/UsrrWcH5pFbYeww5+ZoR QysAs2o0V9/bBQzkxMvp8ruXZOoCSQxzrmOz0b/i3OZ2xOL1tyhJ2sK+zQ9y5Q3XRIYu GPVrppytoDGGQWv6rhgTn8RaH72OHipbLcInJAwCtwcejIXj76c+39VuRSdDGskKXf0S efOQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777705200; x=1778310000; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=6Nq2EPpcKxJGq1ZHta1JguJ9mMsz5mvveNgAQQT6Szs=; b=slzjjCxtQy+YzPpatkaEG60nZY0qlJcBPx4ZSGlXIjAtRqYk2UQmMzIJe45tbE+saC Y6xBRxOPR7YHFAitSV/rdvXXmz8oW6FUstTwW9aBmmVPCuxaEVknmG0GJrqe2cNo61hh HQf54o3BvBV66fG/TVOg1mvcRB1VnLE1T8Qdl6i4qjlap1lqc4rWBqh1HtHYJLeMv8ry KJ1vuahN7WcZhtz/rq4O5o35Dke95R88AiU9VfBOvYJtFjNwHEy8n37OvV5tiB6mQ1Ht zzlpGoYxHgXyfZdT8CLrc/VkFdpaMcbKGEw059PDSX1w0FWOzzDp4DqXy0YwSSOf4Uzw df3w== X-Forwarded-Encrypted: i=1; AFNElJ/VHeK8UXZxhqrigByvqMf5XrMYAMv27o8x6MVdUkp926sAP91vynXfRPJPGtgWWRQRXy13N41ah9aeox4=@vger.kernel.org X-Gm-Message-State: AOJu0YwG9P6UV/NXvTKpcsdX5a4Ue3FPGdzrRFi6B43P0e0hJZ9UGhgR SHdjcjBb8Qhd8kj2fEIN2CaG2LuZiPYppOsIZsmAA8onnTMYqr/EW/vVcs46W6QkEnntwm9UJqM bzjH4UJ7Tiw== X-Received: from dll26.prod.google.com ([2002:a05:7022:21a:b0:12d:b48e:8597]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7022:404:b0:128:d494:a1ab with SMTP id a92af1059eb24-12dfd7c9fc3mr833194c88.15.1777705200183; Sat, 02 May 2026 00:00:00 -0700 (PDT) Date: Fri, 1 May 2026 23:59:22 -0700 In-Reply-To: <20260502065935.291960-1-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260409230620.4176210-2-irogers@google.com> <20260502065935.291960-1-irogers@google.com> X-Mailer: git-send-email 2.54.0.545.g6539524ca2-goog Message-ID: <20260502065935.291960-5-irogers@google.com> Subject: [PATCH v8 04/17] perf print_insn: Use e_machine for fallback IP length check From: Ian Rogers To: irogers@google.com, acme@kernel.org, namhyung@kernel.org, tmricht@linux.ibm.com Cc: agordeev@linux.ibm.com, gor@linux.ibm.com, hca@linux.ibm.com, jameshongleiwang@126.com, japo@linux.ibm.com, linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, linux-s390@vger.kernel.org, sumanthk@linux.ibm.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Avoid string comparisons with perf_env arch, switch to using the more precise ELF machine. Signed-off-by: Ian Rogers --- tools/perf/util/print_insn.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/tools/perf/util/print_insn.c b/tools/perf/util/print_insn.c index 02e6fbb8ca04..5e36344174d6 100644 --- a/tools/perf/util/print_insn.c +++ b/tools/perf/util/print_insn.c @@ -9,6 +9,7 @@ #include #include "capstone.h" #include "debug.h" +#include "env.h" #include "sample.h" #include "symbol.h" #include "machine.h" @@ -17,6 +18,7 @@ #include "dump-insn.h" #include "map.h" #include "dso.h" +#include =20 size_t sample__fprintf_insn_raw(struct perf_sample *sample, FILE *fp) { @@ -33,13 +35,13 @@ size_t sample__fprintf_insn_raw(struct perf_sample *sam= ple, FILE *fp) static bool is64bitip(struct machine *machine, struct addr_location *al) { const struct dso *dso =3D al->map ? map__dso(al->map) : NULL; + uint16_t e_machine; =20 if (dso) return dso__is_64_bit(dso); =20 - return machine__is(machine, "x86_64") || - machine__normalized_is(machine, "arm64") || - machine__normalized_is(machine, "s390"); + e_machine =3D perf_env__e_machine(machine->env, /*e_flags=3D*/NULL); + return e_machine =3D=3D EM_X86_64 || e_machine =3D=3D EM_AARCH64 || e_mac= hine =3D=3D EM_S390; } =20 ssize_t fprintf_insn_asm(struct machine *machine, struct thread *thread, u= 8 cpumode, --=20 2.54.0.545.g6539524ca2-goog From nobody Sun Jun 14 06:07:09 2026 Received: from mail-dy1-f201.google.com (mail-dy1-f201.google.com [74.125.82.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8F7AF30BB80 for ; Sat, 2 May 2026 07:00:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777705213; cv=none; b=FETl/vo2Tgef+8O7tTXfDG/O9rwgc91YmJTOn2qxsRs/3do2xsXOuv/WFuzJdRpmupdBm7Gt/vzyPVMwVjmJsi8NiDaC84NS4ZIPKGd7tU1AbIl/gjddM8OtsDazbEeqLkais6ZHoUMESMLUd14dXp9eLG/L8+85hKh3rPHsgFU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777705213; c=relaxed/simple; bh=/g19K4HeaUNMX95kGXSMwY9kZbGyi17nk8eWwkTFbEo=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=NJqq2O/msTbb0UESx2qAQXm7MM5RqGm5d+OfHi7mNDtR7yBq3h8BYiXLLONj7TFAt9iHoj+CoSyOr+i59JxbC0FsBmwxs/cT2V6rUbKcT6E/hH60UKRoxuPlULx7AfxttYOFcU8eBe1tZasUXt7mgB/pOXLuxeUOj66hR7ts/Z4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=i5R1DpVS; arc=none smtp.client-ip=74.125.82.201 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="i5R1DpVS" Received: by mail-dy1-f201.google.com with SMTP id 5a478bee46e88-2ef62078ee7so780045eec.0 for ; Sat, 02 May 2026 00:00:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1777705203; x=1778310003; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=uTtIRHRKCWvPzr+ogiuYCalROJTpC+azMEHxFbhdWy4=; b=i5R1DpVSXTYiQkOAwhI5k3lpvLCldmQjgZ/KoIIpwJiA5jhOaR+TeWQ3GWjG7/AyGH M83qE24MPyBO+nMH86gNCJK1jKOyIMy2vzUZSDyeXtg9u7rzk2Yy7UW9Jf98+ncieWOj DZPg7XoFKr3iqUiSYz1Y84A1qiE3LXJYtrBcLIUVeBRZNEmaA3QjHoH9MSq3DtfqyE82 l1uumF6IwCw2KkA5/o8hnknFJRlBwVHsHTJ6DQI0d7+iqo23/gj3OcCw5qDw+okO4Agy b/4FFnrxnJ3WPl1eGqqiaeayF8sCLCcSqDhmnCSuYff2CXONLAYo0c7ckWO+FOPz3ZVz DxSw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777705203; x=1778310003; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=uTtIRHRKCWvPzr+ogiuYCalROJTpC+azMEHxFbhdWy4=; b=YTw1oiz36dyYP6X6wjoEJ3tRWO7+2c0BmK8okgSIibP5bTF5HXbpzUGAutuEkGaY1d 2MN7PQOhTi12iNB2U3cUz9ofaXul7LIEMIHO5tqL24NRBCVCeOHbCJl5JzDlBmiR3Y4E x+VwBuaTkJbasy7Wy0HVEyzwIdq4PHa7czS6cle+lyYOBgZpnbgcJEJkTNZSULgoZDnV Cfkz8CSQeSWHz10GRIOGVZcEweQBqGri9C3zEFloK5awJvJbUfqCMtUP/bwPLUbRhN0h +mmYSjT15NFMg1QpxojUND7FUFcAUmA+KXoDnhT9e0KK78qPukP6UH3GtDErnPaN6qbt SwCg== X-Forwarded-Encrypted: i=1; AFNElJ8XieXyMiB7ROq3cxppdfDC9hyWoCbeO+9Xo4AI/FlWu2gfdpxtO8aUXcp3/IMs40nl0YjGCIPKd4OvIEA=@vger.kernel.org X-Gm-Message-State: AOJu0YxNWNW6/KCX4Da+9ZBPRP0HIkiKczwYI7x0j8J8FCLzhVRmtsNM Admn/oJeBok+JFgnctSqqWpmDSvKyV4zoUsk76jUCu3OBZyh3nnz3FedAZjXjCtfbv6JvCfVAy4 VzpkxRRnoSg== X-Received: from dybmr11.prod.google.com ([2002:a05:7300:cacb:b0:2f0:2767:d69]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7300:6c2b:b0:2ee:f85:ec3c with SMTP id 5a478bee46e88-2efbb8758fdmr841650eec.30.1777705202593; Sat, 02 May 2026 00:00:02 -0700 (PDT) Date: Fri, 1 May 2026 23:59:23 -0700 In-Reply-To: <20260502065935.291960-1-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260409230620.4176210-2-irogers@google.com> <20260502065935.291960-1-irogers@google.com> X-Mailer: git-send-email 2.54.0.545.g6539524ca2-goog Message-ID: <20260502065935.291960-6-irogers@google.com> Subject: [PATCH v8 05/17] perf machine: Use perf_env e_machine rather than arch From: Ian Rogers To: irogers@google.com, acme@kernel.org, namhyung@kernel.org, tmricht@linux.ibm.com Cc: agordeev@linux.ibm.com, gor@linux.ibm.com, hca@linux.ibm.com, jameshongleiwang@126.com, japo@linux.ibm.com, linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, linux-s390@vger.kernel.org, sumanthk@linux.ibm.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The arch string is derived from uname and may be normalized causing potential differences meaning the ELF machine can be more precise. Reduce the scope of machine__is as often it is better to use a thread for the e_machine rather than the machine. Switch from string to ELF machine constant comparisons. Signed-off-by: Ian Rogers --- tools/perf/util/machine.c | 25 ++++++++----------------- tools/perf/util/machine.h | 2 -- 2 files changed, 8 insertions(+), 19 deletions(-) diff --git a/tools/perf/util/machine.c b/tools/perf/util/machine.c index e76f8c86e62a..6d32d3cb5cb7 100644 --- a/tools/perf/util/machine.c +++ b/tools/perf/util/machine.c @@ -1611,10 +1611,15 @@ static bool machine__uses_kcore(struct machine *mac= hine) return dsos__for_each_dso(&machine->dsos, machine__uses_kcore_cb, NULL) != =3D 0 ? true : false; } =20 +static bool machine__is(struct machine *machine, uint16_t e_machine) +{ + return machine && perf_env__e_machine(machine->env, NULL) =3D=3D e_machin= e; +} + static bool perf_event__is_extra_kernel_mmap(struct machine *machine, struct extra_kernel_map *xm) { - return machine__is(machine, "x86_64") && + return machine__is(machine, EM_X86_64) && is_entry_trampoline(xm->name); } =20 @@ -2770,7 +2775,7 @@ static int find_prev_cpumode(struct ip_callchain *cha= in, struct thread *thread, static u64 get_leaf_frame_caller(struct perf_sample *sample, struct thread *thread, int usr_idx) { - if (machine__normalized_is(maps__machine(thread__maps(thread)), "arm64")) + if (thread__e_machine(thread, /*machine=3D*/NULL, /*e_flags=3D*/NULL) =3D= =3D EM_AARCH64) return get_leaf_frame_caller_aarch64(sample, thread, usr_idx); else return 0; @@ -3141,20 +3146,6 @@ int machine__set_current_tid(struct machine *machine= , int cpu, pid_t pid, return 0; } =20 -/* - * Compares the raw arch string. N.B. see instead perf_env__arch() or - * machine__normalized_is() if a normalized arch is needed. - */ -bool machine__is(struct machine *machine, const char *arch) -{ - return machine && !strcmp(perf_env__raw_arch(machine->env), arch); -} - -bool machine__normalized_is(struct machine *machine, const char *arch) -{ - return machine && !strcmp(perf_env__arch(machine->env), arch); -} - int machine__nr_cpus_avail(struct machine *machine) { return machine ? perf_env__nr_cpus_avail(machine->env) : 0; @@ -3181,7 +3172,7 @@ int machine__get_kernel_start(struct machine *machine) * start of kernel text, but still above 2^63. So leave * kernel_start =3D 1ULL << 63 for x86_64. */ - if (!err && !machine__is(machine, "x86_64")) + if (!err && !machine__is(machine, EM_X86_64)) machine->kernel_start =3D map__start(map); } return err; diff --git a/tools/perf/util/machine.h b/tools/perf/util/machine.h index 22a42c5825fa..003c970b3e4b 100644 --- a/tools/perf/util/machine.h +++ b/tools/perf/util/machine.h @@ -227,8 +227,6 @@ static inline bool machine__is_host(struct machine *mac= hine) } =20 bool machine__is_lock_function(struct machine *machine, u64 addr); -bool machine__is(struct machine *machine, const char *arch); -bool machine__normalized_is(struct machine *machine, const char *arch); int machine__nr_cpus_avail(struct machine *machine); =20 struct thread *machine__findnew_thread(struct machine *machine, pid_t pid,= pid_t tid); --=20 2.54.0.545.g6539524ca2-goog From nobody Sun Jun 14 06:07:09 2026 Received: from mail-dl1-f74.google.com (mail-dl1-f74.google.com [74.125.82.74]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6868030214B for ; Sat, 2 May 2026 07:00:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.74 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777705214; cv=none; b=NYtTE96sv1WV6rc/xmW1jmRcwnfgsYec8oIG+SeFWuU93EyCb/KrJcW2556tV7hnF30QKJZFFL0xB3LdBpHO2Ek8Gt4rgDqStypzWIlx39vuiTl/FJmMW6m4s4yMJ9iJWwqcMHnC6zY3tVCFlVkDGdQYjDab5BzhBSG+Gv3FnGY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777705214; c=relaxed/simple; bh=AXv3Fg1RBRhXkrhLfgtZQHZ3SHCmISd26okTu7YyA9s=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=Kf/KVd10X+x8TGpNr9GqcvRlFZU+vKl++pCZlFmLjhYMrYPrrq3e+7raCqZBSLEVMOA11Ia3zxWo9Jc6x7/XZgru7OZiLhVxofo96GvHJNQ3pql3Bzp3+Ih+gtPZaihImGXDSqRLbxhqmMeDGfuHgIkNjSVGTbG7XGBKGkzGWbk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=SeuBMfYb; arc=none smtp.client-ip=74.125.82.74 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="SeuBMfYb" Received: by mail-dl1-f74.google.com with SMTP id a92af1059eb24-12c8ccc7593so1695040c88.1 for ; Sat, 02 May 2026 00:00:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1777705204; x=1778310004; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=U6K8oyFDbv3XjzNVf9nE6XxdE+Rb7NWBTjouZbi2tBc=; b=SeuBMfYbO7fVuiuJyzF+7zLV9YcsVKnex322Cr5QvO/90XKsw14S+Z15wpB77V8Edz 0Lx9ye9iup1Pv2B+91Y1WuHb3ERV1oqGPSfQ4P37JVReO2NENkCyiJelcbcG5er47i5Q vZwCL5+wqVcRCu1Oe5boSGpYoZcDu4RC4aL4f9P2mqkUvvgXayl4bHMpT8B4zvqmGCd9 bzPhPCetgZHEijvMMErB97bRRTYoNamfGBhpI5e9WJ9rQJlrKgIGuoFZy7l0UjTE/xJ7 4g74yfbnfy9K+0Ny0M/gmxDY0MkB5czVOAS8Z6aPV6XOwvml7zoIPBkYwYJFj0VH418m FdRA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777705204; x=1778310004; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=U6K8oyFDbv3XjzNVf9nE6XxdE+Rb7NWBTjouZbi2tBc=; b=Bf910BvMjwQI0h1Wqmg69bHcdHvXPi8gyrK/EpUGZOAxxJAe9X1SGcStX2esUW9l6a osVCFw+QlH2J21rQQJi9hwLO3p29w1L0tt94QMwPI7R1oHpX9sAEVwOWS+JL4VQyQjqs a5meQ6IeZeU+3i6hca7oGN7/Z5osL/dsLX2qJIXMkpUhzTvyrz+FmAl60QJWe1cDMgCj Nc3Q2a6uk4IAFZKaDL5yZtP8J7ypE7aW0codZfSY/zLrkkIML6YT+DRzsI9Cn4BEVlHS qQzL8Mr/UJ+Pm6aLv3rm4bIQWLQZwqgbJqsTD7wfkLkK/FOEIzBOXkqZN9v2n2rCWvqy pYnQ== X-Forwarded-Encrypted: i=1; AFNElJ+vNCnqJFDa2bP6xEAXphHbPC6Ro0imogavpY93ACzBXn/oQVxeh7nytw5GKGZHnHCqIRJhac2T0dfIuFg=@vger.kernel.org X-Gm-Message-State: AOJu0YyPuc/rBMV7xaxX6rAnEQ3LBR1j/ljWJzWXAhTW4Mp9HXpquZ92 IPUdWzpti6dyCUiknMgHfsF8ic0eMx7JeVeNk7FT+ZS8+LGjmb6yY3BFMAg86VISU67Fb0n3l9/ i1AQFmCKTeQ== X-Received: from dldz12-n1.prod.google.com ([2002:a05:701b:418c:10b0:12c:91ef:91f4]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7022:6887:b0:128:d219:e169 with SMTP id a92af1059eb24-12dfd7cacdbmr926932c88.10.1777705204310; Sat, 02 May 2026 00:00:04 -0700 (PDT) Date: Fri, 1 May 2026 23:59:24 -0700 In-Reply-To: <20260502065935.291960-1-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260409230620.4176210-2-irogers@google.com> <20260502065935.291960-1-irogers@google.com> X-Mailer: git-send-email 2.54.0.545.g6539524ca2-goog Message-ID: <20260502065935.291960-7-irogers@google.com> Subject: [PATCH v8 06/17] perf sample-raw: Use perf_env e_machine rather than arch From: Ian Rogers To: irogers@google.com, acme@kernel.org, namhyung@kernel.org, tmricht@linux.ibm.com Cc: agordeev@linux.ibm.com, gor@linux.ibm.com, hca@linux.ibm.com, jameshongleiwang@126.com, japo@linux.ibm.com, linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, linux-s390@vger.kernel.org, sumanthk@linux.ibm.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Use the e_machine rather than the arch to determine S390 and x86 types. Signed-off-by: Ian Rogers --- tools/perf/util/sample-raw.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/tools/perf/util/sample-raw.c b/tools/perf/util/sample-raw.c index bcf442574d6e..b10056ac8057 100644 --- a/tools/perf/util/sample-raw.c +++ b/tools/perf/util/sample-raw.c @@ -1,6 +1,5 @@ /* SPDX-License-Identifier: GPL-2.0 */ - -#include +#include #include #include "evlist.h" #include "env.h" @@ -14,14 +13,15 @@ */ void evlist__init_trace_event_sample_raw(struct evlist *evlist, struct per= f_env *env) { - const char *arch_pf =3D perf_env__arch(env); - const char *cpuid =3D perf_env__cpuid(env); + uint16_t e_machine =3D perf_env__e_machine(env, /*e_eflags=3D*/NULL); =20 - if (arch_pf && !strcmp("s390", arch_pf)) + if (e_machine =3D=3D EM_S390) { evlist->trace_event_sample_raw =3D evlist__s390_sample_raw; - else if (arch_pf && !strcmp("x86", arch_pf) && - cpuid && strstarts(cpuid, "AuthenticAMD") && - evlist__has_amd_ibs(evlist)) { - evlist->trace_event_sample_raw =3D evlist__amd_sample_raw; + } else if (e_machine =3D=3D EM_X86_64 || e_machine =3D=3D EM_386) { + const char *cpuid =3D perf_env__cpuid(env); + + if (cpuid && strstarts(cpuid, "AuthenticAMD") && + evlist__has_amd_ibs(evlist)) + evlist->trace_event_sample_raw =3D evlist__amd_sample_raw; } } --=20 2.54.0.545.g6539524ca2-goog From nobody Sun Jun 14 06:07:09 2026 Received: from mail-dl1-f74.google.com (mail-dl1-f74.google.com [74.125.82.74]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 34F7D2DEA98 for ; Sat, 2 May 2026 07:00:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.74 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777705213; cv=none; b=m5qqsgsyBoOVri6bitzUPw8onBNN/kaJzvLuBB2q3EME4iYimF46sa7e0H7ckdECZ9hl6N2h1xn2ODhdxf5Pb4XAXkSqg+jD3Tk7UkSdO+IGxlnhM7Lmtyb5Ta8t3fGgn54IWw3DKSnohEFUUYpW9DviKlRFQamGDmks/bgAzrw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777705213; c=relaxed/simple; bh=91rmZ7HpXZMQRzqJ+APlDS7mfx0zJTjOHRhup1RYxFs=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=JgJp+GggmaHcw7lVpI7yI09C2jNBwxXn0rEmwKA8G40RB3kZqbzBHzXD/DHFX4D33hUHHEG+CEUTJdAwhRZEmm/M98nwUAXbtBFi+ojDMDmK6+OmjQEHeelUPEojyKrEj/KDATmues34SzpkRnuh7KHbztgroeKoQ3ck7cgbZ00= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=eH/+rImX; arc=none smtp.client-ip=74.125.82.74 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="eH/+rImX" Received: by mail-dl1-f74.google.com with SMTP id a92af1059eb24-12c8ccc7593so1695116c88.1 for ; Sat, 02 May 2026 00:00:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1777705206; x=1778310006; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=0Hvpb4pkIwMjbfShD1pPaCPvI8UVK1DoFRvpInh9Nmk=; b=eH/+rImX6+CgCX40Pd3SlzZ5eno3LEIGndb1P/OBTTrdRQtYdVH2i0iaA3R1t5ftZS 2kmGeYfQi4P3uVJ7VNlNTLI64OWiZSh2MF71yxvWEffsL45GstKTIeu5tc5IanuUzCDg R94UDZxsVvv8StOzfcybZwxeITkDU3n++hzfXjm+zLYGrJze1lZL0gZ8IgbeecPpCzVK t7jqHbwzXA1GobmYnXUk7Yv4f2HeLqwvXVLUoGwV0/zYj7l0zjJofGymVZlmgKtWnndj Fe1/Cw70nvF8HAFJvd9Xl2HGMxbYyMy7ZHyd0niT+b9/pvY6G3iXDQ3/Q7BXr1aHFbxh rIkA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777705206; x=1778310006; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=0Hvpb4pkIwMjbfShD1pPaCPvI8UVK1DoFRvpInh9Nmk=; b=rdyxhHdXJuBlEtKFTICNjLzlE4nKGYTWRc4/x61ofaY0Uxy0w0IKoIOTUrWH5DrsqG SzFscx0puU4pA3hzXNy9HX74IetclRVvUda2Xrzl0RfxPZYBb2CsilatzChVZILJ+p/X DgpKyNyocVhNQOKkcKTayf2Xd7jJaJWhytS6PjGeXvAUdeUxWKwyRfUiaweoWwN52jb3 olruVXzM2OxTvA7mNyTiSsTPIBsdifED9pIsLJQ1W7mKtVJQ0Xxm1JFXdACABKdoW/Y+ Yg+e0lQXMAyp/aA/pv4Fdq3qXk6Kx1hmRbAET9P4KTuYE4OyvYVPLEJUT9L8C8xwd/lf 2Xig== X-Forwarded-Encrypted: i=1; AFNElJ8toeVR4dl9a5jDVbzU0EkzGAeCkLJlKrBEHARXurIPxGZEtp2F/2lorwrMaFKlyefeM5SeEhRgxSGPUic=@vger.kernel.org X-Gm-Message-State: AOJu0YypniYeypneH+jlO7hVLIFQu7YkRmO2ev6AK3bVb/82+j6S545t NS3ZfUrnViZa3O3eEB+P2+y3Xg+Y+z3Y8M0Rj1lHexxhkB7g/bFKUeEPz0xQJKhtk/k0jOB0BSg 4WRD8zMo3FQ== X-Received: from dltt17.prod.google.com ([2002:a05:701a:c971:b0:12a:c5dd:73f9]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7022:e994:b0:128:cea1:7e3b with SMTP id a92af1059eb24-12dfd824dacmr838017c88.23.1777705206125; Sat, 02 May 2026 00:00:06 -0700 (PDT) Date: Fri, 1 May 2026 23:59:25 -0700 In-Reply-To: <20260502065935.291960-1-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260409230620.4176210-2-irogers@google.com> <20260502065935.291960-1-irogers@google.com> X-Mailer: git-send-email 2.54.0.545.g6539524ca2-goog Message-ID: <20260502065935.291960-8-irogers@google.com> Subject: [PATCH v8 07/17] perf sort: Use perf_env e_machine rather than arch From: Ian Rogers To: irogers@google.com, acme@kernel.org, namhyung@kernel.org, tmricht@linux.ibm.com Cc: agordeev@linux.ibm.com, gor@linux.ibm.com, hca@linux.ibm.com, jameshongleiwang@126.com, japo@linux.ibm.com, linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, linux-s390@vger.kernel.org, sumanthk@linux.ibm.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Use the e_machine rather than the arch to determine x86 or PPC types. Signed-off-by: Ian Rogers --- tools/perf/util/sort.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/tools/perf/util/sort.c b/tools/perf/util/sort.c index 0020089cb13c..06a641cf49e3 100644 --- a/tools/perf/util/sort.c +++ b/tools/perf/util/sort.c @@ -1,5 +1,6 @@ // SPDX-License-Identifier: GPL-2.0 #include +#include #include #include #include @@ -2673,9 +2674,10 @@ struct sort_dimension { =20 static int arch_support_sort_key(const char *sort_key, struct perf_env *en= v) { - const char *arch =3D perf_env__arch(env); + uint16_t e_machine =3D perf_env__e_machine(env, /*e_eflags=3D*/NULL); =20 - if (!strcmp("x86", arch) || !strcmp("powerpc", arch)) { + if (e_machine =3D=3D EM_X86_64 || e_machine =3D=3D EM_386 || + e_machine =3D=3D EM_PPC64 || e_machine =3D=3D EM_PPC) { if (!strcmp(sort_key, "p_stage_cyc")) return 1; if (!strcmp(sort_key, "local_p_stage_cyc")) @@ -2686,14 +2688,14 @@ static int arch_support_sort_key(const char *sort_k= ey, struct perf_env *env) =20 static const char *arch_perf_header_entry(const char *se_header, struct pe= rf_env *env) { - const char *arch =3D perf_env__arch(env); + uint16_t e_machine =3D perf_env__e_machine(env, /*e_eflags=3D*/NULL); =20 - if (!strcmp("x86", arch)) { + if (e_machine =3D=3D EM_X86_64 || e_machine =3D=3D EM_386) { if (!strcmp(se_header, "Local Pipeline Stage Cycle")) return "Local Retire Latency"; else if (!strcmp(se_header, "Pipeline Stage Cycle")) return "Retire Latency"; - } else if (!strcmp("powerpc", arch)) { + } else if (e_machine =3D=3D EM_PPC64 || e_machine =3D=3D EM_PPC) { if (!strcmp(se_header, "Local INSTR Latency")) return "Finish Cyc"; else if (!strcmp(se_header, "INSTR Latency")) --=20 2.54.0.545.g6539524ca2-goog From nobody Sun Jun 14 06:07:09 2026 Received: from mail-dl1-f74.google.com (mail-dl1-f74.google.com [74.125.82.74]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CE9F02FE56A for ; Sat, 2 May 2026 07:00:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.74 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777705213; cv=none; b=uPGCyn/dGvr6ZjoPDfduZfgC1JLeyICQH1ogDMqtkQd2Lh+GGSKUoPvlG3t6tWrqdcvuolCfwoX59zHKWyyybEa8NiAbmSGtMYIBOP93cI15Z6bGYxA5MH3wc/uM0Pqu7JDNFLEMxL7HhbyJuxy27WHOGv/V/qpj2oKf2gJjJys= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777705213; c=relaxed/simple; bh=KuACTPu6OuS48J4FtO0bd/dTI2geNdASrJW/13fBdHE=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=J6pf1nfMRKSKsvzMAsitKREO6qrzuXhORQxlAWiE4Dt2ESn7Ua8CauPFqKGz8ZQkABYtCdMYsWA7XzCptYTHZMO9/+eAvBjC+8sAQodvO7Drn3nP7We4HyQq/duUW8sH0GAbK0XoWi7EUABVbB60eLiuWhnzZrKrlX4xTNALQWU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=DRJctNu7; arc=none smtp.client-ip=74.125.82.74 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="DRJctNu7" Received: by mail-dl1-f74.google.com with SMTP id a92af1059eb24-12df9e440d3so2131656c88.0 for ; Sat, 02 May 2026 00:00:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1777705208; x=1778310008; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=ZZGT+VJn1AUc670crxwfqYjQB0IuuY3cfwhTbHMCMmg=; b=DRJctNu7msNC7Xn+fCJNnWOJBSwf1PAfNeCQrzLehHJhY/4qdAmXJdTFkaBc6uTxlG tst1zbOLrO8G/gL23iUOvjspyDqoS1bdmXHw15+cvJXBLpE3DUvM82k5ubYjpuxRisxq s9IkAJwDYoHbBWq9T0+0FpWH1yLugpVE1jyjNPGbxTZVhTYpJkZs/aUE6YL48rGd790z yIE1Lmz/HAS1yBo+BGauRoc2qjktqCDFhmbzQHwSMnvnQHIy+lukTSZm/fqaxOXPPvi9 00EhBCDvrKavmM4/vdYmR96T2/2zyzO9azwhsM5oSj5RpMGHZKslFpcw/BcsvZYiasud L37g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777705208; x=1778310008; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=ZZGT+VJn1AUc670crxwfqYjQB0IuuY3cfwhTbHMCMmg=; b=L4JrAPfFK6BxQnsxFDS6Tp3UsmxccHD7d5sYmohBRbRHpkOnbfsw+8e6vJ4HmDueJH 8O51kkv+xDNf9A8BOgIuS54crZ1xkFBN9acjp5F3aNmHdNOzIv10TqsbgpjAMXRpsWxn 7y45hPVlfrmL41JkqrcufD8rAshnJ+zzrRNwW1/V7zqx09Mk7rNmagCvmlt+v7Q48ygC Gnkqv/J8ugkjhHopYMNtZucw8ls03nyNNLaKOP6uaDtuajiKdHdz77nMghHnphOTQGrh igcFDoMYH/NBoPGs3Rep0pwNUdgW0j0zSZKaHymqifpEFfQRu5FW64BQ1iXi/Zh8d4di HCVQ== X-Forwarded-Encrypted: i=1; AFNElJ+Fp0B9xg6qgQ4eqWqWwZUWVfsRTQlOFB2mSqzvLzpWYGLqIPQE7TKzGnl7CMqrZZRPhWD3PUuLMd8Yln4=@vger.kernel.org X-Gm-Message-State: AOJu0Yx5aqv2qdGh+r4sNKylnqBwFXypCpflmP2SRUhzXE2wd1wTU/ey odgGEu14ViDl+ijpNKug2jLpwyMpOBqbY/yYIgoUeZfksIj5eJ9JArrudNRus321YZcsiPHzmJc S4VDfxJ2sGw== X-Received: from dltt17.prod.google.com ([2002:a05:701a:c971:b0:12a:c5dd:73f9]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7022:23a5:b0:12d:b396:eade with SMTP id a92af1059eb24-12dfd7bb139mr1092145c88.3.1777705207872; Sat, 02 May 2026 00:00:07 -0700 (PDT) Date: Fri, 1 May 2026 23:59:26 -0700 In-Reply-To: <20260502065935.291960-1-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260409230620.4176210-2-irogers@google.com> <20260502065935.291960-1-irogers@google.com> X-Mailer: git-send-email 2.54.0.545.g6539524ca2-goog Message-ID: <20260502065935.291960-9-irogers@google.com> Subject: [PATCH v8 08/17] perf symbol: Avoid use of machine__is From: Ian Rogers To: irogers@google.com, acme@kernel.org, namhyung@kernel.org, tmricht@linux.ibm.com Cc: agordeev@linux.ibm.com, gor@linux.ibm.com, hca@linux.ibm.com, jameshongleiwang@126.com, japo@linux.ibm.com, linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, linux-s390@vger.kernel.org, sumanthk@linux.ibm.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Switch to using the ELF machine from the dso or running machine rather than the machine perf_env arch that may fall back on EM_HOST. This also avoids potentially imprecise string comparisons. Signed-off-by: Ian Rogers --- tools/perf/util/symbol.c | 29 +++++++++++++++++++++++------ 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/tools/perf/util/symbol.c b/tools/perf/util/symbol.c index fcaeeddbbb6b..8aaaab0ad4b7 100644 --- a/tools/perf/util/symbol.c +++ b/tools/perf/util/symbol.c @@ -851,6 +851,24 @@ static int maps__split_kallsyms_for_kcore(struct maps = *kmaps, struct dso *dso) return count; } =20 +static uint16_t machine_or_dso_e_machine(struct machine *machine, struct d= so *dso) +{ + uint16_t e_machine =3D EM_NONE; + + /* Check for a cached value first. */ + if (machine && machine->env && machine->env->e_machine !=3D EM_NONE) + return machine->env->e_machine; + + /* DSO should be most accurate */ + if (dso) + e_machine =3D dso__e_machine(dso, machine, /*e_flags=3D*/NULL); + + if (e_machine !=3D EM_NONE) + return e_machine; + + return perf_env__e_machine(machine ? machine->env : NULL, /*e_flags=3D*/N= ULL); +} + /* * Split the symbols into maps, making sure there are no overlaps, i.e. the * kernel range is broken in several maps, named [kernel].N, as we don't h= ave @@ -866,14 +884,13 @@ static int maps__split_kallsyms(struct maps *kmaps, s= truct dso *dso, u64 delta, struct rb_root_cached *root =3D dso__symbols(dso); struct rb_node *next =3D rb_first_cached(root); int kernel_range =3D 0; - bool x86_64; + uint16_t e_machine =3D EM_NONE; =20 if (!kmaps) return -1; =20 machine =3D maps__machine(kmaps); - - x86_64 =3D machine__is(machine, "x86_64"); + e_machine =3D machine_or_dso_e_machine(machine, dso); =20 while (next) { char *module; @@ -925,7 +942,7 @@ static int maps__split_kallsyms(struct maps *kmaps, str= uct dso *dso, u64 delta, */ pos->start =3D map__map_ip(curr_map, pos->start); pos->end =3D map__map_ip(curr_map, pos->end); - } else if (x86_64 && is_entry_trampoline(pos->name)) { + } else if (e_machine =3D=3D EM_X86_64 && is_entry_trampoline(pos->name))= { /* * These symbols are not needed anymore since the * trampoline maps refer to the text section and it's @@ -1428,7 +1445,7 @@ static int dso__load_kcore(struct dso *dso, struct ma= p *map, free(new_node); } =20 - if (machine__is(machine, "x86_64")) { + if (machine_or_dso_e_machine(machine, dso) =3D=3D EM_X86_64) { u64 addr; =20 /* @@ -1716,7 +1733,7 @@ int dso__load(struct dso *dso, struct map *map) ret =3D dso__load_guest_kernel_sym(dso, map); =20 machine =3D maps__machine(map__kmaps(map)); - if (machine__is(machine, "x86_64")) + if (machine_or_dso_e_machine(machine, dso) =3D=3D EM_X86_64) machine__map_x86_64_entry_trampolines(machine, dso); goto out; } --=20 2.54.0.545.g6539524ca2-goog From nobody Sun Jun 14 06:07:10 2026 Received: from mail-pg1-f201.google.com (mail-pg1-f201.google.com [209.85.215.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 24DDC301468 for ; Sat, 2 May 2026 07:00:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777705213; cv=none; b=qpOk/ofEdDgkc7HD9wxOIj2703/TFVETGWqOmlm3pXhUOJ5MTKpxSiyMLmsdBQ59waz//xnEbHvjTBZWJ2Nj8NO/BcKnfo9dfJ09FN+BzqonY51j1jMtucdGymP0p9WZ4B5+u6prC6bD6NcF1n1zLmdseYiQ6DfzCwGCMmkWtdk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777705213; c=relaxed/simple; bh=DL0FkAdJqRHCqRP3d1NRnpycL7mImdH6HLMS8H+qh7A=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=CPSOGuNRH3dLzu0efgS0yBYrXiJsjBVKmrzgOTyhQzu91XnZMEOlTC59eSugFqlEFwUtl8Xm/8eEEc7XQAnpCB0zuQ47YWM6Xi3nb3pACruYu1zKQ6mWN2I5RnX5c/dFWYsKs0GkWuJPN/9UV3xBuuU+cxMdZzZARr53KKZEdiE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=UHOFXF0d; arc=none smtp.client-ip=209.85.215.201 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="UHOFXF0d" Received: by mail-pg1-f201.google.com with SMTP id 41be03b00d2f7-b630753cc38so3742186a12.1 for ; Sat, 02 May 2026 00:00:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1777705210; x=1778310010; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=C4fl8atXwJsXGN4qhUfGPrxc+n6KtD9kAzXZ7gC0fcA=; b=UHOFXF0d80IURHSfj4Sf6cmv+aA4OjHzaZuF84pD70dhn0txoQhpcFul0asBT3bG56 VwLZsHZvQTRfcjyFLdHLzz0KMRpzzZK9rI6i5rDfJ7UtGGTiGFopYNqQ1sLE070x02NM 8nmB5TucD5mkB14c2C4ySakbQ2nBjYWbJGl24GkJka2Gey0JWTPp3801JRf0q5Wqo9aV sbKLwaeMWmJDZUNTMqTTHoYJNfOlvrdTyGFShtHhqQJNtDUOeCJLNywFiiWIrxdCrhum mjgVEDntPnx4YzEgqVNBlNYAPKQl9qTjHz8gxyoa0ewyxp20vOh6AOemw9NecF68uuBU iWZQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777705210; x=1778310010; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=C4fl8atXwJsXGN4qhUfGPrxc+n6KtD9kAzXZ7gC0fcA=; b=eMN7T5Vw/YBkAjjInHPhNgvXyxGgOZ44Pwz0cGXKq15nY4fF64ZxXZp/4pNxtBYrbG FSO9xlex+6N+zQgufaCi+daXyBSwJIpDI2a8ObIETfEAZHsAcyV80q/XeTEtfvCd7Qhx Q7iiSUe/GiHUJOg23Ue5YmoOo/vtqI/1ReutYO8uAvvRaGKiMJ2dTc++HJKzMedqNjsR myk/uKKRXEK1wSqB+fJVZan+MqIU8Z7TiGLVO5vH+LVv7vKUG0KfCT3tKbQYSFP3/awi n+vIhyp7NgdC8ZqHHuiHgX/PSmZHJ9+ZApi1DujPHTn1GF8Ka/sktL0lRK8XrEm3BqeW 7Jjw== X-Forwarded-Encrypted: i=1; AFNElJ8ZrN94/DKUBoVNgIsWaq5aWbuPSxHeNcNJ6Qts/I7juBO4m2+mqQYgsqI+itMvdRcJURxuAf+cJubBrCo=@vger.kernel.org X-Gm-Message-State: AOJu0YzQJ+cCX9MBsY/K8Z7onyo2KkhONHTTwgsL0blo65eFq1MgzH2Q qyI0xIZ5fWZzbu2MHdgSCP6Y4XI+GMCpKrCTPbPNFVThXBU2cD9COmWpBC2lqAJ5jrUX6x7oyF6 OjSkzpTDR8w== X-Received: from pgbl22.prod.google.com ([2002:a63:5716:0:b0:c79:97ca:668b]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a20:9188:b0:398:90e5:a9b9 with SMTP id adf61e73a8af0-3a7f1c392ccmr2264086637.27.1777705210076; Sat, 02 May 2026 00:00:10 -0700 (PDT) Date: Fri, 1 May 2026 23:59:27 -0700 In-Reply-To: <20260502065935.291960-1-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260409230620.4176210-2-irogers@google.com> <20260502065935.291960-1-irogers@google.com> X-Mailer: git-send-email 2.54.0.545.g6539524ca2-goog Message-ID: <20260502065935.291960-10-irogers@google.com> Subject: [PATCH v8 09/17] perf arch common: Use perf_env e_machine rather than arch From: Ian Rogers To: irogers@google.com, acme@kernel.org, namhyung@kernel.org, tmricht@linux.ibm.com Cc: agordeev@linux.ibm.com, gor@linux.ibm.com, hca@linux.ibm.com, jameshongleiwang@126.com, japo@linux.ibm.com, linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, linux-s390@vger.kernel.org, sumanthk@linux.ibm.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Use the e_machine rather than arch string matching. Signed-off-by: Ian Rogers --- tools/perf/arch/common.c | 55 +++++++++++++++++++++++++--------------- 1 file changed, 35 insertions(+), 20 deletions(-) diff --git a/tools/perf/arch/common.c b/tools/perf/arch/common.c index 21836f70f231..e9b5b61feffe 100644 --- a/tools/perf/arch/common.c +++ b/tools/perf/arch/common.c @@ -1,12 +1,14 @@ // SPDX-License-Identifier: GPL-2.0 +#include "common.h" + #include #include #include #include #include -#include "common.h" #include "../util/env.h" #include "../util/debug.h" +#include #include =20 static const char *const arc_triplets[] =3D { @@ -145,7 +147,8 @@ static int perf_env__lookup_binutils_path(struct perf_e= nv *env, const char *name, char **path) { int idx; - const char *arch =3D perf_env__arch(env), *cross_env; + uint16_t e_machine =3D perf_env__e_machine(env, /*e_flags=3D*/NULL); + const char *cross_env; const char *const *path_list; char *buf =3D NULL; =20 @@ -153,7 +156,7 @@ static int perf_env__lookup_binutils_path(struct perf_e= nv *env, * We don't need to try to find objdump path for native system. * Just use default binutils path (e.g.: "objdump"). */ - if (!strcmp(perf_env__arch(NULL), arch)) + if (e_machine =3D=3D EM_HOST) goto out; =20 cross_env =3D getenv("CROSS_COMPILE"); @@ -170,30 +173,42 @@ static int perf_env__lookup_binutils_path(struct perf= _env *env, zfree(&buf); } =20 - if (!strcmp(arch, "arc")) + switch(e_machine) { + case EM_ARC: path_list =3D arc_triplets; - else if (!strcmp(arch, "arm")) + break; + case EM_ARM: path_list =3D arm_triplets; - else if (!strcmp(arch, "arm64")) + break; + case EM_AARCH64: path_list =3D arm64_triplets; - else if (!strcmp(arch, "powerpc")) + break; + case EM_PPC: + case EM_PPC64: path_list =3D powerpc_triplets; - else if (!strcmp(arch, "riscv32")) - path_list =3D riscv32_triplets; - else if (!strcmp(arch, "riscv64")) - path_list =3D riscv64_triplets; - else if (!strcmp(arch, "sh")) + break; + case EM_RISCV: + path_list =3D perf_env__kernel_is_64_bit(env) ? riscv64_triplets : riscv= 32_triplets; + break; + case EM_SH: path_list =3D sh_triplets; - else if (!strcmp(arch, "s390")) + break; + case EM_S390: path_list =3D s390_triplets; - else if (!strcmp(arch, "sparc")) + break; + case EM_SPARC: + case EM_SPARCV9: path_list =3D sparc_triplets; - else if (!strcmp(arch, "x86")) + break; + case EM_X86_64: + case EM_386: path_list =3D x86_triplets; - else if (!strcmp(arch, "mips")) + break; + case EM_MIPS: path_list =3D mips_triplets; - else { - ui__error("binutils for %s not supported.\n", arch); + break; + default: + ui__error("binutils for %s not supported.\n", perf_env__arch(env)); goto out_error; } =20 @@ -202,7 +217,7 @@ static int perf_env__lookup_binutils_path(struct perf_e= nv *env, ui__error("Please install %s for %s.\n" "You can add it to PATH, set CROSS_COMPILE or " "override the default using --%s.\n", - name, arch, name); + name, perf_env__arch(env), name); goto out_error; } =20 @@ -237,5 +252,5 @@ int perf_env__lookup_objdump(struct perf_env *env, char= **path) */ bool perf_env__single_address_space(struct perf_env *env) { - return strcmp(perf_env__arch(env), "sparc"); + return perf_env__e_machine(env, /*e_flags=3D*/NULL) =3D=3D EM_SPARC; } --=20 2.54.0.545.g6539524ca2-goog From nobody Sun Jun 14 06:07:10 2026 Received: from mail-dl1-f74.google.com (mail-dl1-f74.google.com [74.125.82.74]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9492E19005E for ; Sat, 2 May 2026 07:00:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.74 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777705215; cv=none; b=aderK1c/lLAvzSOKZ0DBVIMeJCntdNuFaWrvKgSgcoTEzau3xJf1wFmCh2RiM3HjhFomeLsJYxVY47lOJz+mkdRtU19CyPwQN0A9O/IB3B03I/MhASuqI6c+kXl43+fM4EAsvrvti4RZYBLHT2SjWwteY4nC2Cp3oUQlupQ7PLw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777705215; c=relaxed/simple; bh=8pZBTMKNN/jJqySvgJqw5r7/hkTpkvHX1Y98+t8TyYo=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=qmTyIO2u7N24aBtGH3+c3ddcAD7GBnSaD+iVI1ZUcWrGZtrVhkJUHlWiAsR3BNhQT+hwKTsZRHuIdw96zofWa8Ndl+NXWFfpFa4Ooq3HAzgWiZkGMLmg1XO8sc/BJwGdOZMvGURosf5QpUjnzWyO5mFvikoO8ffIDHjOPY/4uYY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=lGkDc6Ur; arc=none smtp.client-ip=74.125.82.74 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="lGkDc6Ur" Received: by mail-dl1-f74.google.com with SMTP id a92af1059eb24-12df8bc580cso974749c88.0 for ; Sat, 02 May 2026 00:00:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1777705213; x=1778310013; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=NzXq1ispBEt7q5g+srS1tYr5zmRtUudu86fKDB5S4d0=; b=lGkDc6Urtu1pLrcRrzy+4/OAMqGuURPB+3RWCnBk6zWGLIP/tU8lCpxHVCvpSP+U/d fjZ/rWc6crnwKqSkCwk7xJ9q4XLyMUTk2JPyW6348QeXnj1eEywzSSu2YPatMGBA6TiJ BT5vspWDnTYSnDJMXjXwNn4XhXwfzxBYOEw5gSGEwTvK5rSCGTdWJCCzBtPC84FWQxS6 47dOZytoJ0pOQ17+71RK3qprl7xSzItl1spw+RQG4BdS98RGE9nxzw/GL2gdWqcEI53v ry1fEWGweysVTv9JOwVSf1N3V7X1QANK4lx1pYls7ZUJOfw2Lj5IZcHcEGXFAsvNOkPJ 4egQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777705213; x=1778310013; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=NzXq1ispBEt7q5g+srS1tYr5zmRtUudu86fKDB5S4d0=; b=mVb+r+jQQmeekwyl8nGfHiFaGU23XXimK9bue2n0OsGUzu0mlwkrEQ9zanvXKODXUR yj78avEqevhFItdxNpC19kD1zQRicxslmWDEz8m1e/2wIxRSozcGIg65S5TJhbW2S0U8 YvYUfamfDPty13/XxpNaio/hFbZVVGeH9nIVyuhYR3oe53RAZNfYW3ZESMiiOHz6pRTs KsqAxR1pq3YeAm+/umEt9Xx2hxzxs10x5UxfHllsWtptmX2dPjmdomQ5H9gOhd0qbxs+ pbyn3keApHaag/KBG/sTyTgNZ0su2wWM9MS2NB4lfXqn2ay49zYY34I5pxfiNDWDz4wA GYbQ== X-Forwarded-Encrypted: i=1; AFNElJ9Umjn5k6nl9rPTLak0lUvZRi25kT7/uah1y00LD+HLo6+nZ3kwYRbUgT0BYduE6d5xhoyUGIo/nDqQZHA=@vger.kernel.org X-Gm-Message-State: AOJu0Yy9yxDbv2ggyscLtq01Ketn4yYHW0iL4KLegzi1epWiEjdasZtC wWoYvybD4OABn3HdTBhShYR3WofSMzIxxjvtlrw1U+E2wbubnPcIYu13AkPEGZWn4Iw8aUUGvdv 6HL5LLZG20g== X-Received: from dlbuu10.prod.google.com ([2002:a05:7022:7e8a:b0:12c:87ba:191d]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7022:221a:b0:119:e569:f874 with SMTP id a92af1059eb24-12dfd5c35e0mr875871c88.17.1777705212271; Sat, 02 May 2026 00:00:12 -0700 (PDT) Date: Fri, 1 May 2026 23:59:28 -0700 In-Reply-To: <20260502065935.291960-1-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260409230620.4176210-2-irogers@google.com> <20260502065935.291960-1-irogers@google.com> X-Mailer: git-send-email 2.54.0.545.g6539524ca2-goog Message-ID: <20260502065935.291960-11-irogers@google.com> Subject: [PATCH v8 10/17] perf header: In print_pmu_caps use perf_env e_machine From: Ian Rogers To: irogers@google.com, acme@kernel.org, namhyung@kernel.org, tmricht@linux.ibm.com Cc: agordeev@linux.ibm.com, gor@linux.ibm.com, hca@linux.ibm.com, jameshongleiwang@126.com, japo@linux.ibm.com, linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, linux-s390@vger.kernel.org, sumanthk@linux.ibm.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Switch from arch to e_machine in print_pmu_caps. Signed-off-by: Ian Rogers --- tools/perf/util/header.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/tools/perf/util/header.c b/tools/perf/util/header.c index 8d5152bde25d..c6436269df4b 100644 --- a/tools/perf/util/header.c +++ b/tools/perf/util/header.c @@ -2348,15 +2348,16 @@ static void print_cpu_pmu_caps(struct feat_fd *ff, = FILE *fp) static void print_pmu_caps(struct feat_fd *ff, FILE *fp) { struct perf_env *env =3D &ff->ph->env; - struct pmu_caps *pmu_caps; + uint16_t e_machine =3D perf_env__e_machine(env, /*e_flags=3D*/NULL); =20 for (int i =3D 0; i < env->nr_pmus_with_caps; i++) { - pmu_caps =3D &env->pmu_caps[i]; + struct pmu_caps *pmu_caps =3D &env->pmu_caps[i]; + __print_pmu_caps(fp, pmu_caps->nr_caps, pmu_caps->caps, pmu_caps->pmu_name); } =20 - if (strcmp(perf_env__arch(env), "x86") =3D=3D 0 && + if ((e_machine =3D=3D EM_X86_64 || e_machine =3D=3D EM_386) && perf_env__has_pmu_mapping(env, "ibs_op")) { char *max_precise =3D perf_env__find_pmu_cap(env, "cpu", "max_precise"); =20 --=20 2.54.0.545.g6539524ca2-goog From nobody Sun Jun 14 06:07:10 2026 Received: from mail-dl1-f74.google.com (mail-dl1-f74.google.com [74.125.82.74]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 13B7331064E for ; Sat, 2 May 2026 07:00:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.74 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777705217; cv=none; b=skfGfSLgfEHaQ1QeP7L8585S4FdcqZT3EJbhlbKoKNkzdT4UfzFBJd5tYqHYf8IIGsHG+OhtpGTHiKKta7NlklMR29UMqf/2JQRS8FNBzOJAfJDn256aDPsVGVOrFmxUMcMIbiT7tGcZBXDTMC4MNQTrX9jcWT8Qj13fJLmHb3I= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777705217; c=relaxed/simple; bh=n9VDThrjAF8JIlTeywhHsS3R1i0arT9zN25KGhXQdsk=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=B7Rq/SAYuwJKlbVuV9GV1bmBwEu/UvFgFt5fiMwYu3hwY7tidzXQ1nrYE/3OhubwQ7zMUkcu/t5Fd3dC0yn30kgOqOh0KEuw3KU3UnT2cs3vCfovZb4vpBSX5+mb+1zJEJbcA2ldjDY1HzOEcJtQoBVEFx5AIoGq3vvsLZcwSaQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=lpqLsl/V; arc=none smtp.client-ip=74.125.82.74 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="lpqLsl/V" Received: by mail-dl1-f74.google.com with SMTP id a92af1059eb24-12dc3d81736so1753603c88.1 for ; Sat, 02 May 2026 00:00:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1777705215; x=1778310015; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=X/PPLRcE8lM1cGyL0UzecFUi3MuKZEhavOiWIiPFqzM=; b=lpqLsl/VjjMNK4dMEviU/+HZb/AWjZvAIZ3FMbofIiwfPBJ3kyxOclpLzu1aO6iDgC yTFpsq/wKTErlVI92wvVOf4hHhomj7WtjFqfmInWvlOBSPccuntpxjnS7LOMvyo7Dxtl +1Q75qqNpfE9d8jM3s6yfaxIVxXyVKu56YkcXwFOb150ZJmqIx80StEj5rFaoW8L/6/b EfzrnZ8ym6Ta1tKe28z8V0k0oO2JgBTa7b3Z/HzHr7gkerGNYcCgXyP7k5Tq6vUPy3ye HaW0r0Yfo7+wmVD5mwz+VdcPRRGHyG2tiXDnji8sQ6M0Pr1V6PhyLuxqhWMST3U8WHpG Uu2w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777705215; x=1778310015; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=X/PPLRcE8lM1cGyL0UzecFUi3MuKZEhavOiWIiPFqzM=; b=DUUuQGmlzR2CY5XsgivNxUQ4KIs3EgmkwZ/yxGZbGrBs32JTDqNZpk5lljpTF30+cG 2rHWVaTicOnJDlqApSbgGOhTykJJ2WgNPrItyG2Y91ofMUmp0bc4KsqdDE94s1ncNcH/ vEFq9HOXP0r2wqlFwfESvdCMiSw5FOpCXfxtyI9UGwRrZbkb97b4EfYoPbY8WmT6el7L sWNyhr75xo0X4kIYHSe6dYjsNp3TDgr4YAC1YOc1V4jv/BQ1G45TExaSuDmQnSunuCia K04Vc/NwlMS/js73VQwt5vmp73mNNtOEhlFoa4yKIm++7yk+ZQKbwYxDzUYmcV6Kl/7q M54g== X-Forwarded-Encrypted: i=1; AFNElJ/b+RQdsfAm10uKgLVk6kThQOZYWOCWHkXhD3+fyHS6ejmcoleUfGvpMh/4QTJ8va2arbrurACfgwCppEE=@vger.kernel.org X-Gm-Message-State: AOJu0Yy9Ymoo026OjeWijaAp6yma8a/pGS1J2mN4ivhKfIvsOswFsYNq iSWhceW6LD4ajfOlnFxCCOmvBgu2NC82PrmH3VNmnBotzo6oHgl2o+kQGIpfz9Oxju7K+MRm4cv r5OfO9QAPQg== X-Received: from dlww3.prod.google.com ([2002:a05:7022:ea23:b0:12b:eb91:8863]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7022:f9e:b0:12a:6fb7:87e7 with SMTP id a92af1059eb24-12dfd70c736mr1018157c88.0.1777705214884; Sat, 02 May 2026 00:00:14 -0700 (PDT) Date: Fri, 1 May 2026 23:59:29 -0700 In-Reply-To: <20260502065935.291960-1-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260409230620.4176210-2-irogers@google.com> <20260502065935.291960-1-irogers@google.com> X-Mailer: git-send-email 2.54.0.545.g6539524ca2-goog Message-ID: <20260502065935.291960-12-irogers@google.com> Subject: [PATCH v8 11/17] perf c2c: Use perf_env e_machine rather than arch From: Ian Rogers To: irogers@google.com, acme@kernel.org, namhyung@kernel.org, tmricht@linux.ibm.com Cc: agordeev@linux.ibm.com, gor@linux.ibm.com, hca@linux.ibm.com, jameshongleiwang@126.com, japo@linux.ibm.com, linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, linux-s390@vger.kernel.org, sumanthk@linux.ibm.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Use the e_machine rather than arch string matching for AARCH64. Signed-off-by: Ian Rogers --- tools/perf/builtin-c2c.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/perf/builtin-c2c.c b/tools/perf/builtin-c2c.c index 72a7802775ee..09c8352a922c 100644 --- a/tools/perf/builtin-c2c.c +++ b/tools/perf/builtin-c2c.c @@ -3202,7 +3202,7 @@ static int perf_c2c__report(int argc, const char **ar= gv) * default display type. */ if (!display) { - if (!strcmp(perf_env__arch(env), "arm64")) + if (perf_env__e_machine(env, /*e_flags=3D*/NULL) =3D=3D EM_AARCH64) display =3D "peer"; else display =3D "tot"; --=20 2.54.0.545.g6539524ca2-goog From nobody Sun Jun 14 06:07:10 2026 Received: from mail-dl1-f73.google.com (mail-dl1-f73.google.com [74.125.82.73]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 09A1D3148A7 for ; Sat, 2 May 2026 07:00:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777705219; cv=none; b=ABUYv0jKEAFBv6KYIAtTBbuYjUbW7Ow3BdFW0dRDzNagIIwW9U5BHKDYsH4kij9JTLWN8+LoVS1eD80impAu6deMVg3uX7fv85pd4YzHZnWUbp231PflabNqAe5m93X7Anbkc4lM2ogyaN09lYXEBZ0kaOCWp9bpityNb6r0Wb8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777705219; c=relaxed/simple; bh=uvhPGJ8aFyrj8sz3RY0F7uCaw7UwOHqluJDNG48CN5w=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=oXnZD06doUHoV3btmSe/UVE/05OQHlOZa8oXXpjKg+LnOacNq7G9t3bc0f7WGDRDpYxJyG8KldP8z5X/pFK3FUIB5y18zpm5webnFU14In+nQk0XboAIJaehZiMqKHbxE6Sq4P3mRblYTulKOj7kY516ffTaHqoTx75SrTISyx8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=MNLUG3Im; arc=none smtp.client-ip=74.125.82.73 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="MNLUG3Im" Received: by mail-dl1-f73.google.com with SMTP id a92af1059eb24-12e683ca86bso506875c88.1 for ; Sat, 02 May 2026 00:00:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1777705217; x=1778310017; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=D5+XfQfSgM6vL4wGV0II5aik5OsLQWVkexovkX+K6RU=; b=MNLUG3ImQWCDEYoLAnymKNYIql4iNHWLkf0lh44Tq2mmtKK8VThXScJpVy/Sop4Syh PQJmqLQw0y2E9++g2v2IhF3etQIQYYFuxpviYVqUQuLR3zR6BFHnREW3J7bTA2q5Q7/8 7zWSRyc6hir6Vcow0k3BmWoKA3i27TQHQZ3ane1TnxZd/0cz4BQWSQz6rg0DKUz3tuNc biRd6bR2lJcrvB3tSdJZ9JBuXTif4lDlvB9s6FWDlbO01MyigBKRXQnHwCGDWPNGURHr 90Op+SkjlNncACKvZl1uMzhaZ/bh4mBXGMVuLdd3P1ZXT427uYnFbVT6VriEUSka9ZNe 5EqA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777705217; x=1778310017; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=D5+XfQfSgM6vL4wGV0II5aik5OsLQWVkexovkX+K6RU=; b=ibooJDyYQ3rb/Txzo7iLqeFGMwUBDgt4bVP/8AZnVBK/J4PuQJjAmIT2VLsrtWHqik SMT2nt4CBdo91f8ptYUvhBKe8b0DCcOOSOSzKv7sUbl8R6+mmhEDZkjV0zj8aXUjM0MT hCbNpRbMrgF09LTPExC5RSDew0TS7a4fx72Cw1Xj8WUnAw3jmDjkmStbS/Tr3fK57O0Y jy4W/SXge2BHZ1UtpyKEBU9yBfPN1f4htwqKYpu0gPoSSS3+zSySnTw2kTa9BvdmwAJ0 C5RYINKSd7wUiUgAbYpm8UPpwcFTimMkBgoHi58mGae5l5l1URmfH8KR5+6sMjaH9vm9 3j7w== X-Forwarded-Encrypted: i=1; AFNElJ/mSq0cQsUHCF+xwMH/D27U9H8NatWDEzbvz55HJs1hiKCJ4rVL0asY7fbLnmsl+UVkQvGa7l++MShELjM=@vger.kernel.org X-Gm-Message-State: AOJu0YzH9KN4QvvINBGcJhsSa0q4E09beFCd4GBl775vSeTezlkx5Uhh IVE7OEYlRmSkxctXxRagBniY5C+lUPSzA8EZyvxkg+jPH73d3u+ysl4Z8VYs+USti0+2cwyo9zh LDKJ6IjPoqw== X-Received: from dlae15.prod.google.com ([2002:a05:701b:230f:b0:12a:7182:6cb]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7022:6286:b0:12d:d972:b96e with SMTP id a92af1059eb24-12dfd81a804mr1102945c88.20.1777705217082; Sat, 02 May 2026 00:00:17 -0700 (PDT) Date: Fri, 1 May 2026 23:59:30 -0700 In-Reply-To: <20260502065935.291960-1-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260409230620.4176210-2-irogers@google.com> <20260502065935.291960-1-irogers@google.com> X-Mailer: git-send-email 2.54.0.545.g6539524ca2-goog Message-ID: <20260502065935.291960-13-irogers@google.com> Subject: [PATCH v8 12/17] perf lock-contention: Use perf_env e_machine rather than arch From: Ian Rogers To: irogers@google.com, acme@kernel.org, namhyung@kernel.org, tmricht@linux.ibm.com Cc: agordeev@linux.ibm.com, gor@linux.ibm.com, hca@linux.ibm.com, jameshongleiwang@126.com, japo@linux.ibm.com, linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, linux-s390@vger.kernel.org, sumanthk@linux.ibm.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Use the e_machine rather than arch string matching for powerpc. Signed-off-by: Ian Rogers --- tools/perf/util/lock-contention.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tools/perf/util/lock-contention.c b/tools/perf/util/lock-conte= ntion.c index 92e7b7b572a2..119a7206f3cd 100644 --- a/tools/perf/util/lock-contention.c +++ b/tools/perf/util/lock-contention.c @@ -104,7 +104,8 @@ bool match_callstack_filter(struct machine *machine, u6= 4 *callstack, int max_sta struct map *kmap; struct symbol *sym; u64 ip; - const char *arch =3D perf_env__arch(machine->env); + uint16_t e_machine =3D perf_env__e_machine(machine->env, /*e_flags=3D*/NU= LL); + bool is_powerpc =3D e_machine =3D=3D EM_PPC64 || e_machine =3D=3D EM_PPC; =20 if (list_empty(&callstack_filters)) return true; @@ -125,8 +126,7 @@ bool match_callstack_filter(struct machine *machine, u6= 4 *callstack, int max_sta * incase first or second callstack index entry has 0 * address for powerpc. */ - if (!callstack || (!callstack[i] && (strcmp(arch, "powerpc") || - (i !=3D 1 && i !=3D 2)))) + if (!callstack || (!callstack[i] && (!is_powerpc || (i !=3D 1 && i !=3D = 2)))) break; =20 ip =3D callstack[i]; --=20 2.54.0.545.g6539524ca2-goog From nobody Sun Jun 14 06:07:10 2026 Received: from mail-dl1-f73.google.com (mail-dl1-f73.google.com [74.125.82.73]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 11176316905 for ; Sat, 2 May 2026 07:00:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777705221; cv=none; b=T2Cdkpvsfg4VhlaD2qCjifftiUp/MKHZCPoHW5Lz95yt1QC8XCGWNJISuDti5C2na3acY9V99JBF1iPjokWXSh9tZMaF4xrSfr5fudlKsX8JYI2nkTtRuf8/4ch0/UsfIKvhrQpAygIO5AUs4hXURAhIuNg8pwI+pZs6tp9syMM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777705221; c=relaxed/simple; bh=+Cl1G/nddw26s0e/jdTjYJbJetplE+ZRQZhfLxtQ3pY=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=qFU0cs95udKh78M6bi68B5zsRfBUg91Mk3biO+XQCanXX7jfbAiHau2m8D9ky+60XdRh6q/9lYxwDlDopZwYPmvBjzAC2Tqs9Ofl3O2jCerdG5yl/c9WtpaPxVON8Kl30LRgyMbAk2e4bgZNbBNO3xaAw1nouUnjC7qleZUxowE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=Ef3Q57NW; arc=none smtp.client-ip=74.125.82.73 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="Ef3Q57NW" Received: by mail-dl1-f73.google.com with SMTP id a92af1059eb24-12c35f2c09dso3492418c88.0 for ; Sat, 02 May 2026 00:00:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1777705219; x=1778310019; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=zvI9UJNOPT800HWIPIx+1jvWqW+QsHZl+3ObCWjaf40=; b=Ef3Q57NWaUnlzkVBGA9fMWTDlQa1lTpinrYZhQyJeiq3uLnEeXN5V2uA8BZOkZYkMT viH2FXb3AJDxm67Cr3AWI3HghYtbnxikrv/1S+nXSC2v0M8x8l67g4RG2VCw/22eXxpN pEWGmx2HmL7YFj0OHm3pHlnfKTKxSFFQwTQJOMC1YggXq9odjWMbhru6b2+RcxFTT0pJ W4NN7+qrtMQvR0w4kj0JhfdRUtD2USTj2qkjhxwh899mpfQt0pt9Xmq38hngnAdM+qXr a+xyvgVuQ6WHVaiCB07S/DcuJbWyL4w7/4TBml9X1hVad47SRgf6gCgK67+/7h3iJ1JA aMwg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777705219; x=1778310019; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=zvI9UJNOPT800HWIPIx+1jvWqW+QsHZl+3ObCWjaf40=; b=gsFVo5nGGRget5eLR2zoecc4QqrEndX3292CcFQpUxsCB+izbqx2CFfoXcFIhm7UYP Jb1ScRYa5tenvJnk8KuxG9TveYa2svv3XE720dHPqTg0d742VN44zS77LsD2zCKnjxS1 4pnwmJSDuMo7mgkbEOn73HSeuQPqm4r5lffTjJnvwxKS1HqleirE90sMjNRVOYaNSjbq fAa9eZBn6K8YXYNBcva6c9puIDdHGcdB6zRDLZS/RlxP884IxxUzW6dJAiTsMaV1EOPG pbM+gn2bbI9PVIHIUcYgz1noh2khz7052tE/hRIEuNq3CqfWXwbuehYLjE2lCbRSqVSc cxLw== X-Forwarded-Encrypted: i=1; AFNElJ+Jm7y3q7OE3mHlUBuyoFdOfI2jIYo1fUNcQ4l0ATHJcrBxzVvsjm7ewxZLaNAn0NiC6K+mER2WfnsDtvU=@vger.kernel.org X-Gm-Message-State: AOJu0Yzzn0O/zhndQg83OGeEakYNMx9W6t6C/7UcnR0vhvy+wCOeRFGP PcvkBqlBj70ieGiDINMR/h6v62zlWQCMkRf7C5W+6yFY4mkeKt/imfjfgrqn7ZsN576rtyqVGm4 e1PlDHLihbA== X-Received: from dlbcm1.prod.google.com ([2002:a05:7022:6881:b0:12c:177a:ac1d]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7022:61a:b0:128:bf8d:44d2 with SMTP id a92af1059eb24-12dfd7ae6eemr947303c88.2.1777705219127; Sat, 02 May 2026 00:00:19 -0700 (PDT) Date: Fri, 1 May 2026 23:59:31 -0700 In-Reply-To: <20260502065935.291960-1-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260409230620.4176210-2-irogers@google.com> <20260502065935.291960-1-irogers@google.com> X-Mailer: git-send-email 2.54.0.545.g6539524ca2-goog Message-ID: <20260502065935.291960-14-irogers@google.com> Subject: [PATCH v8 13/17] perf env: Refactor perf_env__arch_strerrno From: Ian Rogers To: irogers@google.com, acme@kernel.org, namhyung@kernel.org, tmricht@linux.ibm.com Cc: agordeev@linux.ibm.com, gor@linux.ibm.com, hca@linux.ibm.com, jameshongleiwang@126.com, japo@linux.ibm.com, linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, linux-s390@vger.kernel.org, sumanthk@linux.ibm.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" perf_env__arch_strerrno is only available with libtraceevent so hide the declaration if no libtraceevent. The previous approach maps an architecture string to a function pointer to a function that takes an int errno values and returns a string. The new approach takes an e_machine and an errno value and returns a string. As the only call site is in builtin-trace.c, the e_machine is already present and potentially more specific than the perf_env arch string that is a single global value. The major complication in this approach is having the shell script that generates the C code map a linux directory name to the matching ELF machine constants. Signed-off-by: Ian Rogers --- tools/perf/builtin-trace.c | 5 ++- tools/perf/trace/beauty/arch_errno_names.sh | 40 ++++++++++++++++++--- tools/perf/util/env.c | 13 +++---- tools/perf/util/env.h | 7 ++-- 4 files changed, 44 insertions(+), 21 deletions(-) diff --git a/tools/perf/builtin-trace.c b/tools/perf/builtin-trace.c index e58c49d047a2..d1f21b5e7c98 100644 --- a/tools/perf/builtin-trace.c +++ b/tools/perf/builtin-trace.c @@ -3008,9 +3008,8 @@ static int trace__sys_exit(struct trace *trace, struc= t evsel *evsel, } else if (ret < 0) { errno_print: { char bf[STRERR_BUFSIZE]; - struct perf_env *env =3D evsel__env(evsel) ?: &trace->host_env; const char *emsg =3D str_error_r(-ret, bf, sizeof(bf)); - const char *e =3D perf_env__arch_strerrno(env, err); + const char *e =3D perf_env__arch_strerrno(e_machine, err); =20 fprintf(trace->output, "-1 %s (%s)", e, emsg); } @@ -4890,7 +4889,7 @@ static size_t syscall__dump_stats(struct trace *trace= , int e_machine, FILE *fp, =20 for (e =3D 0; e < stats->max_errno; ++e) { if (stats->errnos[e] !=3D 0) - fprintf(fp, "\t\t\t\t%s: %d\n", perf_env__arch_strerrno(trace->host-= >env, e + 1), stats->errnos[e]); + fprintf(fp, "\t\t\t\t%s: %d\n", perf_env__arch_strerrno(e_machine, e= + 1), stats->errnos[e]); } } lines++; diff --git a/tools/perf/trace/beauty/arch_errno_names.sh b/tools/perf/trace= /beauty/arch_errno_names.sh index b22890b8d272..89b742927168 100755 --- a/tools/perf/trace/beauty/arch_errno_names.sh +++ b/tools/perf/trace/beauty/arch_errno_names.sh @@ -52,21 +52,49 @@ process_arch() |IFS=3D, create_errno_lookup_func "$arch" } =20 +arch_to_e_machine() +{ + case "$1" in + alpha) printf '\tcase EM_ALPHA:\n' ;; + arc) printf '\tcase EM_ARC:\n' ;; + arm) printf '\tcase EM_ARM:\n' ;; + arm64) printf '\tcase EM_AARCH64:\n' ;; + csky) printf '\tcase EM_CSKY:\n' ;; + hexagon) printf '\tcase EM_HEXAGON:\n' ;; + loongarch) printf '\tcase EM_LOONGARCH:\n' ;; + microblaze) printf '\tcase EM_MICROBLAZE:\n' ;; + mips) printf '\tcase EM_MIPS:\n' ;; + parisc) printf '\tcase EM_PARISC:\n' ;; + powerpc) printf '\tcase EM_PPC:\n\tcase EM_PPC64:\n' ;; + riscv) printf '\tcase EM_RISCV:\n' ;; + s390) printf '\tcase EM_S390:\n' ;; + sh) printf '\tcase EM_SH:\n' ;; + sparc) printf '\tcase EM_SPARC:\n\tcase EM_SPARCV9:\n' ;; + x86) printf '\tcase EM_386:\n\tcase EM_X86_64:\n' ;; + xtensa) printf '\tcase EM_XTENSA:\n' ;; + esac +} + create_arch_errno_table_func() { archlist=3D"$1" default=3D"$2" =20 - printf 'static arch_syscalls__strerrno_t *\n' - printf 'arch_syscalls__strerrno_function(const char *arch)\n' + printf 'static const char *\n' + printf 'arch_syscalls__strerrno(uint16_t e_machine, int err)\n' printf '{\n' + printf '\tswitch (e_machine) {\n' for arch in $archlist; do arch_str=3D$(arch_string "$arch") - printf '\tif (!strcmp(arch, "%s"))\n' "$arch_str" - printf '\t\treturn errno_to_name__%s;\n' "$arch_str" + ems=3D$(arch_to_e_machine "$arch_str") + if [ -n "$ems" ]; then + printf '%s\n' "$ems" + printf '\t\treturn errno_to_name__%s(err);\n' "$arch_str" + fi done arch_str=3D$(arch_string "$default") - printf '\treturn errno_to_name__%s;\n' "$arch_str" + printf '\tdefault:\n\t\treturn errno_to_name__%s(err);\n' "$arch_str" + printf '\t}\n' printf '}\n' } =20 @@ -74,6 +102,8 @@ cat < +#include +#include =20 EoHEADER =20 diff --git a/tools/perf/util/env.c b/tools/perf/util/env.c index 4ff4caab3b32..97f4aa1131a1 100644 --- a/tools/perf/util/env.c +++ b/tools/perf/util/env.c @@ -786,17 +786,12 @@ const char *perf_env__arch(struct perf_env *env) #include "trace/beauty/arch_errno_names.c" #endif =20 -const char *perf_env__arch_strerrno(struct perf_env *env __maybe_unused, i= nt err __maybe_unused) -{ #if defined(HAVE_LIBTRACEEVENT) - if (env->arch_strerrno =3D=3D NULL) - env->arch_strerrno =3D arch_syscalls__strerrno_function(perf_env__arch(e= nv)); - - return env->arch_strerrno ? env->arch_strerrno(err) : "no arch specific s= trerrno function"; -#else - return "!HAVE_LIBTRACEEVENT"; -#endif +const char *perf_env__arch_strerrno(uint16_t e_machine, int err) +{ + return arch_syscalls__strerrno(e_machine, err); } +#endif =20 const char *perf_env__cpuid(struct perf_env *env) { diff --git a/tools/perf/util/env.h b/tools/perf/util/env.h index 7151a9138e3f..68dead1b36a6 100644 --- a/tools/perf/util/env.h +++ b/tools/perf/util/env.h @@ -67,8 +67,6 @@ struct cpu_domain_map { struct domain_info **domains; }; =20 -typedef const char *(arch_syscalls__strerrno_t)(int err); - struct perf_env { char *hostname; char *os_release; @@ -158,7 +156,6 @@ struct perf_env { */ bool enabled; } clock; - arch_syscalls__strerrno_t *arch_strerrno; }; =20 enum perf_compress_type { @@ -190,7 +187,9 @@ void cpu_cache_level__free(struct cpu_cache_level *cach= e); uint16_t perf_env__e_machine_nocache(struct perf_env *env, uint32_t *e_fla= gs); uint16_t perf_env__e_machine(struct perf_env *env, uint32_t *e_flags); const char *perf_env__arch(struct perf_env *env); -const char *perf_env__arch_strerrno(struct perf_env *env, int err); +#if defined(HAVE_LIBTRACEEVENT) +const char *perf_env__arch_strerrno(uint16_t e_machine, int err); +#endif const char *perf_env__cpuid(struct perf_env *env); const char *perf_env__raw_arch(struct perf_env *env); int perf_env__nr_cpus_avail(struct perf_env *env); --=20 2.54.0.545.g6539524ca2-goog From nobody Sun Jun 14 06:07:10 2026 Received: from mail-dy1-f202.google.com (mail-dy1-f202.google.com [74.125.82.202]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4FC97318EC1 for ; Sat, 2 May 2026 07:00:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777705223; cv=none; b=Bh8IkHvliEClSnBAu3Q+OhbxXWPWgCjoTSB1VI+aHnFNFdy6b7tt3MP3JCQqzxDhFvJvmYaB3sK7jD+Zk4d/wdnB9xZSHaTIUWw8EEXZqY2qV/Iq30B8xOZ7DRsH7fg1+qFuaOgr5reaoNIB3QLELFd2De+ZDn5sFbbwnYNIRNU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777705223; c=relaxed/simple; bh=c4FiPhwMPGjOldhXx4uHpCVyzOAjd9KqZ+0a05dC6CQ=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=JXwGPfEl4D+RpxZV5sxbC9gdFBhPHX39pnNy7Q9myNU48vZCOHuRc8aa3mzJ1oUCZRRtPqxGm5G0dY3V8VpQeT0YGRX+h8a36bgMoaoITPT0YxyDzqal4DOAw7yKwmv5N5SHi/foFbLyAnGc7niI2dFy/OKW8239utc2v3Voekk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=TiWcYNau; arc=none smtp.client-ip=74.125.82.202 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="TiWcYNau" Received: by mail-dy1-f202.google.com with SMTP id 5a478bee46e88-2ba8013a9e3so4142955eec.0 for ; Sat, 02 May 2026 00:00:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1777705221; x=1778310021; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=NWG6WVYKqonosS/UYZznxYSjLbNNh2VpTpdvGbEDeek=; b=TiWcYNauAR8lclOwkz40/HL/Zd9KGhgQLInFOcBid1KY4q+nEAaUd4d0lGFJDv9saD 7AF0YExkR9DO1Kj1FxBt27OOr0tl2/sdlK72GC/fnx6/Clq0HbeACcoHVRdElXEAGM6v YVjOTWVXAVJeTz7zYVy/KzL1jQ5qao7mrdbNmx6EtUaGsFIECJb5qwTPNcGcABl0tYd+ tJvP0pU41Deyn+d1fS6eOPCK5acnVaW3vkudQQzBaZxDx+9Qcdo39pVGzesmNRFMhKrc gs/8EPp7h9WJoPzFlmJxdlsKvyEKP6oMlKthPJ6H9/SXI4MJ/AThBhdM5bCANkE3ERx4 KI3A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777705221; x=1778310021; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=NWG6WVYKqonosS/UYZznxYSjLbNNh2VpTpdvGbEDeek=; b=VxTU3UX/nwTvg6VQzGJhrsWMgANb7nf+fQQXN764WuBAzwrcSoXI0m+kWLOc4nOWTR ZOc9y5x7oqrHTWusJYywL6tB+tB7YtUoT0jGrbLTYHa18xz92a8cNwq7O9rjXMytSYqX NQyCGDY2TZ+oMkHxOSnzq76rWXhOvXmgvs3mHD8ZufyPNWh2m0btP28qcwXKxZqmpy5p pDtpPjGWSYK6PQI+qM/ihHVL7PjCqKHSDN3l7ZWpJMuMAdCMvFMeETkiBt7XV30qDNF6 rymvZlSnBWWFsg4Jj8JQlw9/4HIrBf2u/4X7x1RrR10zSJ0IspBFRT9pJt4NskLrRD9w 3/7w== X-Forwarded-Encrypted: i=1; AFNElJ/RRwdFfuXVbswnETbh/jXMLqvtqL8yizT311IC2JB+bFcnyHtZZXRRdbv8YNU/lJsNqla27MkKcpIjL/k=@vger.kernel.org X-Gm-Message-State: AOJu0YzXJyDlW4Z02xsRBhOUB4Jj62WFJqzH5la2+wDlw4BxYaFmq4bz X6eTpCrBt2XA3QY7w/kLvyrBaPNvvXSb/+aIgjNRt+d+amz8693xS3rHZIBQ5pc3SxeMpw+j8bq L7gProK+yHQ== X-Received: from dlaj8.prod.google.com ([2002:a05:701b:2808:b0:12a:ad8d:be18]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7022:699d:b0:12d:ea4f:99dd with SMTP id a92af1059eb24-12dfd83a00amr1001470c88.34.1777705220946; Sat, 02 May 2026 00:00:20 -0700 (PDT) Date: Fri, 1 May 2026 23:59:32 -0700 In-Reply-To: <20260502065935.291960-1-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260409230620.4176210-2-irogers@google.com> <20260502065935.291960-1-irogers@google.com> X-Mailer: git-send-email 2.54.0.545.g6539524ca2-goog Message-ID: <20260502065935.291960-15-irogers@google.com> Subject: [PATCH v8 14/17] perf env: Remove unused perf_env__raw_arch From: Ian Rogers To: irogers@google.com, acme@kernel.org, namhyung@kernel.org, tmricht@linux.ibm.com Cc: agordeev@linux.ibm.com, gor@linux.ibm.com, hca@linux.ibm.com, jameshongleiwang@126.com, japo@linux.ibm.com, linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, linux-s390@vger.kernel.org, sumanthk@linux.ibm.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The switch to using e_machine has made the perf_env__raw_arch function unused so remove it. Signed-off-by: Ian Rogers --- tools/perf/util/env.c | 18 ------------------ tools/perf/util/env.h | 1 - 2 files changed, 19 deletions(-) diff --git a/tools/perf/util/env.c b/tools/perf/util/env.c index 97f4aa1131a1..5944acd28996 100644 --- a/tools/perf/util/env.c +++ b/tools/perf/util/env.c @@ -451,19 +451,6 @@ int perf_env__read_cpuid(struct perf_env *env) return 0; } =20 -static int perf_env__read_arch(struct perf_env *env) -{ - struct utsname uts; - - if (env->arch) - return 0; - - if (!uname(&uts)) - env->arch =3D strdup(uts.machine); - - return env->arch ? 0 : -ENOMEM; -} - static int perf_env__read_nr_cpus_avail(struct perf_env *env) { if (env->nr_cpus_avail =3D=3D 0) @@ -582,11 +569,6 @@ int perf_env__read_core_pmu_caps(struct perf_env *env) return ret; } =20 -const char *perf_env__raw_arch(struct perf_env *env) -{ - return env && !perf_env__read_arch(env) ? env->arch : "unknown"; -} - int perf_env__nr_cpus_avail(struct perf_env *env) { return env && !perf_env__read_nr_cpus_avail(env) ? env->nr_cpus_avail : 0; diff --git a/tools/perf/util/env.h b/tools/perf/util/env.h index 68dead1b36a6..a95fd7eb3524 100644 --- a/tools/perf/util/env.h +++ b/tools/perf/util/env.h @@ -191,7 +191,6 @@ const char *perf_env__arch(struct perf_env *env); const char *perf_env__arch_strerrno(uint16_t e_machine, int err); #endif const char *perf_env__cpuid(struct perf_env *env); -const char *perf_env__raw_arch(struct perf_env *env); int perf_env__nr_cpus_avail(struct perf_env *env); =20 void perf_env__init(struct perf_env *env); --=20 2.54.0.545.g6539524ca2-goog From nobody Sun Jun 14 06:07:10 2026 Received: from mail-dl1-f73.google.com (mail-dl1-f73.google.com [74.125.82.73]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7AFF131A81C for ; Sat, 2 May 2026 07:00:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777705225; cv=none; b=AHEVGhT9sLBvfWIXILe34Ei/RTp3gfEnQ0F0r52WK6Se7tVeyfX+Z+ZkkxIIIb9z/hAgkxorA+8vm636KxD2WLbuUgwk9Pbs4Fhjk0sUOKuN3+hQfThURdqtYrWrYHpoJrSnIOTHX7Y60qs+RPPVYdZ69NXJlIt4QNNbpKIRDAw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777705225; c=relaxed/simple; bh=0x1jZOU/SSy2Jra3FIlo1YicVHYFz7CVq678Xr4UmHc=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=fcncaQDf4vvD8lA+BuBrTVVAQTTohr5XDibiZ/RJDnQILNAG5A49XakRKUsaiNqHURCxBQDWJ7yW9cA38GHtfNM60MQIVhheG3n7uQAOkoms/LHVNg/rrhmjarKLYB4m/TwiZIWR5F1kwaBBoubDXocQ6AIQvIcOCNafmuUD0BM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=s1Np0LHn; arc=none smtp.client-ip=74.125.82.73 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="s1Np0LHn" Received: by mail-dl1-f73.google.com with SMTP id a92af1059eb24-12dfe9c058eso1392667c88.0 for ; Sat, 02 May 2026 00:00:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1777705224; x=1778310024; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=65M+lA5XSnXp7mSFaFqmQvgDaBfQgwqfvcgqjxbx5Bk=; b=s1Np0LHnFsfEBLr1mNdmMDQDqIs/f7ubILzqJLVwk2bz6Okaym5VifAyrtfc2QEsIJ wj1vXPh7VDORNk1wzVq9V/O9NAE7KQdNWmeJbi2UWx5m9MvFKpqOVOZZDHl0QJOOjZnA VHBTkDnj9oY0cIMCpKQjdttTqz51StHnlWVVa/AG1cnStrOYDgfq6+HYGWYNa4kZ+u3E Qt3RG/kzZS/0tON4zR2A39uVmUOKzeSh78KHsrbOIBZjITq1WecnLpkjXcuV4SsgwWBV whnQzWSqZSQju44Vq0m6tRz/2sAPzS1iV/nwWe1Nthtn92RfFBjzyxv/EJEqbmfASLCl iyiQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777705224; x=1778310024; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=65M+lA5XSnXp7mSFaFqmQvgDaBfQgwqfvcgqjxbx5Bk=; b=A5ydLuIP0CjTi6eGGwyQNA3TARufe12wLBOHavN/e+BRIm/6rYd21xWYYTyTHvoV+M ++AsjWDez+8fLEKV/4FwvQCzpJFQ+KadDj6e0OV2Wmd3BNYW2PMRQ1SYEBUmqLtZyOPl xtpF6o6lNHboCL2W4U5WZNqzSlMC/ERd9+CV4fHOcpezqJDoXQ7aH8Okb1HWRPGCFYh1 lpWE72VYBb9kYq0phNZrJJJBg2GBWeTDlynrQSasE+WxLNr6NXs68JJA/T4kbyG/C8Ao Th/rb+vkLQJmWhfkVXToovCNT1SYRBR3p/rNw6KkOq/ntjDVIXDx/JJ3IrtKzukxqfl0 jM0A== X-Forwarded-Encrypted: i=1; AFNElJ8NyhsftHM1dW8pGCKQZAqXOzGHgQctttVVxlTjDFCYcDHz5gKJar9XNlegx6s7NGZlNXbsvm/i4SxiKNg=@vger.kernel.org X-Gm-Message-State: AOJu0Yw3Y5Prl///erWnsNhzSrMmyHFkQnBNIeTB6zsxn9WTe8oaiH5k 8fGI9GUlfw5e5gnI2arrqQWtWbP2qFs+BeOs9Nl/GvG2TrGlaBKrQo6eL0o6a7jP17b3OsCIO6Z TpCEUtVPtRA== X-Received: from dlbph19.prod.google.com ([2002:a05:7022:3713:b0:12d:d0a4:2ed9]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7022:4590:b0:12d:de3e:52c7 with SMTP id a92af1059eb24-12dfd86a40dmr979219c88.43.1777705223414; Sat, 02 May 2026 00:00:23 -0700 (PDT) Date: Fri, 1 May 2026 23:59:33 -0700 In-Reply-To: <20260502065935.291960-1-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260409230620.4176210-2-irogers@google.com> <20260502065935.291960-1-irogers@google.com> X-Mailer: git-send-email 2.54.0.545.g6539524ca2-goog Message-ID: <20260502065935.291960-16-irogers@google.com> Subject: [PATCH v8 15/17] perf env: Add helper to lazily compute the os_release From: Ian Rogers To: irogers@google.com, acme@kernel.org, namhyung@kernel.org, tmricht@linux.ibm.com Cc: agordeev@linux.ibm.com, gor@linux.ibm.com, hca@linux.ibm.com, jameshongleiwang@126.com, japo@linux.ibm.com, linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, linux-s390@vger.kernel.org, sumanthk@linux.ibm.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" In live mode the os_release isn't being initialized, make a lazy initialization helper that assumes when the os_release isn't initialized this is live mode. Signed-off-by: Ian Rogers --- tools/perf/util/data-convert-bt.c | 2 +- tools/perf/util/env.c | 21 +++++++++++++++++++++ tools/perf/util/env.h | 1 + tools/perf/util/header.c | 16 +++++++++++----- tools/perf/util/symbol.c | 4 ++-- 5 files changed, 36 insertions(+), 8 deletions(-) diff --git a/tools/perf/util/data-convert-bt.c b/tools/perf/util/data-conve= rt-bt.c index 3b8f2df823a9..2c88420fe33e 100644 --- a/tools/perf/util/data-convert-bt.c +++ b/tools/perf/util/data-convert-bt.c @@ -1414,7 +1414,7 @@ do { \ =20 ADD("host", env->hostname); ADD("sysname", "Linux"); - ADD("release", env->os_release); + ADD("release", perf_env__os_release(env)); ADD("version", env->version); ADD("machine", env->arch); ADD("domain", "kernel"); diff --git a/tools/perf/util/env.c b/tools/perf/util/env.c index 5944acd28996..1090aaa2985f 100644 --- a/tools/perf/util/env.c +++ b/tools/perf/util/env.c @@ -339,6 +339,27 @@ int perf_env__kernel_is_64_bit(struct perf_env *env) return env->kernel_is_64_bit; } =20 +const char *perf_env__os_release(struct perf_env *env) +{ + struct utsname uts; + int ret; + + if (!env) + return perf_version_string; + + if (env->os_release) + return env->os_release; + + /* + * The os_release is being accessed but wasn't initialized from a data + * file, assume this is 'live' mode and use the release from uname. If + * uname or strdup fails then use the current perf tool version. + */ + ret =3D uname(&uts); + env->os_release =3D strdup(ret < 0 ? perf_version_string : uts.release); + return env->os_release ?: perf_version_string; +} + int perf_env__set_cmdline(struct perf_env *env, int argc, const char *argv= []) { int i; diff --git a/tools/perf/util/env.h b/tools/perf/util/env.h index a95fd7eb3524..989545a47798 100644 --- a/tools/perf/util/env.h +++ b/tools/perf/util/env.h @@ -172,6 +172,7 @@ void free_cpu_domain_info(struct cpu_domain_map **cd_ma= p, u32 schedstat_version, void perf_env__exit(struct perf_env *env); =20 int perf_env__kernel_is_64_bit(struct perf_env *env); +const char *perf_env__os_release(struct perf_env *env); =20 int perf_env__set_cmdline(struct perf_env *env, int argc, const char *argv= []); =20 diff --git a/tools/perf/util/header.c b/tools/perf/util/header.c index c6436269df4b..4867a932cb88 100644 --- a/tools/perf/util/header.c +++ b/tools/perf/util/header.c @@ -370,13 +370,19 @@ static int write_osrelease(struct feat_fd *ff, struct evlist *evlist __maybe_unused) { struct utsname uts; - int ret; + const char *release =3D NULL; =20 - ret =3D uname(&uts); - if (ret < 0) - return -1; + if (evlist->session) + release =3D perf_env__os_release(perf_session__env(evlist->session)); =20 - return do_write_string(ff, uts.release); + if (!release) { + int ret =3D uname(&uts); + + if (ret < 0) + return -1; + release =3D uts.release; + } + return do_write_string(ff, release); } =20 static int write_arch(struct feat_fd *ff, struct evlist *evlist) diff --git a/tools/perf/util/symbol.c b/tools/perf/util/symbol.c index 8aaaab0ad4b7..a70066d17729 100644 --- a/tools/perf/util/symbol.c +++ b/tools/perf/util/symbol.c @@ -2226,7 +2226,7 @@ static int vmlinux_path__init(struct perf_env *env) { struct utsname uts; char bf[PATH_MAX]; - char *kernel_version; + const char *kernel_version; unsigned int i; =20 vmlinux_path =3D malloc(sizeof(char *) * (ARRAY_SIZE(vmlinux_paths) + @@ -2243,7 +2243,7 @@ static int vmlinux_path__init(struct perf_env *env) return 0; =20 if (env) { - kernel_version =3D env->os_release; + kernel_version =3D perf_env__os_release(env); } else { if (uname(&uts) < 0) goto out_fail; --=20 2.54.0.545.g6539524ca2-goog From nobody Sun Jun 14 06:07:10 2026 Received: from mail-dl1-f73.google.com (mail-dl1-f73.google.com [74.125.82.73]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 67DBC31F995 for ; Sat, 2 May 2026 07:00:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777705228; cv=none; b=NI8K+2gmiLcE97qOe/6onxoraER2FXfUNg+0JhWwwSkH5Y6H0/U9gFf0FHfziupu5su7rrrc1zjJbxuN6iTJzCdMvn7PJP1VIbGHI6Iy13qJA81hx6SiDH4+c9L+3skOne/2ZpIto8Od4ACJwWCkqVd7gz/dJCk7tIzp0/Zg+QQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777705228; c=relaxed/simple; bh=e50vFh5CtVG9SREdkTT0BsWzZhta1RpinQipbQGGIFE=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=IObAV+Q5cvDoyg75TXb1ApJIFIGTOL+/OhWqGAarQ88WWPdDuTwBeHHQDH3zlwWyKoYSUnPAVya7QrbDjqYcDipqozHZyqL7lJzXKRCI9tJGsesJCHMHsshjtQ0byKiktqun71eiAhvtTInbZfwkBqzouHUJfeODHfC69I+j7aA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=STDZlq8Y; arc=none smtp.client-ip=74.125.82.73 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="STDZlq8Y" Received: by mail-dl1-f73.google.com with SMTP id a92af1059eb24-12dfb99429bso625293c88.1 for ; Sat, 02 May 2026 00:00:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1777705226; x=1778310026; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=RF7v439oBV6NmA50N3VhlP4B8A7joANfIGq/pVDUv7U=; b=STDZlq8YR1PyqbKhKYB7XIn0Ib9QaOeHSRv2+7PJfnez2low4QQl25Pq6HIF6oLTNI m6ehYo2vclf0AUDg9cJzS4YiT20ZqJkPklB4pcq6mwldFyOtiVAqVO2anOTN2PvGVu3Z yfPB3EUWek58KfSPdehXfN9yCdQ7ecFWeydSTqMwGAwNiTdp7cm3L98yKEptzv3hCXE9 O3Pvt8jl6HQngnaKVTdksLPvE0sNVpbDQQAhKAOc809rofzQJNFz64a2lV6htv0e9Itz O6SKZpixSo7W93qLrv0KVKTcwWJsHDinQu9V0QsbyzZR9L1SctyqKT9zPw83d9YQWzo2 pZ+w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777705226; x=1778310026; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=RF7v439oBV6NmA50N3VhlP4B8A7joANfIGq/pVDUv7U=; b=nazqkypoSAuwAxRkaApFagbKciZGRFuhhpS1aUh6d5dHEWYyH3OK3wA7NnFQKG2siq b/K95sPQmXBnzDSSdcLeU1tOULuwYWJmvpglRGhVv5SxfkmTtRFHsKJjS6OnDZBVWv9/ FRhvXMNkhDIfsakcXGG+0I3eD+HGsTcG7rjQFG/7CAya48EntFDHIsMYevdyhPPwsLng BkSYa4DBDSZEZp5zgwaT3NgKEoR+C5aQzkSaez4/ND8SVg2ctkne6656AAHBkRM4wFC3 pEoWy8rgbNj5I/1MlEFjyPImFPNyKLrWHf+JHD562N33r96aeSzqdSKsrt3jipFHh7Gy savA== X-Forwarded-Encrypted: i=1; AFNElJ/E0i8rlGrvaJzCDl8+3f+yaSZ+LIZHs5ZB+IjIw74b4gKMh+an5yYxz1EPLPVzcHGcQ6ZNtk//1K44sK0=@vger.kernel.org X-Gm-Message-State: AOJu0YzMNrl7ZQ0cR5kPUWGA3E1u8JAUKyFi1SNw4vsgR7MGiksz2VK6 bmECHJwxI6LxQVGaQLsKZXmGIXXEk1RLiCu/TpnamMx0t9Dj/MgPQwHefgZk/Xjk7RQW6EbsHfw qnOGSC/WIpQ== X-Received: from dlea11-n1.prod.google.com ([2002:a05:701b:420b:10b0:12d:b26a:1571]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7022:68a7:b0:12c:8e70:c33b with SMTP id a92af1059eb24-12dfd7b7eddmr1133051c88.8.1777705225422; Sat, 02 May 2026 00:00:25 -0700 (PDT) Date: Fri, 1 May 2026 23:59:34 -0700 In-Reply-To: <20260502065935.291960-1-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260409230620.4176210-2-irogers@google.com> <20260502065935.291960-1-irogers@google.com> X-Mailer: git-send-email 2.54.0.545.g6539524ca2-goog Message-ID: <20260502065935.291960-17-irogers@google.com> Subject: [PATCH v8 16/17] perf symbol: Add setters for bitfields sharing a byte to avoid concurrent update issues From: Ian Rogers To: irogers@google.com, acme@kernel.org, namhyung@kernel.org, tmricht@linux.ibm.com Cc: agordeev@linux.ibm.com, gor@linux.ibm.com, hca@linux.ibm.com, jameshongleiwang@126.com, japo@linux.ibm.com, linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, linux-s390@vger.kernel.org, sumanthk@linux.ibm.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" A problem with putting bitfields into struct symbol is that other bits in the symbol could be updated concurrently and only one update to the underlying storage unit happen, leading to lost updates. To avoid this, introduce a global lock `symbol_bits_lock` in `symbol.c` and helper functions to update the bits sharing a byte: `symbol__set_ignore` and `symbol__set_annotate2`. `inlined` is not given a setter as it is only initialized in `new_inline_sym` when the symbol is under construction and not shared. Assisted-by: Gemini:gemini-3.1-pro-preview Signed-off-by: Ian Rogers --- tools/perf/builtin-kwork.c | 2 +- tools/perf/builtin-sched.c | 2 +- tools/perf/util/annotate.c | 2 +- tools/perf/util/symbol.c | 22 ++++++++++++++++++++++ tools/perf/util/symbol.h | 3 +++ 5 files changed, 28 insertions(+), 3 deletions(-) diff --git a/tools/perf/builtin-kwork.c b/tools/perf/builtin-kwork.c index 9d3a4c779a41..7337ee956dc9 100644 --- a/tools/perf/builtin-kwork.c +++ b/tools/perf/builtin-kwork.c @@ -725,7 +725,7 @@ static void timehist_save_callchain(struct perf_kwork *= kwork, if (sym) { if (!strcmp(sym->name, "__softirqentry_text_start") || !strcmp(sym->name, "__do_softirq")) - sym->ignore =3D 1; + symbol__set_ignore(sym, true); } =20 callchain_cursor_advance(cursor); diff --git a/tools/perf/builtin-sched.c b/tools/perf/builtin-sched.c index 555247568e7a..655e95f660c2 100644 --- a/tools/perf/builtin-sched.c +++ b/tools/perf/builtin-sched.c @@ -2371,7 +2371,7 @@ static void save_task_callchain(struct perf_sched *sc= hed, if (!strcmp(sym->name, "schedule") || !strcmp(sym->name, "__schedule") || !strcmp(sym->name, "preempt_schedule")) - sym->ignore =3D 1; + symbol__set_ignore(sym, true); } =20 callchain_cursor_advance(cursor); diff --git a/tools/perf/util/annotate.c b/tools/perf/util/annotate.c index e745f3034a0e..d550a0061159 100644 --- a/tools/perf/util/annotate.c +++ b/tools/perf/util/annotate.c @@ -2224,7 +2224,7 @@ int symbol__annotate2(struct map_symbol *ms, struct e= vsel *evsel, =20 annotation__init_column_widths(notes, sym); annotation__update_column_widths(notes); - sym->annotate2 =3D 1; + symbol__set_annotate2(sym, true); =20 return 0; } diff --git a/tools/perf/util/symbol.c b/tools/perf/util/symbol.c index a70066d17729..1238a0d6ce6e 100644 --- a/tools/perf/util/symbol.c +++ b/tools/perf/util/symbol.c @@ -31,6 +31,7 @@ #include "map.h" #include "symbol.h" #include "map_symbol.h" +#include "mutex.h" #include "mem-events.h" #include "mem-info.h" #include "symsrc.h" @@ -52,6 +53,8 @@ static int dso__load_kernel_sym(struct dso *dso, struct m= ap *map); static int dso__load_guest_kernel_sym(struct dso *dso, struct map *map); static bool symbol__is_idle(const char *name); =20 +static struct mutex symbol_bits_lock; + int vmlinux_path__nr_entries; char **vmlinux_path; =20 @@ -345,6 +348,20 @@ void symbol__delete(struct symbol *sym) free(((void *)sym) - symbol_conf.priv_size); } =20 +void symbol__set_ignore(struct symbol *sym, bool ignore) +{ + mutex_lock(&symbol_bits_lock); + sym->ignore =3D ignore; + mutex_unlock(&symbol_bits_lock); +} + +void symbol__set_annotate2(struct symbol *sym, bool annotate2) +{ + mutex_lock(&symbol_bits_lock); + sym->annotate2 =3D annotate2; + mutex_unlock(&symbol_bits_lock); +} + void symbols__delete(struct rb_root_cached *symbols) { struct symbol *pos; @@ -2415,6 +2432,8 @@ int symbol__init(struct perf_env *env) if (symbol_conf.initialized) return 0; =20 + mutex_init(&symbol_bits_lock); + symbol_conf.priv_size =3D PERF_ALIGN(symbol_conf.priv_size, sizeof(u64)); =20 symbol__elf_init(); @@ -2493,6 +2512,9 @@ void symbol__exit(void) { if (!symbol_conf.initialized) return; + + mutex_destroy(&symbol_bits_lock); + strlist__delete(symbol_conf.bt_stop_list); strlist__delete(symbol_conf.sym_list); strlist__delete(symbol_conf.dso_list); diff --git a/tools/perf/util/symbol.h b/tools/perf/util/symbol.h index bd6eb90c8668..5d98d7e84d57 100644 --- a/tools/perf/util/symbol.h +++ b/tools/perf/util/symbol.h @@ -77,6 +77,9 @@ struct symbol { void symbol__delete(struct symbol *sym); void symbols__delete(struct rb_root_cached *symbols); =20 +void symbol__set_ignore(struct symbol *sym, bool ignore); +void symbol__set_annotate2(struct symbol *sym, bool annotate2); + /* symbols__for_each_entry - iterate over symbols (rb_root) * * @symbols: the rb_root of symbols --=20 2.54.0.545.g6539524ca2-goog From nobody Sun Jun 14 06:07:10 2026 Received: from mail-dl1-f73.google.com (mail-dl1-f73.google.com [74.125.82.73]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 88A2732143F for ; Sat, 2 May 2026 07:00:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777705230; cv=none; b=OwAejSz0G4iEBiJqlfT02AyRCklgnTu3F0JU1R1vXEJBf7cFpOeh/2MOmk1gNce8ODpo9ImsVCffCzrbkFXyi/q5001V/4jb/2VQcCMyrKZ6XJehu8Mcmu6ncHN4NJg5h7GbSX5yTQVQ20GqH2KQNTbTBn0IlPiEpSWOveX1eKs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777705230; c=relaxed/simple; bh=0h0Tfir28yPQPNz+cNoFW8Erqwl6wjPEai8mFcAvvM4=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=duFuikXLGN5hg6TDK3Nft/fFoycIjQQE0t1lESqUKUrMZoYfAvwU63pCRtoG/r+w7kl6O1C6XfwpToIIdK409rEvRjfRbGWnbTEdamHmRP8hj3N4O10FFwu8+SiAMWK9teDkXCgQA/rZ71vPV2pqRqSr1VK8U3yYBGn57ChhM2E= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=B8fe9WC1; arc=none smtp.client-ip=74.125.82.73 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="B8fe9WC1" Received: by mail-dl1-f73.google.com with SMTP id a92af1059eb24-12dbf4f678eso14473482c88.0 for ; Sat, 02 May 2026 00:00:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1777705228; x=1778310028; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=CrOBiEIloSh8hzrU+l3UrRKP9W/TgO2dbvf2i5sJg4M=; b=B8fe9WC1U7IQ2qloNNoJSinA6xyF0eDe9jP1JYo70VmdYowjsSjiyWhs/XCJAf4rGo uqYvrCEUEJU78g8yK0BrzAr8rLBB9lK9B5J/UeYOWTEQdyENv0tWI1N5AR0WDAd1wRDo OxBJoe5cXzmtoIDyZPW5uvYS/KVrW+C2Js+z8XwMZbSsAO9l+wlCQE6Rpdpdd+4O9P9d Q6AUUuVgHZp95ktf6B1qspMTV8Duobt3TmpCVmkO3wtB33C25hSHAN1dvtgvfrw9QKw6 WZ9S8UL7D127e24f6AJKeZTrvElwfnuz9dPJ1+wqzaDWLAmK2IXoHcaTND9IjyfE0tPr AyGQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777705228; x=1778310028; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=CrOBiEIloSh8hzrU+l3UrRKP9W/TgO2dbvf2i5sJg4M=; b=f5oeAo9sraPn20udZ1hPpKTyptt+bARLYzFAD0Aq4bEI6DWJSgG7Dvwe9o31dLZ+0L Ff8z84CuLXbyaLEzgBtTUAKtybPLpHpo7nP8Df53sCS7Q8kXxECt/M5B/gUZHFuwlOxh g5J7FMrGDFcFLVqiD/H5b+P6NJwSCZz2FkAPgQ4kggTIXaNSZGRQ2EsLNQM0sutUXol7 w0QwTJ20m7fyxM18gIf+yhXg3Sj3/k6nrznQUuAGDn69XJ6ekUHkOuGBD1T8lROZOSSO T22bWggeIdcFJoGvVtkBJRy6Wb96gvA0VtDlrbDSage3rM1e0aXp9+DPRnOWVbQqrs0e JpLQ== X-Forwarded-Encrypted: i=1; AFNElJ/pEXkwx00+Vp4WdQ/VQLu9TzNHdPHQ2pXpuXFSzRokHY3CY91Qv/6b/e0sU8vETgKElh5Xn4rzcEaUmk4=@vger.kernel.org X-Gm-Message-State: AOJu0YzqYKkmV3Fj2x0XFqTG8jInNRZNpgPnKeqeG5gBY60ZhAEG0SZz u5viGJd4jkTnMfcUEch2f+C7DvmPjyCLdBIApJ66fD3sPe21/ZPXWy8Nbm4aEBDUbTaFf0QvTYi qohigVswwEA== X-Received: from dlbtz16.prod.google.com ([2002:a05:7022:ead0:b0:12c:3dfa:518e]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7022:3897:b0:12c:3d30:37c5 with SMTP id a92af1059eb24-12dfd7bd8d3mr1079370c88.12.1777705227576; Sat, 02 May 2026 00:00:27 -0700 (PDT) Date: Fri, 1 May 2026 23:59:35 -0700 In-Reply-To: <20260502065935.291960-1-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260409230620.4176210-2-irogers@google.com> <20260502065935.291960-1-irogers@google.com> X-Mailer: git-send-email 2.54.0.545.g6539524ca2-goog Message-ID: <20260502065935.291960-18-irogers@google.com> Subject: [PATCH v8 17/17] perf symbol: Lazily compute idle and use a global lock for updates From: Ian Rogers To: irogers@google.com, acme@kernel.org, namhyung@kernel.org, tmricht@linux.ibm.com Cc: agordeev@linux.ibm.com, gor@linux.ibm.com, hca@linux.ibm.com, jameshongleiwang@126.com, japo@linux.ibm.com, linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, linux-s390@vger.kernel.org, sumanthk@linux.ibm.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Move the idle boolean to a helper symbol__is_idle function. In the function lazily compute whether a symbol is an idle function taking into consideration the kernel version and architecture of the machine. As symbols__insert no longer needs to know if a symbol is for the kernel, remove the argument. This change is inspired by mailing list discussion, particularly from Thomas Richter and Heiko Carstens : https://lore.kernel.org/lkml/20260219113850.354271-1-tmricht@linux.ibm.com/ The change switches x86 matches to use strstarts which means intel_idle_irq is matched as part of strstarts(name, "intel_idle"), a change suggested by Honglei Wang in: https://lore.kernel.org/lkml/20260323085255.98173-1-jameshongleiwang@126.co= m/ To avoid concurrent update issues with other bitfields in `struct symbol`, this change uses the global lock `symbol_bits_lock` (introduced in a previous commit) for updates to the `idle` field. A static helper `symbol__set_idle` taking a boolean is used to encapsulate the lock and mapping to `enum symbol_idle_kind`. Assisted-by: Gemini:gemini-3.1-pro-preview Signed-off-by: Ian Rogers --- tools/perf/util/symbol-elf.c | 2 +- tools/perf/util/symbol.c | 108 +++++++++++++++++++++++------------ tools/perf/util/symbol.h | 14 +++-- 3 files changed, 81 insertions(+), 43 deletions(-) diff --git a/tools/perf/util/symbol-elf.c b/tools/perf/util/symbol-elf.c index 7afa8a117139..e8f7fe3f19fc 100644 --- a/tools/perf/util/symbol-elf.c +++ b/tools/perf/util/symbol-elf.c @@ -1727,7 +1727,7 @@ dso__load_sym_internal(struct dso *dso, struct map *m= ap, struct symsrc *syms_ss, =20 arch__sym_update(f, &sym); =20 - __symbols__insert(dso__symbols(curr_dso), f, dso__kernel(dso)); + __symbols__insert(dso__symbols(curr_dso), f); nr++; } dso__put(curr_dso); diff --git a/tools/perf/util/symbol.c b/tools/perf/util/symbol.c index 1238a0d6ce6e..6c642067c4ed 100644 --- a/tools/perf/util/symbol.c +++ b/tools/perf/util/symbol.c @@ -51,7 +51,6 @@ =20 static int dso__load_kernel_sym(struct dso *dso, struct map *map); static int dso__load_guest_kernel_sym(struct dso *dso, struct map *map); -static bool symbol__is_idle(const char *name); =20 static struct mutex symbol_bits_lock; =20 @@ -362,6 +361,13 @@ void symbol__set_annotate2(struct symbol *sym, bool an= notate2) mutex_unlock(&symbol_bits_lock); } =20 +static void symbol__set_idle(struct symbol *sym, bool idle) +{ + mutex_lock(&symbol_bits_lock); + sym->idle =3D idle ? SYMBOL_IDLE__IDLE : SYMBOL_IDLE__NOT_IDLE; + mutex_unlock(&symbol_bits_lock); +} + void symbols__delete(struct rb_root_cached *symbols) { struct symbol *pos; @@ -375,8 +381,7 @@ void symbols__delete(struct rb_root_cached *symbols) } } =20 -void __symbols__insert(struct rb_root_cached *symbols, - struct symbol *sym, bool kernel) +void __symbols__insert(struct rb_root_cached *symbols, struct symbol *sym) { struct rb_node **p =3D &symbols->rb_root.rb_node; struct rb_node *parent =3D NULL; @@ -384,17 +389,6 @@ void __symbols__insert(struct rb_root_cached *symbols, struct symbol *s; bool leftmost =3D true; =20 - if (kernel) { - const char *name =3D sym->name; - /* - * ppc64 uses function descriptors and appends a '.' to the - * start of every instruction address. Remove it. - */ - if (name[0] =3D=3D '.') - name++; - sym->idle =3D symbol__is_idle(name); - } - while (*p !=3D NULL) { parent =3D *p; s =3D rb_entry(parent, struct symbol, rb_node); @@ -411,7 +405,7 @@ void __symbols__insert(struct rb_root_cached *symbols, =20 void symbols__insert(struct rb_root_cached *symbols, struct symbol *sym) { - __symbols__insert(symbols, sym, false); + __symbols__insert(symbols, sym); } =20 static struct symbol *symbols__find(struct rb_root_cached *symbols, u64 ip) @@ -572,7 +566,7 @@ void dso__reset_find_symbol_cache(struct dso *dso) =20 void dso__insert_symbol(struct dso *dso, struct symbol *sym) { - __symbols__insert(dso__symbols(dso), sym, dso__kernel(dso)); + __symbols__insert(dso__symbols(dso), sym); =20 /* update the symbol cache if necessary */ if (dso__last_find_result_addr(dso) >=3D sym->start && @@ -738,43 +732,81 @@ int modules__parse(const char *filename, void *arg, * These are symbols in the kernel image, so make sure that * sym is from a kernel DSO. */ -static bool symbol__is_idle(const char *name) +static int sym_name_cmp(const void *a, const void *b) { - const char * const idle_symbols[] =3D { + const char *name =3D a; + const char *const *sym =3D b; + + return strcmp(name, *sym); +} + +bool symbol__is_idle(struct symbol *sym, const struct dso *dso, struct per= f_env *env) +{ + static const char * const idle_symbols[] =3D { "acpi_idle_do_entry", "acpi_processor_ffh_cstate_enter", "arch_cpu_idle", "cpu_idle", "cpu_startup_entry", - "idle_cpu", - "intel_idle", - "intel_idle_ibrs", "default_idle", - "native_safe_halt", "enter_idle", "exit_idle", - "mwait_idle", - "mwait_idle_with_hints", - "mwait_idle_with_hints.constprop.0", + "idle_cpu", + "native_safe_halt", "poll_idle", - "ppc64_runlatch_off", "pseries_dedicated_idle_sleep", - "psw_idle", - "psw_idle_exit", - NULL }; - int i; - static struct strlist *idle_symbols_list; + const char *name =3D sym->name; + uint16_t e_machine =3D perf_env__e_machine(env, /*e_flags=3D*/NULL); =20 - if (idle_symbols_list) - return strlist__has_entry(idle_symbols_list, name); + if (sym->idle) + return sym->idle =3D=3D SYMBOL_IDLE__IDLE; =20 - idle_symbols_list =3D strlist__new(NULL, NULL); + if (!dso || dso__kernel(dso) =3D=3D DSO_SPACE__USER) { + symbol__set_idle(sym, /*idle=3D*/false); + return false; + } =20 - for (i =3D 0; idle_symbols[i]; i++) - strlist__add(idle_symbols_list, idle_symbols[i]); + /* + * ppc64 uses function descriptors and appends a '.' to the + * start of every instruction address. Remove it. + */ + if (name[0] =3D=3D '.') + name++; + + if (bsearch(name, idle_symbols, ARRAY_SIZE(idle_symbols), + sizeof(idle_symbols[0]), sym_name_cmp)) { + symbol__set_idle(sym, /*idle=3D*/true); + return true; + } + + if (e_machine =3D=3D EM_386 || e_machine =3D=3D EM_X86_64) { + if (strstarts(name, "mwait_idle") || + strstarts(name, "intel_idle")) { + symbol__set_idle(sym, /*idle=3D*/true); + return true; + } + } =20 - return strlist__has_entry(idle_symbols_list, name); + if (e_machine =3D=3D EM_PPC64 && !strcmp(name, "ppc64_runlatch_off")) { + symbol__set_idle(sym, /*idle=3D*/true); + return true; + } + + if (e_machine =3D=3D EM_S390 && strstarts(name, "psw_idle")) { + int major =3D 0, minor =3D 0; + const char *release =3D perf_env__os_release(env); + + /* Before v6.10, s390 used psw_idle. */ + if (release && sscanf(release, "%d.%d", &major, &minor) =3D=3D 2 && + (major < 6 || (major =3D=3D 6 && minor < 10))) { + symbol__set_idle(sym, /*idle=3D*/true); + return true; + } + } + + symbol__set_idle(sym, /*idle=3D*/false); + return false; } =20 static int map__process_kallsym_symbol(void *arg, const char *name, @@ -803,7 +835,7 @@ static int map__process_kallsym_symbol(void *arg, const= char *name, * We will pass the symbols to the filter later, in * map__split_kallsyms, when we have split the maps per module */ - __symbols__insert(root, sym, !strchr(name, '[')); + __symbols__insert(root, sym); =20 return 0; } diff --git a/tools/perf/util/symbol.h b/tools/perf/util/symbol.h index 5d98d7e84d57..717d2f876d58 100644 --- a/tools/perf/util/symbol.h +++ b/tools/perf/util/symbol.h @@ -43,6 +43,12 @@ Elf_Scn *elf_section_by_name(Elf *elf, GElf_Ehdr *ep, GElf_Shdr *shp, const char *name, size_t *idx); #endif =20 +enum symbol_idle_kind { + SYMBOL_IDLE__UNKNOWN =3D 0, + SYMBOL_IDLE__NOT_IDLE =3D 1, + SYMBOL_IDLE__IDLE =3D 2, +}; + /** * A symtab entry. When allocated this may be preceded by an annotation (s= ee * symbol__annotation) and/or a browser_index (see symbol__browser_index). @@ -58,8 +64,8 @@ struct symbol { u8 type:4; /** ELF binding type as defined for st_info. E.g. STB_WEAK or STB_GLOBAL.= */ u8 binding:4; - /** Set true for kernel symbols of idle routines. */ - u8 idle:1; + /** Cache for symbol__is_idle holding enum symbol_idle_kind values. */ + u8 idle:2; /** Resolvable but tools ignore it (e.g. idle routines). */ u8 ignore:1; /** Symbol for an inlined function. */ @@ -197,8 +203,7 @@ int dso__synthesize_plt_symbols(struct dso *dso, struct= symsrc *ss); =20 char *dso__demangle_sym(struct dso *dso, int kmodule, const char *elf_name= ); =20 -void __symbols__insert(struct rb_root_cached *symbols, struct symbol *sym, - bool kernel); +void __symbols__insert(struct rb_root_cached *symbols, struct symbol *sym); void symbols__insert(struct rb_root_cached *symbols, struct symbol *sym); void symbols__fixup_duplicate(struct rb_root_cached *symbols); void symbols__fixup_end(struct rb_root_cached *symbols, bool is_kallsyms); @@ -281,5 +286,6 @@ enum { }; =20 int symbol__validate_sym_arguments(void); +bool symbol__is_idle(struct symbol *sym, const struct dso *dso, struct per= f_env *env); =20 #endif /* __PERF_SYMBOL */ --=20 2.54.0.545.g6539524ca2-goog