From nobody Sat Feb 7 18:20:10 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 08074C7EE23 for ; Fri, 26 May 2023 18:34:27 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S242598AbjEZSeZ (ORCPT ); Fri, 26 May 2023 14:34:25 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43472 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S242496AbjEZSeU (ORCPT ); Fri, 26 May 2023 14:34:20 -0400 Received: from mail-pj1-x104a.google.com (mail-pj1-x104a.google.com [IPv6:2607:f8b0:4864:20::104a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E851CE62 for ; Fri, 26 May 2023 11:34:12 -0700 (PDT) Received: by mail-pj1-x104a.google.com with SMTP id 98e67ed59e1d1-255dfed764dso1394438a91.1 for ; Fri, 26 May 2023 11:34:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1685126052; x=1687718052; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=ebDmAKcMgjMG509wnFyrTUPwJyUM0h3NbQ8A7cysfQ0=; b=OV1TvpXGpGm5MLs6Mh/URj5q11pFxOE0Pq/aTWDMR9PFQN1iMItLpAMs3hSe5FPK6B TCrvq4wBk0Bt6Ro0RPhK4ENdsqMhutdlHfG4j2n6GJQnkvpVr6IBB0qujDx+I6VJ1wU3 R5i+XfuZp7r05tkVfaMfD1mU1PEdnBXufxosZghTLlAnmbnHSm3UrrCC/ji6wFQ+LrjP 1xz+2nv0nqllptmrqwhYDEAekiiNNuB6OE8UQWvtRkzb486aVxo3isWty86FkFB0zUVY iGLWO5vHReTy+cvNcwofn4j4NaUofXC1GTs8lUQvcBYqWp7ZmUPbe78t34xNThF9ExWv S/Gg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1685126052; x=1687718052; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=ebDmAKcMgjMG509wnFyrTUPwJyUM0h3NbQ8A7cysfQ0=; b=JTmfBlozl0Z74VQZBGzo84QKPvGiwAnI/JCAioQnhmuKCcI383EmSaO+BjXItpRkjn GvrB3gTJJ10v5Jb0H6co9St1CCbU8V7Rc0T8jLINKpWynh1kf5BB1dC3joLD0p9P4hQ6 gxHQSaVq3iVEflJ8285erO7YG8M6OE/VxEK9bZzg6UMxnqM38Ot4Xg2zuw7UXikBqnnO RXRiirJ+Txiv9ayuGj/ujojdgI6CXMXfNoZN54WvjdvlUFgObptqvDWdfBY3P4XLeenS Xu6JeOwoZthz4iDeKk3FzX4IQL97s77UkSfPqiLQcMqcOzKU1lV61jg/qfEZsnQfYdn/ tfiA== X-Gm-Message-State: AC+VfDznoegQR6P3FnBaIkrDA+jzjvKzlo7tiqWM5isxPELOaMyQI0Zp jUpBqmYxZPPPN65Yk+ft0++1MJ8kpU8H X-Google-Smtp-Source: ACHHUZ7/hC7A5d3iCEZFXKr8J780KUcDmxhUabVPrKmWkXgja76tEtD0TOBYgcVxSXpNsAWc4fIgyEln64Zh X-Received: from irogers.svl.corp.google.com ([2620:15c:2d4:203:3b4e:312c:644:a642]) (user=irogers job=sendgmr) by 2002:a17:902:c948:b0:1a9:baa8:359f with SMTP id i8-20020a170902c94800b001a9baa8359fmr890440pla.6.1685126052431; Fri, 26 May 2023 11:34:12 -0700 (PDT) Date: Fri, 26 May 2023 11:33:46 -0700 In-Reply-To: <20230526183401.2326121-1-irogers@google.com> Message-Id: <20230526183401.2326121-2-irogers@google.com> Mime-Version: 1.0 References: <20230526183401.2326121-1-irogers@google.com> X-Mailer: git-send-email 2.41.0.rc0.172.g3f132b7071-goog Subject: [PATCH v2 01/16] perf header: Make nodes dynamic in write_mem_topology From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Mark Rutland , Alexander Shishkin , Jiri Olsa , Namhyung Kim , Ian Rogers , Adrian Hunter , "Masami Hiramatsu (Google)" , "Steven Rostedt (Google)" , Ross Zwisler , Leo Yan , Tiezhu Yang , Yang Jihong , Andi Kleen , Kan Liang , Ravi Bangoria , Sean Christopherson , K Prateek Nayak , Paolo Bonzini , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Avoid a large static array, dynamically allocate the nodes avoiding a hard coded limited as well. Signed-off-by: Ian Rogers --- tools/perf/util/header.c | 41 ++++++++++++++++++++++++---------------- 1 file changed, 25 insertions(+), 16 deletions(-) diff --git a/tools/perf/util/header.c b/tools/perf/util/header.c index 2dde3ca20de5..f3c0cd8f6244 100644 --- a/tools/perf/util/header.c +++ b/tools/perf/util/header.c @@ -24,6 +24,7 @@ #include #endif #include +#include // reallocarray =20 #include "dso.h" #include "evlist.h" @@ -1396,13 +1397,14 @@ static int memory_node__sort(const void *a, const v= oid *b) return na->node - nb->node; } =20 -static int build_mem_topology(struct memory_node *nodes, u64 size, u64 *cn= tp) +static int build_mem_topology(struct memory_node **nodesp, u64 *cntp) { char path[PATH_MAX]; struct dirent *ent; DIR *dir; - u64 cnt =3D 0; int ret =3D 0; + size_t cnt =3D 0, size =3D 0; + struct memory_node *nodes =3D NULL; =20 scnprintf(path, PATH_MAX, "%s/devices/system/node/", sysfs__mountpoint()); @@ -1426,26 +1428,32 @@ static int build_mem_topology(struct memory_node *n= odes, u64 size, u64 *cntp) if (r !=3D 1) continue; =20 - if (WARN_ONCE(cnt >=3D size, - "failed to write MEM_TOPOLOGY, way too many nodes\n")) { - closedir(dir); - return -1; - } + if (cnt >=3D size) { + struct memory_node *new_nodes =3D + reallocarray(nodes, cnt + 4, sizeof(*nodes)); =20 + if (!new_nodes) { + pr_err("Failed to write MEM_TOPOLOGY, size %zd nodes\n", size); + ret =3D -ENOMEM; + goto out; + } + nodes =3D new_nodes; + size +=3D 4; + } ret =3D memory_node__read(&nodes[cnt++], idx); } - - *cntp =3D cnt; +out: closedir(dir); - - if (!ret) + if (!ret) { + *cntp =3D cnt; + *nodesp =3D nodes; qsort(nodes, cnt, sizeof(nodes[0]), memory_node__sort); + } else + free(nodes); =20 return ret; } =20 -#define MAX_MEMORY_NODES 2000 - /* * The MEM_TOPOLOGY holds physical memory map for every * node in system. The format of data is as follows: @@ -1464,8 +1472,8 @@ static int build_mem_topology(struct memory_node *nod= es, u64 size, u64 *cntp) static int write_mem_topology(struct feat_fd *ff __maybe_unused, struct evlist *evlist __maybe_unused) { - static struct memory_node nodes[MAX_MEMORY_NODES]; - u64 bsize, version =3D 1, i, nr; + struct memory_node *nodes =3D NULL; + u64 bsize, version =3D 1, i, nr =3D 0; int ret; =20 ret =3D sysfs__read_xll("devices/system/memory/block_size_bytes", @@ -1473,7 +1481,7 @@ static int write_mem_topology(struct feat_fd *ff __ma= ybe_unused, if (ret) return ret; =20 - ret =3D build_mem_topology(&nodes[0], MAX_MEMORY_NODES, &nr); + ret =3D build_mem_topology(&nodes, &nr); if (ret) return ret; =20 @@ -1508,6 +1516,7 @@ static int write_mem_topology(struct feat_fd *ff __ma= ybe_unused, } =20 out: + free(nodes); return ret; } =20 --=20 2.41.0.rc0.172.g3f132b7071-goog From nobody Sat Feb 7 18:20:10 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 845A6C7EE23 for ; Fri, 26 May 2023 18:34:30 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236450AbjEZSe3 (ORCPT ); Fri, 26 May 2023 14:34:29 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43784 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237598AbjEZSeW (ORCPT ); Fri, 26 May 2023 14:34:22 -0400 Received: from mail-yb1-xb49.google.com (mail-yb1-xb49.google.com [IPv6:2607:f8b0:4864:20::b49]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 531C21B7 for ; Fri, 26 May 2023 11:34:15 -0700 (PDT) Received: by mail-yb1-xb49.google.com with SMTP id 3f1490d57ef6-ba8337ade1cso2702455276.2 for ; Fri, 26 May 2023 11:34:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1685126054; x=1687718054; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=rhs20KFbrBjMvIkaCaPHOIOyU5CqMAw5GkT0rX0TX0U=; b=pDsfCR/qApd6BnNf5BC300XSLP2L05MlgSQ/+ZqWZ3VQmMjw4LHyrVtWRt03skSLoI 3ubDd7OwPnvf3CKmlqt9hJodEoCcRbQBzDr1oIaDNNewcZ5aJdnSGU1/LrGfohkCGu3u GMUW+z2+VWYhlPciW/c3oBk78a+bx0ItNwaXGGh+UCAaaAKMfOcKbYrdNO5/tdC0rDzK NU2qxy0/rSKHcTxt+lZuSrGE6rpmeqsegRhDeuXl0xf2VDShbDU1xAC+ba8Jpx2QFmQq Q4tph4YXASgoo+KuJVAuenGVuKWZAGR/AWDGO4v0pSa69npEyf0nMDiz4NcUU9enCocq TaFg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1685126054; x=1687718054; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=rhs20KFbrBjMvIkaCaPHOIOyU5CqMAw5GkT0rX0TX0U=; b=WPV8IVAX7vd8j5CJxjFGe1WmRRNqFjpgpe9phs+MR00eFYzlFqujMgt1Lg2atnm7cs vwExJn797ndpbCSbDIdfLDzsAQZIQIUZ4W+1CnMIEXEbfUBcBNFuw0sjk7f/OVsQhcPN VIMFf/ag/hTC2US4Z+MXTUO9+6dFIiiJj3/Go8PIKEOIvXRKxIPiTYMvXPktZUYUrrnO lc9SyFD47upEzxM/sA9CQ7NSl+sdHrV6ldIWTYZI0SOvvDwZ7FIYQNJA1C/hMcvY4RRj HYqNjwt3s7ZCLC6ljzRdomFQtoBlOnOYIKbX6nfx5IAKfmkJG36qhnIUSOsGK8MfmLCP aGnQ== X-Gm-Message-State: AC+VfDwV/emNGlytaPZTEK2asqEZvxEbpM3//q4rfLcn9oWK/1pvKyzR P6Ell7prYCdnj1KztRG/vK/9ILjV3DGY X-Google-Smtp-Source: ACHHUZ6+rvkIOvNHoGwO95tDYhf6xgF/LAx36BZB1O5qRld+APf77syKzYKfTngPqwODAWdeN/l+yodizVw+ X-Received: from irogers.svl.corp.google.com ([2620:15c:2d4:203:3b4e:312c:644:a642]) (user=irogers job=sendgmr) by 2002:a25:8211:0:b0:bad:14ac:f22e with SMTP id q17-20020a258211000000b00bad14acf22emr999303ybk.5.1685126054570; Fri, 26 May 2023 11:34:14 -0700 (PDT) Date: Fri, 26 May 2023 11:33:47 -0700 In-Reply-To: <20230526183401.2326121-1-irogers@google.com> Message-Id: <20230526183401.2326121-3-irogers@google.com> Mime-Version: 1.0 References: <20230526183401.2326121-1-irogers@google.com> X-Mailer: git-send-email 2.41.0.rc0.172.g3f132b7071-goog Subject: [PATCH v2 02/16] perf test x86: insn-x86 test data is immutable so mark it const From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Mark Rutland , Alexander Shishkin , Jiri Olsa , Namhyung Kim , Ian Rogers , Adrian Hunter , "Masami Hiramatsu (Google)" , "Steven Rostedt (Google)" , Ross Zwisler , Leo Yan , Tiezhu Yang , Yang Jihong , Andi Kleen , Kan Liang , Ravi Bangoria , Sean Christopherson , K Prateek Nayak , Paolo Bonzini , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" This allows the movement of some sizeable data arrays (168,624bytes) to .data.relro. Without PIE or the strings it could be moved to .rodata. Signed-off-by: Ian Rogers --- tools/perf/arch/x86/tests/insn-x86.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tools/perf/arch/x86/tests/insn-x86.c b/tools/perf/arch/x86/tes= ts/insn-x86.c index 735257d205b5..7b5eb8baf0f2 100644 --- a/tools/perf/arch/x86/tests/insn-x86.c +++ b/tools/perf/arch/x86/tests/insn-x86.c @@ -18,14 +18,14 @@ struct test_data { const char *asm_rep; }; =20 -struct test_data test_data_32[] =3D { +const struct test_data test_data_32[] =3D { #include "insn-x86-dat-32.c" {{0x0f, 0x01, 0xee}, 3, 0, NULL, NULL, "0f 01 ee \trdpkru"}, {{0x0f, 0x01, 0xef}, 3, 0, NULL, NULL, "0f 01 ef \twrpkru"}, {{0}, 0, 0, NULL, NULL, NULL}, }; =20 -struct test_data test_data_64[] =3D { +const struct test_data test_data_64[] =3D { #include "insn-x86-dat-64.c" {{0x0f, 0x01, 0xee}, 3, 0, NULL, NULL, "0f 01 ee \trdpkru"}, {{0x0f, 0x01, 0xef}, 3, 0, NULL, NULL, "0f 01 ef \twrpkru"}, @@ -97,7 +97,7 @@ static int get_branch(const char *branch_str) return -1; } =20 -static int test_data_item(struct test_data *dat, int x86_64) +static int test_data_item(const struct test_data *dat, int x86_64) { struct intel_pt_insn intel_pt_insn; int op, branch, ret; @@ -147,9 +147,9 @@ static int test_data_item(struct test_data *dat, int x8= 6_64) return 0; } =20 -static int test_data_set(struct test_data *dat_set, int x86_64) +static int test_data_set(const struct test_data *dat_set, int x86_64) { - struct test_data *dat; + const struct test_data *dat; int ret =3D 0; =20 for (dat =3D dat_set; dat->expected_length; dat++) { --=20 2.41.0.rc0.172.g3f132b7071-goog From nobody Sat Feb 7 18:20:10 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2B9B8C7EE23 for ; Fri, 26 May 2023 18:34:34 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236462AbjEZSec (ORCPT ); Fri, 26 May 2023 14:34:32 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43812 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S242548AbjEZSeX (ORCPT ); Fri, 26 May 2023 14:34:23 -0400 Received: from mail-yb1-xb4a.google.com (mail-yb1-xb4a.google.com [IPv6:2607:f8b0:4864:20::b4a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C43AEE42 for ; Fri, 26 May 2023 11:34:17 -0700 (PDT) Received: by mail-yb1-xb4a.google.com with SMTP id 3f1490d57ef6-bacfa4eefd3so1399023276.3 for ; Fri, 26 May 2023 11:34:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1685126057; x=1687718057; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=PQ6/7wH3wD+sz3l8jATNpn1TZP74J5iSNRHOLe9pzI0=; b=AUsGHk1c9uTHOghP5ICbKsK1um7JsTzGLRPWZUjJIfN5E2WrVSOFdOrqJu/tv99hd8 ewuYNgOMwXmdbKIHQbdVpXweNIEL+jY7QjWrUeBKdHfCI1ck3e09pHpzzd63jjzW18Z1 kPT2/UDwNRh94p9o+F5V7XEwAJ84y224EelIL3IaP+cb9H7SQer0EwFev6vh6UdUoeCF rBDj78sV7z3SLwRTYpKELGkD0sOqpNb5Nkqf+Nf5vtxruSzwDVY2/uMuO2yWujkVfBFu 82gPmmJBt2/rQlTpIJMfKKSBMFQYDVHBOj7f7Rx3a29OOyyD1hz2O8fniSlJId5vB3c3 u4YA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1685126057; x=1687718057; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=PQ6/7wH3wD+sz3l8jATNpn1TZP74J5iSNRHOLe9pzI0=; b=C9zwWLp0rnw05xXESucgTYsA6iwiYSLCB2GzBFw7Kovu8zXsXKyV7f5+N3QTilrmUm IGp9l8DCUuCyyCD505FtL4U+jv6qm6Q67U3DrWdF0pt/Twszegayn7y+oZLoSp+aACwD PCiid7chsiEYxniJyOvbxKC9EEA/QfNkFvYP/2eZgXZbxM7wNAWiMtLDOByFZHA0a3V8 WcdWcNq8eifxaXqVwR2OlByRgLNkhm0B5WB2le/SjCTEUUPh1zhOw2HQP+yq8MH72+Ut zC0sK/j5xvT7nNKLILtDbMb9YZnKwmu553x7ylcpnT08l2yJGRukXB/pbkJe7ve8czq6 qSxA== X-Gm-Message-State: AC+VfDy1y8z6lDhaije/9BVdIXD0vMKNoAg8K+4Sbzh6IiV+D4NN57Fb fbt98zgqK3wuTyfDcfM/xUKyX9a3tV5O X-Google-Smtp-Source: ACHHUZ4zT9LUn7F28yS/jJQpZRHjLu6YwE5B/u1eMByll0FnuiZaqF3ZyXswJfnaDiLO+Qqj6Gts33K0tiQ7 X-Received: from irogers.svl.corp.google.com ([2620:15c:2d4:203:3b4e:312c:644:a642]) (user=irogers job=sendgmr) by 2002:a25:4542:0:b0:ba8:93c3:331a with SMTP id s63-20020a254542000000b00ba893c3331amr1404539yba.5.1685126056971; Fri, 26 May 2023 11:34:16 -0700 (PDT) Date: Fri, 26 May 2023 11:33:48 -0700 In-Reply-To: <20230526183401.2326121-1-irogers@google.com> Message-Id: <20230526183401.2326121-4-irogers@google.com> Mime-Version: 1.0 References: <20230526183401.2326121-1-irogers@google.com> X-Mailer: git-send-email 2.41.0.rc0.172.g3f132b7071-goog Subject: [PATCH v2 03/16] perf test x86: intel-pt-test data is immutable so mark it const From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Mark Rutland , Alexander Shishkin , Jiri Olsa , Namhyung Kim , Ian Rogers , Adrian Hunter , "Masami Hiramatsu (Google)" , "Steven Rostedt (Google)" , Ross Zwisler , Leo Yan , Tiezhu Yang , Yang Jihong , Andi Kleen , Kan Liang , Ravi Bangoria , Sean Christopherson , K Prateek Nayak , Paolo Bonzini , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" This allows the movement of 5,808 bytes from .data to .rodata. Signed-off-by: Ian Rogers --- tools/perf/arch/x86/tests/intel-pt-test.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/tools/perf/arch/x86/tests/intel-pt-test.c b/tools/perf/arch/x8= 6/tests/intel-pt-test.c index 70b7f79396b1..09d61fa736e3 100644 --- a/tools/perf/arch/x86/tests/intel-pt-test.c +++ b/tools/perf/arch/x86/tests/intel-pt-test.c @@ -22,7 +22,7 @@ * @new_ctx: expected new packet context * @ctx_unchanged: the packet context must not change */ -static struct test_data { +static const struct test_data { int len; u8 bytes[INTEL_PT_PKT_MAX_SZ]; enum intel_pt_pkt_ctx ctx; @@ -186,7 +186,7 @@ static struct test_data { {0, {0}, 0, {0, 0, 0}, 0, 0 }, }; =20 -static int dump_packet(struct intel_pt_pkt *packet, u8 *bytes, int len) +static int dump_packet(const struct intel_pt_pkt *packet, const u8 *bytes,= int len) { char desc[INTEL_PT_PKT_DESC_MAX]; int ret, i; @@ -206,14 +206,14 @@ static int dump_packet(struct intel_pt_pkt *packet, u= 8 *bytes, int len) return TEST_OK; } =20 -static void decoding_failed(struct test_data *d) +static void decoding_failed(const struct test_data *d) { pr_debug("Decoding failed!\n"); pr_debug("Decoding: "); dump_packet(&d->packet, d->bytes, d->len); } =20 -static int fail(struct test_data *d, struct intel_pt_pkt *packet, int len, +static int fail(const struct test_data *d, struct intel_pt_pkt *packet, in= t len, enum intel_pt_pkt_ctx new_ctx) { decoding_failed(d); @@ -242,7 +242,7 @@ static int fail(struct test_data *d, struct intel_pt_pk= t *packet, int len, return TEST_FAIL; } =20 -static int test_ctx_unchanged(struct test_data *d, struct intel_pt_pkt *pa= cket, +static int test_ctx_unchanged(const struct test_data *d, struct intel_pt_p= kt *packet, enum intel_pt_pkt_ctx ctx) { enum intel_pt_pkt_ctx old_ctx =3D ctx; @@ -258,7 +258,7 @@ static int test_ctx_unchanged(struct test_data *d, stru= ct intel_pt_pkt *packet, return TEST_OK; } =20 -static int test_one(struct test_data *d) +static int test_one(const struct test_data *d) { struct intel_pt_pkt packet; enum intel_pt_pkt_ctx ctx =3D d->ctx; @@ -307,7 +307,7 @@ static int test_one(struct test_data *d) */ int test__intel_pt_pkt_decoder(struct test_suite *test __maybe_unused, int= subtest __maybe_unused) { - struct test_data *d =3D data; + const struct test_data *d =3D data; int ret; =20 for (d =3D data; d->len; d++) { --=20 2.41.0.rc0.172.g3f132b7071-goog From nobody Sat Feb 7 18:20:10 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 163E5C7EE23 for ; Fri, 26 May 2023 18:34:40 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S243069AbjEZSei (ORCPT ); Fri, 26 May 2023 14:34:38 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43868 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S242608AbjEZSeZ (ORCPT ); Fri, 26 May 2023 14:34:25 -0400 Received: from mail-pl1-x649.google.com (mail-pl1-x649.google.com [IPv6:2607:f8b0:4864:20::649]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 108A6134 for ; Fri, 26 May 2023 11:34:20 -0700 (PDT) Received: by mail-pl1-x649.google.com with SMTP id d9443c01a7336-1ae7eea1d5dso8281765ad.1 for ; Fri, 26 May 2023 11:34:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1685126059; x=1687718059; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=tJmwLfRRVr3ODHBN7zQ2hUxxptOi1p92mYZclHdiN44=; b=ebkX03X6J7UXTqGhZi7TZ5tKSwDb5GlMRiV4qte2YYdvtTDfUDJZMnnIeCZRKUL3jp b1IDDwyvTFTNgUsTeKE7Vf5/Q5wOKad7bGRsNgXfHaFe5wjlDnhdIg+pqIJ7nCoLVZ43 JXLgblf3SuR+iklvswplYjUli+LWd7aABOaCTNHShXdVPRBPuWAJRFyYD5KC3zVMh4I6 HdV5u0QmREQ7ub/VfuZiKGcboRmX2BrZ+G5lhrUgz9qVUCcDWix+D1YJX3mvA7gMEJ47 yOUHoM1N67qPM3C7sEJGxzsGtk8EPOK6U2y41Hv1+YrfycJXskuXonn0tOaIkjlTZ8Jt jH0g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1685126059; x=1687718059; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=tJmwLfRRVr3ODHBN7zQ2hUxxptOi1p92mYZclHdiN44=; b=dNvQQHSiGknHRgL19Iq3SGky8GqsNjDrkeE/qXXpizhbHpKB5+NajYKRzlLDVbm7KY qBNXN9n3Ka3gnZpw/aitZjgUpoM9o/GbN2Dq0R4a5V170mic6SASUJi6nmDp+ccPbsuU FtWrq2AICBilv2rnJkbxGVEa8Pa05OyrtwgmQ7xzkCaIDQIV5ASAkQ28tVnI4Lw1Vwiu rL0fNpfaOB3sel6N7CtF/UVfmQHhOlBGTFgL2XIyLD5f0HjO+y+NbjyJkUYqfBd2OquN +luyt73Ujzy1ZIucTCDSf3SsdJBxNBzHEdC1aTPTSpbKQO512AU3W/rukREtVtzf0lHk nD7A== X-Gm-Message-State: AC+VfDyVM6H+W1bKKMluWvhYlOt2DhIVK6semWk4DGbTQue0YlQUVrz0 YxVr/Fe7/dOrmaJdiPTsg0+0EM6GqwdK X-Google-Smtp-Source: ACHHUZ66XVs9uuYY7Z8yFza1YhbpP/n+i9VBRWqOvdwvNtok78qODw9ody70xKdsTuJwZFl/tMHcBbWcFr8T X-Received: from irogers.svl.corp.google.com ([2620:15c:2d4:203:3b4e:312c:644:a642]) (user=irogers job=sendgmr) by 2002:a17:903:2683:b0:1ae:531f:366a with SMTP id jf3-20020a170903268300b001ae531f366amr691371plb.5.1685126059551; Fri, 26 May 2023 11:34:19 -0700 (PDT) Date: Fri, 26 May 2023 11:33:49 -0700 In-Reply-To: <20230526183401.2326121-1-irogers@google.com> Message-Id: <20230526183401.2326121-5-irogers@google.com> Mime-Version: 1.0 References: <20230526183401.2326121-1-irogers@google.com> X-Mailer: git-send-email 2.41.0.rc0.172.g3f132b7071-goog Subject: [PATCH v2 04/16] perf trace: Make some large static arrays const From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Mark Rutland , Alexander Shishkin , Jiri Olsa , Namhyung Kim , Ian Rogers , Adrian Hunter , "Masami Hiramatsu (Google)" , "Steven Rostedt (Google)" , Ross Zwisler , Leo Yan , Tiezhu Yang , Yang Jihong , Andi Kleen , Kan Liang , Ravi Bangoria , Sean Christopherson , K Prateek Nayak , Paolo Bonzini , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Allows the movement of 33,128 bytes from .data to .data.rel.ro. Signed-off-by: Ian Rogers --- tools/perf/builtin-trace.c | 33 +++++++++++++++++++-------------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/tools/perf/builtin-trace.c b/tools/perf/builtin-trace.c index b49d3abb1203..62c7c99a0fe4 100644 --- a/tools/perf/builtin-trace.c +++ b/tools/perf/builtin-trace.c @@ -914,7 +914,7 @@ static size_t syscall_arg__scnprintf_getrandom_flags(ch= ar *bf, size_t size, #include "trace/beauty/socket_type.c" #include "trace/beauty/waitid_options.c" =20 -static struct syscall_fmt syscall_fmts[] =3D { +static const struct syscall_fmt syscall_fmts[] =3D { { .name =3D "access", .arg =3D { [1] =3D { .scnprintf =3D SCA_ACCMODE, /* mode */ }, }, }, { .name =3D "arch_prctl", @@ -1176,18 +1176,21 @@ static int syscall_fmt__cmp(const void *name, const= void *fmtp) return strcmp(name, fmt->name); } =20 -static struct syscall_fmt *__syscall_fmt__find(struct syscall_fmt *fmts, c= onst int nmemb, const char *name) +static const struct syscall_fmt *__syscall_fmt__find(const struct syscall_= fmt *fmts, + const int nmemb, + const char *name) { return bsearch(name, fmts, nmemb, sizeof(struct syscall_fmt), syscall_fmt= __cmp); } =20 -static struct syscall_fmt *syscall_fmt__find(const char *name) +static const struct syscall_fmt *syscall_fmt__find(const char *name) { const int nmemb =3D ARRAY_SIZE(syscall_fmts); return __syscall_fmt__find(syscall_fmts, nmemb, name); } =20 -static struct syscall_fmt *__syscall_fmt__find_by_alias(struct syscall_fmt= *fmts, const int nmemb, const char *alias) +static const struct syscall_fmt *__syscall_fmt__find_by_alias(const struct= syscall_fmt *fmts, + const int nmemb, const char *alias) { int i; =20 @@ -1199,7 +1202,7 @@ static struct syscall_fmt *__syscall_fmt__find_by_ali= as(struct syscall_fmt *fmts return NULL; } =20 -static struct syscall_fmt *syscall_fmt__find_by_alias(const char *alias) +static const struct syscall_fmt *syscall_fmt__find_by_alias(const char *al= ias) { const int nmemb =3D ARRAY_SIZE(syscall_fmts); return __syscall_fmt__find_by_alias(syscall_fmts, nmemb, alias); @@ -1224,7 +1227,7 @@ struct syscall { bool nonexistent; struct tep_format_field *args; const char *name; - struct syscall_fmt *fmt; + const struct syscall_fmt *fmt; struct syscall_arg_fmt *arg_fmt; }; =20 @@ -1673,7 +1676,7 @@ static int syscall__alloc_arg_fmts(struct syscall *sc= , int nr_args) return 0; } =20 -static struct syscall_arg_fmt syscall_arg_fmts__by_name[] =3D { +static const struct syscall_arg_fmt syscall_arg_fmts__by_name[] =3D { { .name =3D "msr", .scnprintf =3D SCA_X86_MSR, .strtoul =3D STUL_X86_MS= R, }, { .name =3D "vector", .scnprintf =3D SCA_X86_IRQ_VECTORS, .strtoul =3D ST= UL_X86_IRQ_VECTORS, }, }; @@ -1684,13 +1687,14 @@ static int syscall_arg_fmt__cmp(const void *name, c= onst void *fmtp) return strcmp(name, fmt->name); } =20 -static struct syscall_arg_fmt * -__syscall_arg_fmt__find_by_name(struct syscall_arg_fmt *fmts, const int nm= emb, const char *name) +static const struct syscall_arg_fmt * +__syscall_arg_fmt__find_by_name(const struct syscall_arg_fmt *fmts, const = int nmemb, + const char *name) { return bsearch(name, fmts, nmemb, sizeof(struct syscall_arg_fmt), s= yscall_arg_fmt__cmp); } =20 -static struct syscall_arg_fmt *syscall_arg_fmt__find_by_name(const char *n= ame) +static const struct syscall_arg_fmt *syscall_arg_fmt__find_by_name(const c= har *name) { const int nmemb =3D ARRAY_SIZE(syscall_arg_fmts__by_name); return __syscall_arg_fmt__find_by_name(syscall_arg_fmts__by_name, n= memb, name); @@ -1735,8 +1739,9 @@ syscall_arg_fmt__init_array(struct syscall_arg_fmt *a= rg, struct tep_format_field * 7 unsigned long */ arg->scnprintf =3D SCA_FD; - } else { - struct syscall_arg_fmt *fmt =3D syscall_arg_fmt__find_by_name(field->na= me); + } else { + const struct syscall_arg_fmt *fmt =3D + syscall_arg_fmt__find_by_name(field->name); =20 if (fmt) { arg->scnprintf =3D fmt->scnprintf; @@ -4458,7 +4463,7 @@ static void evsel__set_syscall_arg_fmt(struct evsel *= evsel, const char *name) struct syscall_arg_fmt *fmt =3D evsel__syscall_arg_fmt(evsel); =20 if (fmt) { - struct syscall_fmt *scfmt =3D syscall_fmt__find(name); + const struct syscall_fmt *scfmt =3D syscall_fmt__find(name); =20 if (scfmt) { int skip =3D 0; @@ -4525,7 +4530,7 @@ static int trace__parse_events_option(const struct op= tion *opt, const char *str, int len =3D strlen(str) + 1, err =3D -1, list, idx; char *strace_groups_dir =3D system_path(STRACE_GROUPS_DIR); char group_name[PATH_MAX]; - struct syscall_fmt *fmt; + const struct syscall_fmt *fmt; =20 if (strace_groups_dir =3D=3D NULL) return -1; --=20 2.41.0.rc0.172.g3f132b7071-goog From nobody Sat Feb 7 18:20:10 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 3B57BC77B7A for ; Fri, 26 May 2023 18:34:43 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S243236AbjEZSem (ORCPT ); Fri, 26 May 2023 14:34:42 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43798 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S242657AbjEZSe0 (ORCPT ); Fri, 26 May 2023 14:34:26 -0400 Received: from mail-yw1-x114a.google.com (mail-yw1-x114a.google.com [IPv6:2607:f8b0:4864:20::114a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id EBDD219C for ; Fri, 26 May 2023 11:34:22 -0700 (PDT) Received: by mail-yw1-x114a.google.com with SMTP id 00721157ae682-565a33c35b1so21707007b3.0 for ; Fri, 26 May 2023 11:34:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1685126062; x=1687718062; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=ckGeA02WLHJLNJCbS//eOlt+uaDLHYtNJ6XZaQ87+eE=; b=HdWqwyuKOVJVYrotCjPhszbemVJLi+mulQLG1Rr3MyUcSxnCXsyivwS1vkdp2dk4XD cuJD+Vabjl4NY8GJbCjtdr2RyJKXZw8zCHUzjwDKWxgQnAYt1/HTsYA3MCs5v0CynoQQ kaVyGCIB+y8tITQL4uCcxP1C9j3zaWZPqrOYALRHl8S/y9pv7xChGPwttEyO7bHDtLJc bN0UtC5pNviOqvyYioK7oa7InzYbxLxs2VprHRkU8MuxXMybDqMJIXThzpulMcGRtma3 d8A6CymEbkJa6AeLBHBC7w1tlwQSAyo5cRI9CWONULj+XyRWl0iG1rYNuZnNFfkm8nVU 3lEQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1685126062; x=1687718062; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=ckGeA02WLHJLNJCbS//eOlt+uaDLHYtNJ6XZaQ87+eE=; b=V401t8Uj6AVA/eg5Wm+NnTwI0ucrA2GSkKU4zwC4gycKO5O6QlsF1A7oloYmpZtOVT q4ZY8Ds/Ca/0m54QfchhmzjnA693Q83hA4Me+UQ89ldaeJINZyvebUyyQIl3xl8CwjxA FbFXD0cfGZS8iEZ0KtG/3xqEqxlSqGNXbWIk7DmwPrtcJRbjS/O3L6U8y8JKY9uglqsc IVU4V6hbaFMWozNdsufHQM9REMHqzh/3IJIUVxEM7DKi9XF+g9QWOeWFlJbwNGBJDXfg IV5MEEf6DmJT+42k8A/HfKH8C7QfklrZjclJPssas6U9QlAlwhKOCutiJF0iaUZSDD0H hx3g== X-Gm-Message-State: AC+VfDxnC8eGZZuMDrJI/tmL49IZptUo+4WDjhEDIapnFy6/jvulaI5B vjDeX7iOMwV7WtaneZvP/HIa2yanVXye X-Google-Smtp-Source: ACHHUZ7yN2+swTi3T9v5RlylUFEatgWcWb8N2nwtoaWCzGgKIStPV1yVDi3jmOaNuUF/vZIT5CjO8R5HyO+v X-Received: from irogers.svl.corp.google.com ([2620:15c:2d4:203:3b4e:312c:644:a642]) (user=irogers job=sendgmr) by 2002:a81:4309:0:b0:561:987e:d22 with SMTP id q9-20020a814309000000b00561987e0d22mr1565637ywa.1.1685126062157; Fri, 26 May 2023 11:34:22 -0700 (PDT) Date: Fri, 26 May 2023 11:33:50 -0700 In-Reply-To: <20230526183401.2326121-1-irogers@google.com> Message-Id: <20230526183401.2326121-6-irogers@google.com> Mime-Version: 1.0 References: <20230526183401.2326121-1-irogers@google.com> X-Mailer: git-send-email 2.41.0.rc0.172.g3f132b7071-goog Subject: [PATCH v2 05/16] perf trace beauty: Make MSR arrays const From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Mark Rutland , Alexander Shishkin , Jiri Olsa , Namhyung Kim , Ian Rogers , Adrian Hunter , "Masami Hiramatsu (Google)" , "Steven Rostedt (Google)" , Ross Zwisler , Leo Yan , Tiezhu Yang , Yang Jihong , Andi Kleen , Kan Liang , Ravi Bangoria , Sean Christopherson , K Prateek Nayak , Paolo Bonzini , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Allows the movement of 46,072 bytes from .data to .data.rel.ro. Signed-off-by: Ian Rogers --- tools/perf/trace/beauty/beauty.h | 2 +- tools/perf/trace/beauty/tracepoints/x86_msr.sh | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/tools/perf/trace/beauty/beauty.h b/tools/perf/trace/beauty/bea= uty.h index 4c59edddd6a8..3d12bf0f6d07 100644 --- a/tools/perf/trace/beauty/beauty.h +++ b/tools/perf/trace/beauty/beauty.h @@ -11,7 +11,7 @@ struct strarray { u64 offset; int nr_entries; const char *prefix; - const char **entries; + const char * const *entries; }; =20 #define DEFINE_STRARRAY(array, _prefix) struct strarray strarray__##array = =3D { \ diff --git a/tools/perf/trace/beauty/tracepoints/x86_msr.sh b/tools/perf/tr= ace/beauty/tracepoints/x86_msr.sh index 0078689963e0..fa3c4418e856 100755 --- a/tools/perf/trace/beauty/tracepoints/x86_msr.sh +++ b/tools/perf/trace/beauty/tracepoints/x86_msr.sh @@ -13,7 +13,7 @@ x86_msr_index=3D${arch_x86_header_dir}/msr-index.h # Just the ones starting with 0x00000 so as to have a simple # array. =20 -printf "static const char *x86_MSRs[] =3D {\n" +printf "static const char * const x86_MSRs[] =3D {\n" regex=3D'^[[:space:]]*#[[:space:]]*define[[:space:]]+MSR_([[:alnum:]][[:al= num:]_]+)[[:space:]]+(0x00000[[:xdigit:]]+)[[:space:]]*.*' grep -E $regex ${x86_msr_index} | grep -E -v 'MSR_(ATOM|P[46]|IA32_(TSC_DE= ADLINE|UCODE_REV)|IDT_FCR4)' | \ sed -r "s/$regex/\2 \1/g" | sort -n | \ @@ -24,7 +24,7 @@ printf "};\n\n" regex=3D'^[[:space:]]*#[[:space:]]*define[[:space:]]+MSR_([[:alnum:]][[:al= num:]_]+)[[:space:]]+(0xc0000[[:xdigit:]]+)[[:space:]]*.*' printf "#define x86_64_specific_MSRs_offset " grep -E $regex ${x86_msr_index} | sed -r "s/$regex/\2/g" | sort -n | head = -1 -printf "static const char *x86_64_specific_MSRs[] =3D {\n" +printf "static const char * const x86_64_specific_MSRs[] =3D {\n" grep -E $regex ${x86_msr_index} | \ sed -r "s/$regex/\2 \1/g" | grep -E -vw 'K6_WHCR' | sort -n | \ xargs printf "\t[%s - x86_64_specific_MSRs_offset] =3D \"%s\",\n" @@ -33,7 +33,7 @@ printf "};\n\n" regex=3D'^[[:space:]]*#[[:space:]]*define[[:space:]]+MSR_([[:alnum:]][[:al= num:]_]+)[[:space:]]+(0xc0010[[:xdigit:]]+)[[:space:]]*.*' printf "#define x86_AMD_V_KVM_MSRs_offset " grep -E $regex ${x86_msr_index} | sed -r "s/$regex/\2/g" | sort -n | head = -1 -printf "static const char *x86_AMD_V_KVM_MSRs[] =3D {\n" +printf "static const char * const x86_AMD_V_KVM_MSRs[] =3D {\n" grep -E $regex ${x86_msr_index} | \ sed -r "s/$regex/\2 \1/g" | sort -n | \ xargs printf "\t[%s - x86_AMD_V_KVM_MSRs_offset] =3D \"%s\",\n" --=20 2.41.0.rc0.172.g3f132b7071-goog From nobody Sat Feb 7 18:20:10 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id DBF5AC7EE2E for ; Fri, 26 May 2023 18:34:46 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S242608AbjEZSeo (ORCPT ); Fri, 26 May 2023 14:34:44 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43918 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S242775AbjEZSe1 (ORCPT ); Fri, 26 May 2023 14:34:27 -0400 Received: from mail-yb1-xb49.google.com (mail-yb1-xb49.google.com [IPv6:2607:f8b0:4864:20::b49]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 55C3CE4A for ; Fri, 26 May 2023 11:34:25 -0700 (PDT) Received: by mail-yb1-xb49.google.com with SMTP id 3f1490d57ef6-ba81b24b8a4so1403314276.2 for ; Fri, 26 May 2023 11:34:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1685126064; x=1687718064; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=IwZgXsbfM/yRQGwLSKe9ovUWpmwV9Y2ViG2ttFwDyVc=; b=P3WUQOpO/2OmEOWL4v68PeX96YDZimXT3rksqKLMrmTrK8MQxkjC2umm8fvsEWccSJ /+3D7ziJhJVmsGLBZHd2l5tRIO7p8REM6v+m9EM4FaGNzpkanaUiwFR4n2fGmbR3TqZj CyTVWt5TbJacZkoXPvlNL/2I5nV7E8WwbiLVUNRcc5sBWUoNrcZ2JbzdxgJCWl29r9R2 tPDlq6QcYaCLHgBUZgKsG/W2uJYhOn1wo7q/9aCVZT2CPNgk1dSV5O2RtRjiuXwpMc8t sHTHcZHRs2MUtlMChsPH3SQmiyrViokTjF8+5FMMzdXPJjJ/eprAcM7as6bwEjmHpCpx Fmog== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1685126064; x=1687718064; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=IwZgXsbfM/yRQGwLSKe9ovUWpmwV9Y2ViG2ttFwDyVc=; b=jkJrBjUOcJvn/9bPsYZEdwyYvg7+/AIfOwt6ii0HS6uZWSr6bcnxq4mBx1Ze1exJuG Im3TPw3x7y7VFz0E5wqvgUMCs7ZU+n+iGRTZZmRT87O5nN3q0OUrDRBh7HsfDaeQynfQ 8hD/XIPtTsi2fgVV2U0TIzMXyESy+/m1DWtHFJb+EWJtw54xH90VQ7v4K39h8klE9Vg2 SFm0SamOw4mWoMel6hd6xBLCxv0FFtaBEi2f/x2jRA+3fF762RQsvgIQG2hogLaDwDlC N2+Dl+u2r/ikSO29drMYdiPBFheaOQ7f7IdUhBelHuH8cRhURQ8lLj12KecGyBqhQgDI iYUg== X-Gm-Message-State: AC+VfDw2T6lWQIDaeBcK/IXAtind2x5ml8/VpW89zjA3rKnUjNb9CTfm vgdbUn8m+SvBZPP5QRR3qC8Pp4vCg1k/ X-Google-Smtp-Source: ACHHUZ7oC0kj5UVzgKLE84lwKOIsiFYUI4ZOIiTEKnYoI6Wvcg5eFnNtZbjn2Lxucx3jJfRhp27zzIBPDbe6 X-Received: from irogers.svl.corp.google.com ([2620:15c:2d4:203:3b4e:312c:644:a642]) (user=irogers job=sendgmr) by 2002:a5b:70e:0:b0:ba8:97f8:620f with SMTP id g14-20020a5b070e000000b00ba897f8620fmr1379099ybq.8.1685126064565; Fri, 26 May 2023 11:34:24 -0700 (PDT) Date: Fri, 26 May 2023 11:33:51 -0700 In-Reply-To: <20230526183401.2326121-1-irogers@google.com> Message-Id: <20230526183401.2326121-7-irogers@google.com> Mime-Version: 1.0 References: <20230526183401.2326121-1-irogers@google.com> X-Mailer: git-send-email 2.41.0.rc0.172.g3f132b7071-goog Subject: [PATCH v2 06/16] tools api fs: Avoid large static PATH_MAX arrays From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Mark Rutland , Alexander Shishkin , Jiri Olsa , Namhyung Kim , Ian Rogers , Adrian Hunter , "Masami Hiramatsu (Google)" , "Steven Rostedt (Google)" , Ross Zwisler , Leo Yan , Tiezhu Yang , Yang Jihong , Andi Kleen , Kan Liang , Ravi Bangoria , Sean Christopherson , K Prateek Nayak , Paolo Bonzini , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Change struct fs to have a pointer to a dynamically allocated array rather than an array. This reduces the size of fs__entries from 24,768 bytes to 240 bytes. Read paths into a stack allocated array and strdup. Fix off-by-1 fscanf %s in fs__read_mounts caught by address sanitizer. Signed-off-by: Ian Rogers --- tools/lib/api/fs/fs.c | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/tools/lib/api/fs/fs.c b/tools/lib/api/fs/fs.c index 82f53d81a7a7..22d34a0be8b4 100644 --- a/tools/lib/api/fs/fs.c +++ b/tools/lib/api/fs/fs.c @@ -88,7 +88,7 @@ static const char * const bpf_fs__known_mountpoints[] =3D= { struct fs { const char *name; const char * const *mounts; - char path[PATH_MAX]; + char *path; bool found; bool checked; long magic; @@ -151,17 +151,23 @@ static bool fs__read_mounts(struct fs *fs) bool found =3D false; char type[100]; FILE *fp; + char path[PATH_MAX + 1]; =20 fp =3D fopen("/proc/mounts", "r"); if (fp =3D=3D NULL) - return NULL; + return false; =20 while (!found && fscanf(fp, "%*s %" STR(PATH_MAX) "s %99s %*s %*d %*d\n", - fs->path, type) =3D=3D 2) { + path, type) =3D=3D 2) { =20 - if (strcmp(type, fs->name) =3D=3D 0) + if (strcmp(type, fs->name) =3D=3D 0) { + free(fs->path); + fs->path =3D strdup(path); + if (!fs->path) + return false; found =3D true; + } } =20 fclose(fp); @@ -188,8 +194,11 @@ static bool fs__check_mounts(struct fs *fs) ptr =3D fs->mounts; while (*ptr) { if (fs__valid_mount(*ptr, fs->magic) =3D=3D 0) { + free(fs->path); + fs->path =3D strdup(*ptr); + if (!fs->path) + return false; fs->found =3D true; - strcpy(fs->path, *ptr); return true; } ptr++; @@ -227,10 +236,12 @@ static bool fs__env_override(struct fs *fs) if (!override_path) return false; =20 + free(fs->path); + fs->path =3D strdup(override_path); + if (!fs->path) + return false; fs->found =3D true; fs->checked =3D true; - strncpy(fs->path, override_path, sizeof(fs->path) - 1); - fs->path[sizeof(fs->path) - 1] =3D '\0'; return true; } =20 --=20 2.41.0.rc0.172.g3f132b7071-goog From nobody Sat Feb 7 18:20:10 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 15B83C7EE23 for ; Fri, 26 May 2023 18:34:50 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S243248AbjEZSes (ORCPT ); Fri, 26 May 2023 14:34:48 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44078 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S242970AbjEZSee (ORCPT ); Fri, 26 May 2023 14:34:34 -0400 Received: from mail-yw1-x114a.google.com (mail-yw1-x114a.google.com [IPv6:2607:f8b0:4864:20::114a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 07557E50 for ; Fri, 26 May 2023 11:34:28 -0700 (PDT) Received: by mail-yw1-x114a.google.com with SMTP id 00721157ae682-565b499da27so17873937b3.1 for ; Fri, 26 May 2023 11:34:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1685126067; x=1687718067; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=mg4J8yOoFJqVXDcfLSzXxOpYuu0uUpLyOopzOmgG+GA=; b=n1dWVzJumYPqquf3AtFTkMqsKMhFYFXmNs0t2HnKL88hQA4v6Ibxm+TCiKhbYWdRwh VmG103abbF9HUrkRFP/vKK/kbdOSodBmqlC/EuFl/HzlUDqUHhun2s/+HWSoreWy7ggn QhKdbgzhVOIHp2eOdtgkqOQSqb4wC+nJU4hQsiA1K6N3e3Ik1DcYfRLSvPlLjEPSHtG0 um0IAylAqVQph3/kzRTsShYuehHswG19T8zyZEHPcaoqF69EGMf018r1xF6TFq/J2zrZ Huac43w3F1sFy+rW6DGUO3KmPbJ9cIsZ6rQRiSY9g+MwUGepIfCWIrNP04jXMJ8alMpA iuWQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1685126067; x=1687718067; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=mg4J8yOoFJqVXDcfLSzXxOpYuu0uUpLyOopzOmgG+GA=; b=C5mk8FOE82TyNojJalQtXtv2owNrubbCNz9CdfAXTwVea3PPUGTzjJYBJQhjqyvYW2 9Z3fyStspA1jRCAAZSac4A/jAo6O7m0cyx4KLn7VqEfT5sKhLhwOrcm9aFO6jEezBis6 2Bsf0/WXNaSjHyCbEn2AWSuGiO4LlMo0jsvJ29cLllaYaJDPoXPxfpyR/Bu3R2KH23wU aOQBOhtryS5VyEgUWeWgmGMlLOk+tMv4cWXudaP747E6ABv1NRa8vLzWqJfmYDTQKnxG bDspFhvo7lc2gTXhyB7lilsDM3E3CPgL7I2x8KPzmObi2OaECCqttLifCpfqtpxAlAIL aApA== X-Gm-Message-State: AC+VfDxaJJ/s6Mo1pFPo582R9YQTCZ2Js1NvK/vGZRURO1UFQIX5nyLR wcXz0Vjckwaev3RzcmiBh/EdOl6bi5q0 X-Google-Smtp-Source: ACHHUZ5IYodYw9VMjSfCF3zdkFtLGuakHr3lV7rTHVBH3QX87hgO8plHJE1SMhq5VhGDP18hgd7Rw1q/vZcu X-Received: from irogers.svl.corp.google.com ([2620:15c:2d4:203:3b4e:312c:644:a642]) (user=irogers job=sendgmr) by 2002:a05:690c:82c:b0:561:4723:2088 with SMTP id by12-20020a05690c082c00b0056147232088mr2535720ywb.4.1685126067272; Fri, 26 May 2023 11:34:27 -0700 (PDT) Date: Fri, 26 May 2023 11:33:52 -0700 In-Reply-To: <20230526183401.2326121-1-irogers@google.com> Message-Id: <20230526183401.2326121-8-irogers@google.com> Mime-Version: 1.0 References: <20230526183401.2326121-1-irogers@google.com> X-Mailer: git-send-email 2.41.0.rc0.172.g3f132b7071-goog Subject: [PATCH v2 07/16] tools lib api fs tracing_path: Remove two unused MAX_PATH paths From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Mark Rutland , Alexander Shishkin , Jiri Olsa , Namhyung Kim , Ian Rogers , Adrian Hunter , "Masami Hiramatsu (Google)" , "Steven Rostedt (Google)" , Ross Zwisler , Leo Yan , Tiezhu Yang , Yang Jihong , Andi Kleen , Kan Liang , Ravi Bangoria , Sean Christopherson , K Prateek Nayak , Paolo Bonzini , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" tracing_mnt was set but never written. tracing_events_path was set and read on errors paths, but its value is exactly tracing_path with a "/events" appended, so we can derive the value in the error paths. There appears to have been a missing "/" when tracing_events_path was initialized. Signed-off-by: Ian Rogers --- tools/lib/api/fs/tracing_path.c | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/tools/lib/api/fs/tracing_path.c b/tools/lib/api/fs/tracing_pat= h.c index 7ba3e81274e8..30745f35d0d2 100644 --- a/tools/lib/api/fs/tracing_path.c +++ b/tools/lib/api/fs/tracing_path.c @@ -13,17 +13,12 @@ =20 #include "tracing_path.h" =20 -static char tracing_mnt[PATH_MAX] =3D "/sys/kernel/debug"; static char tracing_path[PATH_MAX] =3D "/sys/kernel/tracing"; -static char tracing_events_path[PATH_MAX] =3D "/sys/kernel/tracing/events"; =20 static void __tracing_path_set(const char *tracing, const char *mountpoint) { - snprintf(tracing_mnt, sizeof(tracing_mnt), "%s", mountpoint); snprintf(tracing_path, sizeof(tracing_path), "%s/%s", mountpoint, tracing); - snprintf(tracing_events_path, sizeof(tracing_events_path), "%s/%s%s", - mountpoint, tracing, "events"); } =20 static const char *tracing_path_tracefs_mount(void) @@ -149,15 +144,15 @@ int tracing_path__strerror_open_tp(int err, char *buf= , size_t size, /* sdt markers */ if (!strncmp(filename, "sdt_", 4)) { snprintf(buf, size, - "Error:\tFile %s/%s not found.\n" + "Error:\tFile %s/events/%s not found.\n" "Hint:\tSDT event cannot be directly recorded on.\n" "\tPlease first use 'perf probe %s:%s' before recording it.\n", - tracing_events_path, filename, sys, name); + tracing_path, filename, sys, name); } else { snprintf(buf, size, - "Error:\tFile %s/%s not found.\n" + "Error:\tFile %s/events/%s not found.\n" "Hint:\tPerhaps this kernel misses some CONFIG_ setting to enable th= is feature?.\n", - tracing_events_path, filename); + tracing_path, filename); } break; } @@ -169,9 +164,9 @@ int tracing_path__strerror_open_tp(int err, char *buf, = size_t size, break; case EACCES: { snprintf(buf, size, - "Error:\tNo permissions to read %s/%s\n" + "Error:\tNo permissions to read %s/events/%s\n" "Hint:\tTry 'sudo mount -o remount,mode=3D755 %s'\n", - tracing_events_path, filename, tracing_path_mount()); + tracing_path, filename, tracing_path_mount()); } break; default: --=20 2.41.0.rc0.172.g3f132b7071-goog From nobody Sat Feb 7 18:20:10 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 94318C7EE23 for ; Fri, 26 May 2023 18:35:01 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S243178AbjEZSev (ORCPT ); Fri, 26 May 2023 14:34:51 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43824 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S243070AbjEZSei (ORCPT ); Fri, 26 May 2023 14:34:38 -0400 Received: from mail-yb1-xb4a.google.com (mail-yb1-xb4a.google.com [IPv6:2607:f8b0:4864:20::b4a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3E535E5D for ; Fri, 26 May 2023 11:34:30 -0700 (PDT) Received: by mail-yb1-xb4a.google.com with SMTP id 3f1490d57ef6-ba8337a578dso1447732276.1 for ; Fri, 26 May 2023 11:34:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1685126069; x=1687718069; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=7dgS4bW/LPPYZcMd883xwHFW9R70V4XWRzq37gFrjkM=; b=bgnX3tHvnxBh+hNk28qU6inGr0/y2LJhEfbvcuQRohYwnnrlKxVB7iy2dE+dywqium teJ3G3jfu+qHbKplXF98m6HDRich3Y47wL1LBNy0KNtgpPMzNVm2vYcqoIeiAtkfIqpn 2vJHV7PATwxSvidtCYUdHxCU4kQ/N+UEayfSDWtpigqFt/hsIoilKZ8grHFF4StxBNQZ P7vxEAnbfU6zt91OfQxdTR/e022OJx0ufl4/sj730SU0HyFtMDabKZDTap02I5GiX3XC kTVjSCUa9amEggALYlenAuuzoo/FEDFeA1WMYcTcqQh7l0ALVZ6Ib1MSpQ9RviHuBVM4 ylGg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1685126069; x=1687718069; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=7dgS4bW/LPPYZcMd883xwHFW9R70V4XWRzq37gFrjkM=; b=VF3ugxh6e7nysqhP5tNkZT5JwLPWIv5MbaEiq7iUiSWGnemJgFOX74ITqbJlAQjnDv nRvXr26ncSO/yUGSivPKIE5G0Oc17PuaTzcucZXo00hsuwjdEWI6rixoo1p723BJ4wsN 26dNoOvAacDKLFZeLk5cbZ+YbePZ4n9pSHSfrF4aNT+TCJdjh9kj7gz1v/nYWoXrH5oP 6DTvwAb3Wa/cKCKO7wpyZQWgp9UkUdWHS0h0KHdwYUd8/XQjy/SerrSTEEUi+XL9NjVY RGpV5gg5ebz8mRBG7JBRLCssm0wE5m1OHDVVQe5rhqS2GckB1qmTHFL/P+v6HQQ79c+I pCYw== X-Gm-Message-State: AC+VfDyMXtGAuZ5VWlmVw77KpxSVwka7RML/3AGSshCtDli0hWqKJd80 AA+RBKYG3cDFnIaztdMia4YvRO9uow5N X-Google-Smtp-Source: ACHHUZ7DPPPyFo87kLo9HcNC1/dJJRnRDA3Hd8hWgyFbUgHKQeXag/jlFPxc7zz4+KPLF7Fzu7/gs3i8NoA2 X-Received: from irogers.svl.corp.google.com ([2620:15c:2d4:203:3b4e:312c:644:a642]) (user=irogers job=sendgmr) by 2002:a05:6902:4ef:b0:ba8:2e69:9e06 with SMTP id w15-20020a05690204ef00b00ba82e699e06mr1430153ybs.1.1685126069227; Fri, 26 May 2023 11:34:29 -0700 (PDT) Date: Fri, 26 May 2023 11:33:53 -0700 In-Reply-To: <20230526183401.2326121-1-irogers@google.com> Message-Id: <20230526183401.2326121-9-irogers@google.com> Mime-Version: 1.0 References: <20230526183401.2326121-1-irogers@google.com> X-Mailer: git-send-email 2.41.0.rc0.172.g3f132b7071-goog Subject: [PATCH v2 08/16] perf daemon: Dynamically allocate path to perf From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Mark Rutland , Alexander Shishkin , Jiri Olsa , Namhyung Kim , Ian Rogers , Adrian Hunter , "Masami Hiramatsu (Google)" , "Steven Rostedt (Google)" , Ross Zwisler , Leo Yan , Tiezhu Yang , Yang Jihong , Andi Kleen , Kan Liang , Ravi Bangoria , Sean Christopherson , K Prateek Nayak , Paolo Bonzini , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Avoid a PATH_MAX array in __daemon (the .data section) by dynamically allocating the memory. Signed-off-by: Ian Rogers --- tools/perf/builtin-daemon.c | 44 +++++++++++++++++++++++-------------- 1 file changed, 28 insertions(+), 16 deletions(-) diff --git a/tools/perf/builtin-daemon.c b/tools/perf/builtin-daemon.c index 34cbe3e959aa..f5674d824a40 100644 --- a/tools/perf/builtin-daemon.c +++ b/tools/perf/builtin-daemon.c @@ -90,7 +90,7 @@ struct daemon { char *base; struct list_head sessions; FILE *out; - char perf[PATH_MAX]; + char *perf; int signal_fd; time_t start; }; @@ -1490,6 +1490,14 @@ static int __cmd_ping(struct daemon *daemon, struct = option parent_options[], return send_cmd(daemon, &cmd); } =20 +static char *alloc_perf_exe_path(void) +{ + char path[PATH_MAX]; + + perf_exe(path, sizeof(path)); + return strdup(path); +} + int cmd_daemon(int argc, const char **argv) { struct option daemon_options[] =3D { @@ -1502,8 +1510,12 @@ int cmd_daemon(int argc, const char **argv) "field separator", "print counts with custom separator", ","), OPT_END() }; + int ret =3D -1; + + __daemon.perf =3D alloc_perf_exe_path(); + if (!__daemon.perf) + return -ENOMEM; =20 - perf_exe(__daemon.perf, sizeof(__daemon.perf)); __daemon.out =3D stdout; =20 argc =3D parse_options(argc, argv, daemon_options, daemon_usage, @@ -1511,22 +1523,22 @@ int cmd_daemon(int argc, const char **argv) =20 if (argc) { if (!strcmp(argv[0], "start")) - return __cmd_start(&__daemon, daemon_options, argc, argv); + ret =3D __cmd_start(&__daemon, daemon_options, argc, argv); if (!strcmp(argv[0], "signal")) - return __cmd_signal(&__daemon, daemon_options, argc, argv); + ret =3D __cmd_signal(&__daemon, daemon_options, argc, argv); else if (!strcmp(argv[0], "stop")) - return __cmd_stop(&__daemon, daemon_options, argc, argv); + ret =3D __cmd_stop(&__daemon, daemon_options, argc, argv); else if (!strcmp(argv[0], "ping")) - return __cmd_ping(&__daemon, daemon_options, argc, argv); - - pr_err("failed: unknown command '%s'\n", argv[0]); - return -1; - } - - if (setup_config(&__daemon)) { - pr_err("failed: config not found\n"); - return -1; + ret =3D __cmd_ping(&__daemon, daemon_options, argc, argv); + else + pr_err("failed: unknown command '%s'\n", argv[0]); + } else { + ret =3D setup_config(&__daemon); + if (ret) + pr_err("failed: config not found\n"); + else + ret =3D send_cmd_list(&__daemon); } - - return send_cmd_list(&__daemon); + zfree(&__daemon.perf); + return ret; } --=20 2.41.0.rc0.172.g3f132b7071-goog From nobody Sat Feb 7 18:20:10 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 3E5CDC7EE2F for ; Fri, 26 May 2023 18:35:07 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S242609AbjEZSfF (ORCPT ); Fri, 26 May 2023 14:35:05 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43878 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S243205AbjEZSek (ORCPT ); Fri, 26 May 2023 14:34:40 -0400 Received: from mail-yb1-xb4a.google.com (mail-yb1-xb4a.google.com [IPv6:2607:f8b0:4864:20::b4a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 77444E6F for ; Fri, 26 May 2023 11:34:32 -0700 (PDT) Received: by mail-yb1-xb4a.google.com with SMTP id 3f1490d57ef6-babb76a9831so2254712276.2 for ; Fri, 26 May 2023 11:34:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1685126071; x=1687718071; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=xkY/jlHU8D/QUvZsW65703DMiaAstyzw0n4JGn1I7vM=; b=MoGo2A46Zq0pgRI5fFfL3G0sZBkuPf6Gf6b+p740I+LJYvieH3dq3QaVNjLRDDNhI1 Yn9ltXeJuUEOhVtEquQdMsqzbUhRoJUGQtMqvA5bi2twF/0wV4+U6Ti2RnEUHasDnT3L Z0Y9te2LZtpfdHrMnSf6cnEr9VAdFSIcAw3aoF2AN8VTTd7jqEvHIBvwzAFyGsFi6CbW VSEd6JZrFDi0Q6+n4JnqrJ2B9WGImjQab1awVAfiGL/RJBuy8dgWdY4jpgQN2K2N3BU9 5TxdIBZypd2GK+vsDNuCUZtFUukdvtaq4DmE/lnqx0XiUwIugV6UzE2XCSxKURn5s76W FG0w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1685126071; x=1687718071; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=xkY/jlHU8D/QUvZsW65703DMiaAstyzw0n4JGn1I7vM=; b=Df1D9OfQwX6lkdWNQJqRiOZrgX2RxjiCnxRD5sKD27xkFaZL7putQyZDaiBLY0upVt TX7nIX7ZeP3NMp4mzlj5yxSc2ALuxNS2vFAJxvlf0mDqNXGtwh6fzSrTeRcr+GJgvoMq pA1dftISodX4UQHp24GTom1ZsBT3S4fJzTZ3ysGHvFtGA17N3DYmBRuWz3qdIWh5PF5q TOwY2Tl5k4WRQ13tGGxFp2n7rj6UsJXzhvINZSdCzDpd0DIA94UEDHTC+A0LyM+JrLes iKvaYGUKefW1j8iA40tWJSfZ8xbeGKGUtpN5hmuP1O+zL34WqQ7Ezz3MG447EhclfWo5 zCHA== X-Gm-Message-State: AC+VfDyIQdRRGZoiziq78EdSaPL3ehSdd05ECW5TxgiopIpZdiXLr9DN NDD5uDg70GfWygdLO37axq7soszGHQas X-Google-Smtp-Source: ACHHUZ46CyhIFSMkGhxWip07ySTruzaJfa/BntRi5T2gFcKfTHUsjqalbBDoLuSWZ0sSotcB6zsIWcXS+ISA X-Received: from irogers.svl.corp.google.com ([2620:15c:2d4:203:3b4e:312c:644:a642]) (user=irogers job=sendgmr) by 2002:a25:fc1c:0:b0:bac:7086:c9b2 with SMTP id v28-20020a25fc1c000000b00bac7086c9b2mr992109ybd.12.1685126071162; Fri, 26 May 2023 11:34:31 -0700 (PDT) Date: Fri, 26 May 2023 11:33:54 -0700 In-Reply-To: <20230526183401.2326121-1-irogers@google.com> Message-Id: <20230526183401.2326121-10-irogers@google.com> Mime-Version: 1.0 References: <20230526183401.2326121-1-irogers@google.com> X-Mailer: git-send-email 2.41.0.rc0.172.g3f132b7071-goog Subject: [PATCH v2 09/16] perf lock: Dynamically allocate lockhash_table From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Mark Rutland , Alexander Shishkin , Jiri Olsa , Namhyung Kim , Ian Rogers , Adrian Hunter , "Masami Hiramatsu (Google)" , "Steven Rostedt (Google)" , Ross Zwisler , Leo Yan , Tiezhu Yang , Yang Jihong , Andi Kleen , Kan Liang , Ravi Bangoria , Sean Christopherson , K Prateek Nayak , Paolo Bonzini , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" lockhash_table is 32,768bytes in .bss, make it a memory allocation so that the space is freed for non-lock perf commands. Signed-off-by: Ian Rogers --- tools/perf/builtin-lock.c | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/tools/perf/builtin-lock.c b/tools/perf/builtin-lock.c index 70b14ba5fdd5..fc8356bd6e3a 100644 --- a/tools/perf/builtin-lock.c +++ b/tools/perf/builtin-lock.c @@ -48,7 +48,7 @@ static struct target target; #define LOCKHASH_BITS 12 #define LOCKHASH_SIZE (1UL << LOCKHASH_BITS) =20 -static struct hlist_head lockhash_table[LOCKHASH_SIZE]; +static struct hlist_head *lockhash_table; =20 #define __lockhashfn(key) hash_long((unsigned long)key, LOCKHASH_BITS) #define lockhashentry(key) (lockhash_table + __lockhashfn((key))) @@ -1871,7 +1871,6 @@ static int __cmd_contention(int argc, const char **ar= gv) }; struct lock_contention con =3D { .target =3D &target, - .result =3D &lockhash_table[0], .map_nr_entries =3D bpf_map_entries, .max_stack =3D max_stack_depth, .stack_skip =3D stack_skip, @@ -1880,10 +1879,17 @@ static int __cmd_contention(int argc, const char **= argv) .owner =3D show_lock_owner, }; =20 + lockhash_table =3D calloc(LOCKHASH_SIZE, sizeof(*lockhash_table)); + if (!lockhash_table) + return -ENOMEM; + + con.result =3D &lockhash_table[0]; + session =3D perf_session__new(use_bpf ? NULL : &data, &eops); if (IS_ERR(session)) { pr_err("Initializing perf session failed\n"); - return PTR_ERR(session); + err =3D PTR_ERR(session); + goto out_delete; } =20 con.machine =3D &session->machines.host; @@ -1983,6 +1989,7 @@ static int __cmd_contention(int argc, const char **ar= gv) evlist__delete(con.evlist); lock_contention_finish(); perf_session__delete(session); + zfree(&lockhash_table); return err; } =20 @@ -2348,6 +2355,10 @@ int cmd_lock(int argc, const char **argv) unsigned int i; int rc =3D 0; =20 + lockhash_table =3D calloc(LOCKHASH_SIZE, sizeof(*lockhash_table)); + if (!lockhash_table) + return -ENOMEM; + for (i =3D 0; i < LOCKHASH_SIZE; i++) INIT_HLIST_HEAD(lockhash_table + i); =20 @@ -2369,7 +2380,7 @@ int cmd_lock(int argc, const char **argv) rc =3D __cmd_report(false); } else if (!strcmp(argv[0], "script")) { /* Aliased to 'perf script' */ - return cmd_script(argc, argv); + rc =3D cmd_script(argc, argv); } else if (!strcmp(argv[0], "info")) { if (argc) { argc =3D parse_options(argc, argv, @@ -2403,5 +2414,6 @@ int cmd_lock(int argc, const char **argv) usage_with_options(lock_usage, lock_options); } =20 + zfree(&lockhash_table); return rc; } --=20 2.41.0.rc0.172.g3f132b7071-goog From nobody Sat Feb 7 18:20:10 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 69BACC7EE23 for ; Fri, 26 May 2023 18:35:14 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S242655AbjEZSfM (ORCPT ); Fri, 26 May 2023 14:35:12 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44078 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S242863AbjEZSel (ORCPT ); Fri, 26 May 2023 14:34:41 -0400 Received: from mail-yw1-x114a.google.com (mail-yw1-x114a.google.com [IPv6:2607:f8b0:4864:20::114a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 39377134 for ; Fri, 26 May 2023 11:34:34 -0700 (PDT) Received: by mail-yw1-x114a.google.com with SMTP id 00721157ae682-564fb1018bcso26954997b3.0 for ; Fri, 26 May 2023 11:34:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1685126073; x=1687718073; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=K4mau+kNTkjearkZEwOGLqNrVUMBNYPnc3BA4EgUGCw=; b=1Px+qIzRsUdsP2fgrQLU4KStunvwa9NLpoiulRIDIQ6fNeD/JSY5sLj6lKfDw2YQNn hAhwLk2UDkapjkHomGS2RIYEXpcdCRoJxtVqr190r8nGLv9gtDUCWW7iYnKzge0yfFyX dqfcp8cYoT3G55yCvYtOMtGzKWHrSJ2qeh5zia2bexPzDYVSfeCJQxCSuMFyFldWqbq3 U7VbtyR7Hped8uRJuRelNSl+6JXi9OF/y8m4a+FINFEz1dnA5AfVU9b+mvGgrX8bDEBG QMyd5w4V8mfUupr2gWu5ZbTrShoWm3fOVr8QbhHhGuvUQlXvEdoHjLEf9NMkwlP7h5lM Kx0w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1685126073; x=1687718073; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=K4mau+kNTkjearkZEwOGLqNrVUMBNYPnc3BA4EgUGCw=; b=L1N5T7hUw5e8dmOQQ+Qhwe7gfU7r2DkQh/LgPq0Xh6lv6k4boe59cTur9uMMnUlDAE bKMi4Y9gJUFbhhJGfbiJr/xhwh3gxNSrbkiey0z1dC15KVI+gHk18zwlZN8KGUaWZplg dXqT3UQa/9dPf4+HHS+JV7JLtSm5cl2G1y/ubIkJRDw7fjbTVs7EQTBwcRgA0m/TqN6U /khEyjl0GTZ7wuozYCilY5tcbCcbivLr95t0upPO1YMXMpSFaGKS93MZ+4Wl+xh1p555 IhafvNZhi9q1PWdO3E7WsI6fS4jaSF0iR8wh7v2b15E9cLIE0YJON3m9Zc73LvW991Fh lZSQ== X-Gm-Message-State: AC+VfDzsHJBJTQNFfCQHvfx35CmINa/or+J2ynYkMj6sEnxcohpK67FB D5+W5KiYPE2kLC1CVJg2EYPXFjZ3MMAN X-Google-Smtp-Source: ACHHUZ4/ooV4uN9q1A338rkeLKvKvQrlTdkMU6a1DjOKnscVR49yyllBcTY0DiYg18FNUOwR0poOCFfbqAqH X-Received: from irogers.svl.corp.google.com ([2620:15c:2d4:203:3b4e:312c:644:a642]) (user=irogers job=sendgmr) by 2002:a81:d84a:0:b0:562:837:122f with SMTP id n10-20020a81d84a000000b005620837122fmr1614586ywl.9.1685126073356; Fri, 26 May 2023 11:34:33 -0700 (PDT) Date: Fri, 26 May 2023 11:33:55 -0700 In-Reply-To: <20230526183401.2326121-1-irogers@google.com> Message-Id: <20230526183401.2326121-11-irogers@google.com> Mime-Version: 1.0 References: <20230526183401.2326121-1-irogers@google.com> X-Mailer: git-send-email 2.41.0.rc0.172.g3f132b7071-goog Subject: [PATCH v2 10/16] perf timechart: Make large arrays dynamic From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Mark Rutland , Alexander Shishkin , Jiri Olsa , Namhyung Kim , Ian Rogers , Adrian Hunter , "Masami Hiramatsu (Google)" , "Steven Rostedt (Google)" , Ross Zwisler , Leo Yan , Tiezhu Yang , Yang Jihong , Andi Kleen , Kan Liang , Ravi Bangoria , Sean Christopherson , K Prateek Nayak , Paolo Bonzini , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Allocate start time and state arrays when command starts rather than using 114,688 bytes in .bss. Signed-off-by: Ian Rogers --- tools/perf/builtin-timechart.c | 48 +++++++++++++++++++++++++++------- 1 file changed, 39 insertions(+), 9 deletions(-) diff --git a/tools/perf/builtin-timechart.c b/tools/perf/builtin-timechart.c index bce1cf896f9c..829d99fecfd0 100644 --- a/tools/perf/builtin-timechart.c +++ b/tools/perf/builtin-timechart.c @@ -315,10 +315,10 @@ static void pid_put_sample(struct timechart *tchart, = int pid, int type, =20 #define MAX_CPUS 4096 =20 -static u64 cpus_cstate_start_times[MAX_CPUS]; -static int cpus_cstate_state[MAX_CPUS]; -static u64 cpus_pstate_start_times[MAX_CPUS]; -static u64 cpus_pstate_state[MAX_CPUS]; +static u64 *cpus_cstate_start_times; +static int *cpus_cstate_state; +static u64 *cpus_pstate_start_times; +static u64 *cpus_pstate_state; =20 static int process_comm_event(struct perf_tool *tool, union perf_event *event, @@ -1981,12 +1981,34 @@ int cmd_timechart(int argc, const char **argv) "perf timechart record []", NULL }; + int ret; + + cpus_cstate_start_times =3D calloc(MAX_CPUS, sizeof(*cpus_cstate_start_ti= mes)); + if (!cpus_cstate_start_times) + return -ENOMEM; + cpus_cstate_state =3D calloc(MAX_CPUS, sizeof(*cpus_cstate_state)); + if (!cpus_cstate_state) { + ret =3D -ENOMEM; + goto out; + } + cpus_pstate_start_times =3D calloc(MAX_CPUS, sizeof(*cpus_pstate_start_ti= mes)); + if (!cpus_pstate_start_times) { + ret =3D -ENOMEM; + goto out; + } + cpus_pstate_state =3D calloc(MAX_CPUS, sizeof(*cpus_pstate_state)); + if (!cpus_pstate_state) { + ret =3D -ENOMEM; + goto out; + } + argc =3D parse_options_subcommand(argc, argv, timechart_options, timechar= t_subcommands, timechart_usage, PARSE_OPT_STOP_AT_NON_OPTION); =20 if (tchart.power_only && tchart.tasks_only) { pr_err("-P and -T options cannot be used at the same time.\n"); - return -1; + ret =3D -1; + goto out; } =20 if (argc && strlen(argv[0]) > 2 && strstarts("record", argv[0])) { @@ -1996,17 +2018,25 @@ int cmd_timechart(int argc, const char **argv) =20 if (tchart.power_only && tchart.tasks_only) { pr_err("-P and -T options cannot be used at the same time.\n"); - return -1; + ret =3D -1; + goto out; } =20 if (tchart.io_only) - return timechart__io_record(argc, argv); + ret =3D timechart__io_record(argc, argv); else - return timechart__record(&tchart, argc, argv); + ret =3D timechart__record(&tchart, argc, argv); + goto out; } else if (argc) usage_with_options(timechart_usage, timechart_options); =20 setup_pager(); =20 - return __cmd_timechart(&tchart, output_name); + ret =3D __cmd_timechart(&tchart, output_name); +out: + zfree(&cpus_cstate_start_times); + zfree(&cpus_cstate_state); + zfree(&cpus_pstate_start_times); + zfree(&cpus_pstate_state); + return ret; } --=20 2.41.0.rc0.172.g3f132b7071-goog From nobody Sat Feb 7 18:20:10 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id C2DB4C77B7A for ; Fri, 26 May 2023 18:35:18 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S243219AbjEZSfQ (ORCPT ); Fri, 26 May 2023 14:35:16 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44404 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S243247AbjEZSer (ORCPT ); Fri, 26 May 2023 14:34:47 -0400 Received: from mail-yb1-xb4a.google.com (mail-yb1-xb4a.google.com [IPv6:2607:f8b0:4864:20::b4a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 620F610C6 for ; Fri, 26 May 2023 11:34:36 -0700 (PDT) Received: by mail-yb1-xb4a.google.com with SMTP id 3f1490d57ef6-bacfa4eefd2so2754343276.0 for ; Fri, 26 May 2023 11:34:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1685126075; x=1687718075; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=lkJ/bHzmL4xpZrwTU9gjfUY7OChGt5DzdQsy3gr4s10=; b=GmJSW1YJHVbBFCvJMoHwmLL0Bqu4UehFFio7tUJJ5jDQDcS+/CIiDIVujpmrFlKi16 gQZiyyLcPJlJa0FRXHU2Kded6W9MWJR3Tx4vuD5I4/79hKig9V0YzIzjIL7I21K7Co32 y4ImNbjUyJ1I8RQ3rQbphQ9ndtusFqrQRLC5/AVaBiAMia44At7vFxO34u7bm3k6KOTG B+pBIgpnbYrLBmYlh/ar1EI54OoMc7dhigb7cXP0EAFHeBcjJnQincA6oGZzO9+VzNZB q6Ou0CRNZM6sEKVD86SHHR+ReEAYEDxHoEKR4YS8VabbRDmyqP68Mxsn03cdbGw/uH3W Zsiw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1685126075; x=1687718075; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=lkJ/bHzmL4xpZrwTU9gjfUY7OChGt5DzdQsy3gr4s10=; b=C4PGsbMwCDGA20kT+jmYc3Xee30W1gY8mWAgLgbhrfQcv3ErzXW6UxQj3RfgJjRLBU Ycl/3SAlr5F40CJsLcpVFZ5uRgfUj5nRPzG7g074qgwAUTdst0g7PHZS8DRpxFwZZtT5 rqoaVU5SD/GNxZPU7HiAIs2GU9NxiofOkiByG3FxforTW2x/T+UcSJx708PPY4Cd80hi Oef88OI8PqFSulH8AJwbO6l09wuHVWFL5Cw2YaCiU2L+xsCiysjAS2wzZ5wCm7hMM1Ue ABc5Ti0KCMWFHuzWn/U7OYFk6VF2JV+uXTPcjb9baW9x3Uwx3tuR2wTWFDBOS1ugSb5m Sgmg== X-Gm-Message-State: AC+VfDy4aPxQVFWJWdCZ3eedcqzosUPofN0t7SJNo8eCSQUADrZKyutL wU+G4Yf7MQ4tygYP+5h+Fw45QvfuKotw X-Google-Smtp-Source: ACHHUZ6eJgBw1TNqSMNVyweXFFNi9rfq+PtK/7nqSqSets/phP/6WlFJXSaGMMK0qxOmEqKtGAzLy/FHXl7V X-Received: from irogers.svl.corp.google.com ([2620:15c:2d4:203:3b4e:312c:644:a642]) (user=irogers job=sendgmr) by 2002:a25:2494:0:b0:ba8:1e5f:850f with SMTP id k142-20020a252494000000b00ba81e5f850fmr976374ybk.10.1685126075505; Fri, 26 May 2023 11:34:35 -0700 (PDT) Date: Fri, 26 May 2023 11:33:56 -0700 In-Reply-To: <20230526183401.2326121-1-irogers@google.com> Message-Id: <20230526183401.2326121-12-irogers@google.com> Mime-Version: 1.0 References: <20230526183401.2326121-1-irogers@google.com> X-Mailer: git-send-email 2.41.0.rc0.172.g3f132b7071-goog Subject: [PATCH v2 11/16] perf probe: Dynamically allocate params memory From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Mark Rutland , Alexander Shishkin , Jiri Olsa , Namhyung Kim , Ian Rogers , Adrian Hunter , "Masami Hiramatsu (Google)" , "Steven Rostedt (Google)" , Ross Zwisler , Leo Yan , Tiezhu Yang , Yang Jihong , Andi Kleen , Kan Liang , Ravi Bangoria , Sean Christopherson , K Prateek Nayak , Paolo Bonzini , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Avoid 14,432 bytes in .bss by dynamically allocating params. Signed-off-by: Ian Rogers Acked-by: Masami Hiramatsu (Google) --- tools/perf/builtin-probe.c | 133 ++++++++++++++++++++----------------- 1 file changed, 71 insertions(+), 62 deletions(-) diff --git a/tools/perf/builtin-probe.c b/tools/perf/builtin-probe.c index 4df05b992093..019fef8da6a8 100644 --- a/tools/perf/builtin-probe.c +++ b/tools/perf/builtin-probe.c @@ -47,29 +47,29 @@ static struct { char *target; struct strfilter *filter; struct nsinfo *nsi; -} params; +} *params; =20 /* Parse an event definition. Note that any error must die. */ static int parse_probe_event(const char *str) { - struct perf_probe_event *pev =3D ¶ms.events[params.nevents]; + struct perf_probe_event *pev =3D ¶ms->events[params->nevents]; int ret; =20 - pr_debug("probe-definition(%d): %s\n", params.nevents, str); - if (++params.nevents =3D=3D MAX_PROBES) { + pr_debug("probe-definition(%d): %s\n", params->nevents, str); + if (++params->nevents =3D=3D MAX_PROBES) { pr_err("Too many probes (> %d) were specified.", MAX_PROBES); return -1; } =20 - pev->uprobes =3D params.uprobes; - if (params.target) { - pev->target =3D strdup(params.target); + pev->uprobes =3D params->uprobes; + if (params->target) { + pev->target =3D strdup(params->target); if (!pev->target) return -ENOMEM; - params.target_used =3D true; + params->target_used =3D true; } =20 - pev->nsi =3D nsinfo__get(params.nsi); + pev->nsi =3D nsinfo__get(params->nsi); =20 /* Parse a perf-probe command into event */ ret =3D parse_perf_probe_command(str, pev); @@ -84,12 +84,12 @@ static int params_add_filter(const char *str) int ret =3D 0; =20 pr_debug2("Add filter: %s\n", str); - if (!params.filter) { - params.filter =3D strfilter__new(str, &err); - if (!params.filter) + if (!params->filter) { + params->filter =3D strfilter__new(str, &err); + if (!params->filter) ret =3D err ? -EINVAL : -ENOMEM; } else - ret =3D strfilter__or(params.filter, str, &err); + ret =3D strfilter__or(params->filter, str, &err); =20 if (ret =3D=3D -EINVAL) { pr_err("Filter parse error at %td.\n", err - str + 1); @@ -112,17 +112,17 @@ static int set_target(const char *ptr) * TODO: Support relative path, and $PATH, $LD_LIBRARY_PATH, * short module name. */ - if (!params.target && ptr && *ptr =3D=3D '/') { - params.target =3D strdup(ptr); - if (!params.target) + if (!params->target && ptr && *ptr =3D=3D '/') { + params->target =3D strdup(ptr); + if (!params->target) return -ENOMEM; - params.target_used =3D false; + params->target_used =3D false; =20 found =3D 1; buf =3D ptr + (strlen(ptr) - 3); =20 if (strcmp(buf, ".ko")) - params.uprobes =3D true; + params->uprobes =3D true; =20 } =20 @@ -172,15 +172,15 @@ static int opt_set_target(const struct option *opt, c= onst char *str, =20 if (str) { if (!strcmp(opt->long_name, "exec")) - params.uprobes =3D true; + params->uprobes =3D true; else if (!strcmp(opt->long_name, "module")) - params.uprobes =3D false; + params->uprobes =3D false; else return ret; =20 /* Expand given path to absolute path, except for modulename */ - if (params.uprobes || strchr(str, '/')) { - tmp =3D nsinfo__realpath(str, params.nsi); + if (params->uprobes || strchr(str, '/')) { + tmp =3D nsinfo__realpath(str, params->nsi); if (!tmp) { pr_warning("Failed to get the absolute path of %s: %m\n", str); return ret; @@ -190,9 +190,9 @@ static int opt_set_target(const struct option *opt, con= st char *str, if (!tmp) return -ENOMEM; } - free(params.target); - params.target =3D tmp; - params.target_used =3D false; + free(params->target); + params->target =3D tmp; + params->target_used =3D false; ret =3D 0; } =20 @@ -217,7 +217,7 @@ static int opt_set_target_ns(const struct option *opt _= _maybe_unused, } nsip =3D nsinfo__new(ns_pid); if (nsip && nsinfo__need_setns(nsip)) - params.nsi =3D nsinfo__get(nsip); + params->nsi =3D nsinfo__get(nsip); nsinfo__put(nsip); =20 ret =3D 0; @@ -238,14 +238,14 @@ static int opt_show_lines(const struct option *opt, if (!str) return 0; =20 - if (params.command =3D=3D 'L') { + if (params->command =3D=3D 'L') { pr_warning("Warning: more than one --line options are" " detected. Only the first one is valid.\n"); return 0; } =20 - params.command =3D opt->short_name; - ret =3D parse_line_range_desc(str, ¶ms.line_range); + params->command =3D opt->short_name; + ret =3D parse_line_range_desc(str, ¶ms->line_range); =20 return ret; } @@ -253,7 +253,7 @@ static int opt_show_lines(const struct option *opt, static int opt_show_vars(const struct option *opt, const char *str, int unset __maybe_unused) { - struct perf_probe_event *pev =3D ¶ms.events[params.nevents]; + struct perf_probe_event *pev =3D ¶ms->events[params->nevents]; int ret; =20 if (!str) @@ -264,7 +264,7 @@ static int opt_show_vars(const struct option *opt, pr_err(" Error: '--vars' doesn't accept arguments.\n"); return -EINVAL; } - params.command =3D opt->short_name; + params->command =3D opt->short_name; =20 return ret; } @@ -276,7 +276,7 @@ static int opt_add_probe_event(const struct option *opt, const char *str, int unset __maybe_unused) { if (str) { - params.command =3D opt->short_name; + params->command =3D opt->short_name; return parse_probe_event(str); } =20 @@ -287,7 +287,7 @@ static int opt_set_filter_with_command(const struct opt= ion *opt, const char *str, int unset) { if (!unset) - params.command =3D opt->short_name; + params->command =3D opt->short_name; =20 if (str) return params_add_filter(str); @@ -306,20 +306,29 @@ static int opt_set_filter(const struct option *opt __= maybe_unused, =20 static int init_params(void) { - return line_range__init(¶ms.line_range); + int ret; + + params =3D calloc(1, sizeof(*params)); + if (!params) + return -ENOMEM; + + ret =3D line_range__init(¶ms->line_range); + if (ret) + zfree(¶ms); + return ret; } =20 static void cleanup_params(void) { int i; =20 - for (i =3D 0; i < params.nevents; i++) - clear_perf_probe_event(params.events + i); - line_range__clear(¶ms.line_range); - free(params.target); - strfilter__delete(params.filter); - nsinfo__put(params.nsi); - memset(¶ms, 0, sizeof(params)); + for (i =3D 0; i < params->nevents; i++) + clear_perf_probe_event(params->events + i); + line_range__clear(¶ms->line_range); + free(params->target); + strfilter__delete(params->filter); + nsinfo__put(params->nsi); + zfree(¶ms); } =20 static void pr_err_with_code(const char *msg, int err) @@ -346,7 +355,7 @@ static int perf_add_probe_events(struct perf_probe_even= t *pevs, int npevs) if (ret < 0) goto out_cleanup; =20 - if (params.command =3D=3D 'D') { /* it shows definition */ + if (params->command =3D=3D 'D') { /* it shows definition */ if (probe_conf.bootconfig) ret =3D show_bootconfig_events(pevs, npevs); else @@ -635,7 +644,7 @@ __cmd_probe(int argc, const char **argv) usage_with_options_msg(probe_usage, options, "'-' is not supported.\n"); } - if (params.command && params.command !=3D 'a') { + if (params->command && params->command !=3D 'a') { usage_with_options_msg(probe_usage, options, "another command except --add is set.\n"); } @@ -644,7 +653,7 @@ __cmd_probe(int argc, const char **argv) pr_err_with_code(" Error: Command Parse Error.", ret); return ret; } - params.command =3D 'a'; + params->command =3D 'a'; } =20 ret =3D symbol__validate_sym_arguments(); @@ -664,54 +673,54 @@ __cmd_probe(int argc, const char **argv) * nor change running kernel. So if user gives offline vmlinux, * ignore its buildid. */ - if (!strchr("lda", params.command) && symbol_conf.vmlinux_name) + if (!strchr("lda", params->command) && symbol_conf.vmlinux_name) symbol_conf.ignore_vmlinux_buildid =3D true; =20 - switch (params.command) { + switch (params->command) { case 'l': - if (params.uprobes) { + if (params->uprobes) { pr_err(" Error: Don't use --list with --exec.\n"); parse_options_usage(probe_usage, options, "l", true); parse_options_usage(NULL, options, "x", true); return -EINVAL; } - ret =3D show_perf_probe_events(params.filter); + ret =3D show_perf_probe_events(params->filter); if (ret < 0) pr_err_with_code(" Error: Failed to show event list.", ret); return ret; case 'F': - ret =3D show_available_funcs(params.target, params.nsi, - params.filter, params.uprobes); + ret =3D show_available_funcs(params->target, params->nsi, + params->filter, params->uprobes); if (ret < 0) pr_err_with_code(" Error: Failed to show functions.", ret); return ret; #ifdef HAVE_DWARF_SUPPORT case 'L': - ret =3D show_line_range(¶ms.line_range, params.target, - params.nsi, params.uprobes); + ret =3D show_line_range(¶ms->line_range, params->target, + params->nsi, params->uprobes); if (ret < 0) pr_err_with_code(" Error: Failed to show lines.", ret); return ret; case 'V': - if (!params.filter) - params.filter =3D strfilter__new(DEFAULT_VAR_FILTER, + if (!params->filter) + params->filter =3D strfilter__new(DEFAULT_VAR_FILTER, NULL); =20 - ret =3D show_available_vars(params.events, params.nevents, - params.filter); + ret =3D show_available_vars(params->events, params->nevents, + params->filter); if (ret < 0) pr_err_with_code(" Error: Failed to show vars.", ret); return ret; #endif case 'd': - ret =3D perf_del_probe_events(params.filter); + ret =3D perf_del_probe_events(params->filter); if (ret < 0) { pr_err_with_code(" Error: Failed to delete events.", ret); return ret; } break; case 'D': - if (probe_conf.bootconfig && params.uprobes) { + if (probe_conf.bootconfig && params->uprobes) { pr_err(" Error: --bootconfig doesn't support uprobes.\n"); return -EINVAL; } @@ -719,25 +728,25 @@ __cmd_probe(int argc, const char **argv) case 'a': =20 /* Ensure the last given target is used */ - if (params.target && !params.target_used) { + if (params->target && !params->target_used) { pr_err(" Error: -x/-m must follow the probe definitions.\n"); parse_options_usage(probe_usage, options, "m", true); parse_options_usage(NULL, options, "x", true); return -EINVAL; } =20 - ret =3D perf_add_probe_events(params.events, params.nevents); + ret =3D perf_add_probe_events(params->events, params->nevents); if (ret < 0) { =20 /* * When perf_add_probe_events() fails it calls * cleanup_perf_probe_events(pevs, npevs), i.e. - * cleanup_perf_probe_events(params.events, params.nevents), which + * cleanup_perf_probe_events(params->events, params->nevents), which * will call clear_perf_probe_event(), so set nevents to zero * to avoid cleanup_params() to call clear_perf_probe_event() again * on the same pevs. */ - params.nevents =3D 0; + params->nevents =3D 0; pr_err_with_code(" Error: Failed to add events.", ret); return ret; } --=20 2.41.0.rc0.172.g3f132b7071-goog From nobody Sat Feb 7 18:20:10 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 85C4DC77B7A for ; Fri, 26 May 2023 18:35:33 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S243450AbjEZSfb (ORCPT ); Fri, 26 May 2023 14:35:31 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44470 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S243257AbjEZSew (ORCPT ); Fri, 26 May 2023 14:34:52 -0400 Received: from mail-yw1-x1149.google.com (mail-yw1-x1149.google.com [IPv6:2607:f8b0:4864:20::1149]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E831210D8 for ; Fri, 26 May 2023 11:34:38 -0700 (PDT) Received: by mail-yw1-x1149.google.com with SMTP id 00721157ae682-564f6099813so21292227b3.2 for ; Fri, 26 May 2023 11:34:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1685126078; x=1687718078; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=Bcu52ZFroNNUdqyZRIxQffX6dxZ/uHK2VwVobLtSsPQ=; b=5o/Nx7rLPrNfsjQlkkwWwKM8wDGHmv5Dybvj9q2PYboM4W3EidbHkxN5I0Oo/rs7S0 khUL+qXGYgFBPOGZw1ae+0f82yoyabEVbgKZ/qilDA7Ug1LN0wdETQjZq8sReEFkF5Mv slV7gSy5Zol+0tUuJlF3l4ebDn3ItoOkCofhzx67roW6klSVhkf7ihzbKKPLxMglfgnw Y1av5YxUp3V8cTSuTyoO1q5tubptBAPkPxO7k0DDTlK9EAXklj+sSHCCQustodKl/2mk N9qqMsUWaAmTRHrbC6zYr+ToTwBFtjy4OdY4Rt/VgF4zqdacRrr/XbD85TIDdPiEtydd UZNg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1685126078; x=1687718078; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=Bcu52ZFroNNUdqyZRIxQffX6dxZ/uHK2VwVobLtSsPQ=; b=IZDb0d6CUv9+HX7zZYijfqrq9ViZatweNOk6/ZKx3L5uamq4q7/0osphHj0nkcIMdZ /CW2GQD3IlFItZYWPtixdHurkmvyV/pZ6e6mUE+/XY0kiFbRPCTSrSALE21O4Ilte79q UFFIbQ2mRM2qnEOvrXHVJcfOHAaVMxh0SCgAQzQpHwbQ+q/jmHM9YjC8c7fjmVi7Aw3C 3ENDUbiJc/bYL6n3uZvzh6PmH21j6VvUVWjagR4/QDMMMoeennuAoUoQJoJAII/9syDK Vinx6P7OzqYEipIjdHMbKopAKcXJk+yxvTaS/t9i42SS4jHhfzCHEPIcgUzg468rqJJs oG8A== X-Gm-Message-State: AC+VfDyw/UyDcWzhCOI/sMwyZTVHgDP2fWaLUuF0+EOI4NWy2GdrN/pM 06u0KJwg4imLdbKqA+jhD2gAoj34nbDv X-Google-Smtp-Source: ACHHUZ40dfijm94RJq2Q31obwmB+WB5iBglw4oyCn9Mp3VcGTYG7tjYdBlampUIaFb0Y5I554ax/Hm8uUwv9 X-Received: from irogers.svl.corp.google.com ([2620:15c:2d4:203:3b4e:312c:644:a642]) (user=irogers job=sendgmr) by 2002:a81:4309:0:b0:561:987e:d22 with SMTP id q9-20020a814309000000b00561987e0d22mr1566047ywa.1.1685126077827; Fri, 26 May 2023 11:34:37 -0700 (PDT) Date: Fri, 26 May 2023 11:33:57 -0700 In-Reply-To: <20230526183401.2326121-1-irogers@google.com> Message-Id: <20230526183401.2326121-13-irogers@google.com> Mime-Version: 1.0 References: <20230526183401.2326121-1-irogers@google.com> X-Mailer: git-send-email 2.41.0.rc0.172.g3f132b7071-goog Subject: [PATCH v2 12/16] perf path: Make mkpath thread safe From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Mark Rutland , Alexander Shishkin , Jiri Olsa , Namhyung Kim , Ian Rogers , Adrian Hunter , "Masami Hiramatsu (Google)" , "Steven Rostedt (Google)" , Ross Zwisler , Leo Yan , Tiezhu Yang , Yang Jihong , Andi Kleen , Kan Liang , Ravi Bangoria , Sean Christopherson , K Prateek Nayak , Paolo Bonzini , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Avoid 4 static arrays for paths, pass in a char[] buffer to use. Makes mkpath thread safe for the small number of users. Also removes 16,384 bytes from .bss. Signed-off-by: Ian Rogers --- tools/perf/builtin-config.c | 4 +++- tools/perf/builtin-help.c | 4 +++- tools/perf/util/cache.h | 2 +- tools/perf/util/config.c | 3 ++- tools/perf/util/path.c | 35 +++++------------------------------ 5 files changed, 14 insertions(+), 34 deletions(-) diff --git a/tools/perf/builtin-config.c b/tools/perf/builtin-config.c index 2603015f98be..2e8363778935 100644 --- a/tools/perf/builtin-config.c +++ b/tools/perf/builtin-config.c @@ -12,6 +12,7 @@ #include "util/debug.h" #include "util/config.h" #include +#include #include #include =20 @@ -157,7 +158,8 @@ int cmd_config(int argc, const char **argv) { int i, ret =3D -1; struct perf_config_set *set; - char *user_config =3D mkpath("%s/.perfconfig", getenv("HOME")); + char path[PATH_MAX]; + char *user_config =3D mkpath(path, sizeof(path), "%s/.perfconfig", getenv= ("HOME")); const char *config_filename; bool changed =3D false; =20 diff --git a/tools/perf/builtin-help.c b/tools/perf/builtin-help.c index 3e7f52054fac..b2a368ae295a 100644 --- a/tools/perf/builtin-help.c +++ b/tools/perf/builtin-help.c @@ -19,6 +19,7 @@ #include #include #include +#include #include #include #include @@ -389,9 +390,10 @@ static int get_html_page_path(char **page_path, const = char *page) { struct stat st; const char *html_path =3D system_path(PERF_HTML_PATH); + char path[PATH_MAX]; =20 /* Check that we have a perf documentation directory. */ - if (stat(mkpath("%s/perf.html", html_path), &st) + if (stat(mkpath(path, sizeof(path), "%s/perf.html", html_path), &st) || !S_ISREG(st.st_mode)) { pr_err("'%s': not a documentation directory.", html_path); return -1; diff --git a/tools/perf/util/cache.h b/tools/perf/util/cache.h index 9f2e36ef5072..0b61840d4226 100644 --- a/tools/perf/util/cache.h +++ b/tools/perf/util/cache.h @@ -26,6 +26,6 @@ static inline int is_absolute_path(const char *path) return path[0] =3D=3D '/'; } =20 -char *mkpath(const char *fmt, ...) __printf(1, 2); +char *mkpath(char *path_buf, size_t sz, const char *fmt, ...) __printf(3, = 4); =20 #endif /* __PERF_CACHE_H */ diff --git a/tools/perf/util/config.c b/tools/perf/util/config.c index 658170b8dcef..f340dc73db6d 100644 --- a/tools/perf/util/config.c +++ b/tools/perf/util/config.c @@ -543,6 +543,7 @@ static char *home_perfconfig(void) const char *home =3D NULL; char *config; struct stat st; + char path[PATH_MAX]; =20 home =3D getenv("HOME"); =20 @@ -554,7 +555,7 @@ static char *home_perfconfig(void) if (!home || !*home || !perf_config_global()) return NULL; =20 - config =3D strdup(mkpath("%s/.perfconfig", home)); + config =3D strdup(mkpath(path, sizeof(path), "%s/.perfconfig", home)); if (config =3D=3D NULL) { pr_warning("Not enough memory to process %s/.perfconfig, ignoring it.\n"= , home); return NULL; diff --git a/tools/perf/util/path.c b/tools/perf/util/path.c index ce80b79be103..00adf872bf00 100644 --- a/tools/perf/util/path.c +++ b/tools/perf/util/path.c @@ -1,16 +1,4 @@ // SPDX-License-Identifier: GPL-2.0 -/* - * I'm tired of doing "vsnprintf()" etc just to open a - * file, so here's a "return static buffer with printf" - * interface for paths. - * - * It's obviously not thread-safe. Sue me. But it's quite - * useful for doing things like - * - * f =3D open(mkpath("%s/%s.perf", base, name), O_RDONLY); - * - * which is what it's designed for. - */ #include "path.h" #include "cache.h" #include @@ -22,18 +10,6 @@ #include #include =20 -static char bad_path[] =3D "/bad-path/"; -/* - * One hack: - */ -static char *get_pathname(void) -{ - static char pathname_array[4][PATH_MAX]; - static int idx; - - return pathname_array[3 & ++idx]; -} - static char *cleanup_path(char *path) { /* Clean it up */ @@ -45,18 +21,17 @@ static char *cleanup_path(char *path) return path; } =20 -char *mkpath(const char *fmt, ...) +char *mkpath(char *path_buf, size_t sz, const char *fmt, ...) { va_list args; unsigned len; - char *pathname =3D get_pathname(); =20 va_start(args, fmt); - len =3D vsnprintf(pathname, PATH_MAX, fmt, args); + len =3D vsnprintf(path_buf, sz, fmt, args); va_end(args); - if (len >=3D PATH_MAX) - return bad_path; - return cleanup_path(pathname); + if (len >=3D sz) + strncpy(path_buf, "/bad-path/", sz); + return cleanup_path(path_buf); } =20 int path__join(char *bf, size_t size, const char *path1, const char *path2) --=20 2.41.0.rc0.172.g3f132b7071-goog From nobody Sat Feb 7 18:20:10 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id DB35EC7EE23 for ; Fri, 26 May 2023 18:35:37 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236519AbjEZSff (ORCPT ); Fri, 26 May 2023 14:35:35 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44078 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S243408AbjEZSe6 (ORCPT ); Fri, 26 May 2023 14:34:58 -0400 Received: from mail-yw1-x1149.google.com (mail-yw1-x1149.google.com [IPv6:2607:f8b0:4864:20::1149]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2ADD3E50 for ; Fri, 26 May 2023 11:34:41 -0700 (PDT) Received: by mail-yw1-x1149.google.com with SMTP id 00721157ae682-5655d99d636so26772447b3.2 for ; Fri, 26 May 2023 11:34:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1685126080; x=1687718080; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=xIZMpXPJ1dQ5s5NJpJTXLqv0Dy6GNIIEqB7VSkKLPVU=; b=5V7orP06jmDLBBXQbP6UcRYzgABu9vELxgXsdLr9L8wEqPxNVIE9LCYmrYGWLhJTF8 lTYXhnYekALzZ0mJGasQ2tAQ56/+/yNdAzm0G62yd/o3YyKOCRlWYwAPt6AYgPIWYrOT BsodmpJk3C11+qh8TAY6uxUdRS6v4PXkuqUeT9pv1IXjGqupZmxd7w27241x7Ja8mfVo 9NXeGl5zfuBE6w/1zTajEGjvNE9+j0Vv8NxmzwB+E4R0hWAuyg9/9lP0kX5aguOcJhST J3neLzlzCKSAbvDGM54MhZa3oQQ14ks39cYx0v6rfDLmus6MaN/qdy4paYxZisengb8a ImbA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1685126080; x=1687718080; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=xIZMpXPJ1dQ5s5NJpJTXLqv0Dy6GNIIEqB7VSkKLPVU=; b=UFHFw9/dtHgh9gdoZ4sMrw/5wJwqE0TfQg+O4XwAcw+0r/Xl0FaDigRO1zbmXIvjRV MLRExFv8y2vMZ+DgvniJdlxcEd3bf2LqUlrrzfjEHDJEGVUk6UjlawO2PfXqPS+bCzkI vnWhLkCFDfO2Xg6ztCDjf+nU6Zrsr86PBJa5w+YChzXSeIkEArRjVtp+855WbaNBDXCA z8IcC0NrXYkpyb5OomTlS/jAABWrkf6EnriRbT1mj+h6MlRoJypArZQWXYLi1ImtKobU O9+orzthXKYQ6viAoNhlEr5Hds2KI/6RqxAzwvvGzbhAvLz/8/Z39nOwpD/C/B4xzupn RoPQ== X-Gm-Message-State: AC+VfDwVp9W2KRZLbCPsxYUO+OawY+qakIkZvDOHFvj0q9ZPE9ZsbUyY SEJrghDTklsyTbYCb4XOLowXhawCyxey X-Google-Smtp-Source: ACHHUZ5XqMKoVFQeOJB2IJzmU6NazOhnjZ2ccmm6/S/dj5/4ymEx1N+DWEf1VQXl9QyS8f4KREh3raln5CL9 X-Received: from irogers.svl.corp.google.com ([2620:15c:2d4:203:3b4e:312c:644:a642]) (user=irogers job=sendgmr) by 2002:a81:ed06:0:b0:54f:bb71:c7b3 with SMTP id k6-20020a81ed06000000b0054fbb71c7b3mr1567729ywm.9.1685126080090; Fri, 26 May 2023 11:34:40 -0700 (PDT) Date: Fri, 26 May 2023 11:33:58 -0700 In-Reply-To: <20230526183401.2326121-1-irogers@google.com> Message-Id: <20230526183401.2326121-14-irogers@google.com> Mime-Version: 1.0 References: <20230526183401.2326121-1-irogers@google.com> X-Mailer: git-send-email 2.41.0.rc0.172.g3f132b7071-goog Subject: [PATCH v2 13/16] perf scripting-engines: Move static to local variable From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Mark Rutland , Alexander Shishkin , Jiri Olsa , Namhyung Kim , Ian Rogers , Adrian Hunter , "Masami Hiramatsu (Google)" , "Steven Rostedt (Google)" , Ross Zwisler , Leo Yan , Tiezhu Yang , Yang Jihong , Andi Kleen , Kan Liang , Ravi Bangoria , Sean Christopherson , K Prateek Nayak , Paolo Bonzini , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Avoid 16,384 bytes in .bss by stack allocating two bitmaps. Signed-off-by: Ian Rogers --- tools/perf/util/scripting-engines/trace-event-perl.c | 4 ++-- tools/perf/util/scripting-engines/trace-event-python.c | 5 +++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/tools/perf/util/scripting-engines/trace-event-perl.c b/tools/p= erf/util/scripting-engines/trace-event-perl.c index 039d0365ad41..65b761d83a1f 100644 --- a/tools/perf/util/scripting-engines/trace-event-perl.c +++ b/tools/perf/util/scripting-engines/trace-event-perl.c @@ -67,8 +67,6 @@ INTERP my_perl; #define TRACE_EVENT_TYPE_MAX \ ((1 << (sizeof(unsigned short) * 8)) - 1) =20 -static DECLARE_BITMAP(events_defined, TRACE_EVENT_TYPE_MAX); - extern struct scripting_context *scripting_context; =20 static char *cur_field_name; @@ -353,7 +351,9 @@ static void perl_process_tracepoint(struct perf_sample = *sample, void *data =3D sample->raw_data; unsigned long long nsecs =3D sample->time; const char *comm =3D thread__comm_str(thread); + DECLARE_BITMAP(events_defined, TRACE_EVENT_TYPE_MAX); =20 + bitmap_zero(events_defined, TRACE_EVENT_TYPE_MAX); dSP; =20 if (evsel->core.attr.type !=3D PERF_TYPE_TRACEPOINT) diff --git a/tools/perf/util/scripting-engines/trace-event-python.c b/tools= /perf/util/scripting-engines/trace-event-python.c index 41d4f9e6a8b7..40964078f92f 100644 --- a/tools/perf/util/scripting-engines/trace-event-python.c +++ b/tools/perf/util/scripting-engines/trace-event-python.c @@ -93,8 +93,6 @@ PyMODINIT_FUNC PyInit_perf_trace_context(void); #define TRACE_EVENT_TYPE_MAX \ ((1 << (sizeof(unsigned short) * 8)) - 1) =20 -static DECLARE_BITMAP(events_defined, TRACE_EVENT_TYPE_MAX); - #define N_COMMON_FIELDS 7 =20 static char *cur_field_name; @@ -934,6 +932,9 @@ static void python_process_tracepoint(struct perf_sampl= e *sample, unsigned long long nsecs =3D sample->time; const char *comm =3D thread__comm_str(al->thread); const char *default_handler_name =3D "trace_unhandled"; + DECLARE_BITMAP(events_defined, TRACE_EVENT_TYPE_MAX); + + bitmap_zero(events_defined, TRACE_EVENT_TYPE_MAX); =20 if (!event) { snprintf(handler_name, sizeof(handler_name), --=20 2.41.0.rc0.172.g3f132b7071-goog From nobody Sat Feb 7 18:20:10 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 81625C77B7A for ; Fri, 26 May 2023 18:35:48 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S242821AbjEZSfq (ORCPT ); Fri, 26 May 2023 14:35:46 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44674 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S242835AbjEZSfI (ORCPT ); Fri, 26 May 2023 14:35:08 -0400 Received: from mail-yb1-xb4a.google.com (mail-yb1-xb4a.google.com [IPv6:2607:f8b0:4864:20::b4a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5B72BE54 for ; Fri, 26 May 2023 11:34:43 -0700 (PDT) Received: by mail-yb1-xb4a.google.com with SMTP id 3f1490d57ef6-babb51cb4d4so2274054276.1 for ; Fri, 26 May 2023 11:34:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1685126082; x=1687718082; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=ZlCp8PAHlNCmunobQkdPrQHDqUHTnoSBSsPrysF0mwY=; b=Plkd/xuqK7M9SwlLAM21/d2FaIm8z5gDewz3SZdNEOECc+gV7lFjw6+UKO10fmBMZB pIXWE5awCZwwtkj1BDl0EmV/jGe2DVd34bup9DBTV9CgoWd5eeg+AbMzKlerhNR7X/Gw 705gC8RpQCNguftIohd3ITPASIdqZ3kZbzcMgE28J3d3Ucwo/ZMCZke1RsbUoVXb0caA 1vdqJ9f5BW4pqGgv/GFN30r/jEQnHeCvvO6RpFr+ppnBAyIBQIqTPKDgaeFxhAKwZVKu ny4EnnAWZ0rbuqFG19Kx2w6R+3Eqg4AEaVFkyrlT/mdtSGwWjLf8PD5ulwuJj1DfqdQb 6/dw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1685126082; x=1687718082; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=ZlCp8PAHlNCmunobQkdPrQHDqUHTnoSBSsPrysF0mwY=; b=AIKPlW6JfGDxDK2wbKn9q/Ur29jWnzATzPwmjrpcLLnCG2dT/u1B9BYFTGRjqqEp6C 0f+Tt34muM43FCy4rYbsDLz8vrScDA9NarFCbgX6jjnrcFXfSo1EALK1eI14lFr4sPf9 qK1Ir9HYWyfZsc3k1fxdZBhZ1SxwLbIpXKu45CwB5wP1srkspNLGfkOK/Ra6fB61APiQ 9o5/ijLGKZWx6zSKwNFe2qT+sbiSPpXa3NoQoL7ClLeFUxWv/IbsemhXyDJphbiz+ktR UW0XGolC4tWu7bw9ohbfJ7kM8iKS5imxe/xbm7PBe4tOt1xVc6Ao90ISGdgbgySM8gj3 NzgQ== X-Gm-Message-State: AC+VfDwTXASduv2qVQXAiW1jAnBGuSAIihNQEO0W+gLXxD/Z+WSRzTgs axUs9fi9378AJRXZVy7gifWKDG20uTgc X-Google-Smtp-Source: ACHHUZ6QAA72EtRyWFuSRwlWtGxsChIoyKoEFA62TrkZKniW/edvWdeG+Lum4DcHWumM9PH4R0IeDIbeBU87 X-Received: from irogers.svl.corp.google.com ([2620:15c:2d4:203:3b4e:312c:644:a642]) (user=irogers job=sendgmr) by 2002:a25:fc1c:0:b0:bac:7086:c9b2 with SMTP id v28-20020a25fc1c000000b00bac7086c9b2mr992311ybd.12.1685126082416; Fri, 26 May 2023 11:34:42 -0700 (PDT) Date: Fri, 26 May 2023 11:33:59 -0700 In-Reply-To: <20230526183401.2326121-1-irogers@google.com> Message-Id: <20230526183401.2326121-15-irogers@google.com> Mime-Version: 1.0 References: <20230526183401.2326121-1-irogers@google.com> X-Mailer: git-send-email 2.41.0.rc0.172.g3f132b7071-goog Subject: [PATCH v2 14/16] tools api fs: Dynamically allocate cgroupfs mount point cache From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Mark Rutland , Alexander Shishkin , Jiri Olsa , Namhyung Kim , Ian Rogers , Adrian Hunter , "Masami Hiramatsu (Google)" , "Steven Rostedt (Google)" , Ross Zwisler , Leo Yan , Tiezhu Yang , Yang Jihong , Andi Kleen , Kan Liang , Ravi Bangoria , Sean Christopherson , K Prateek Nayak , Paolo Bonzini , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Move the cgroupfs_cache_entry 4128 byte array out of .bss. Signed-off-by: Ian Rogers --- tools/lib/api/fs/cgroup.c | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/tools/lib/api/fs/cgroup.c b/tools/lib/api/fs/cgroup.c index 1573dae4259d..250629a09423 100644 --- a/tools/lib/api/fs/cgroup.c +++ b/tools/lib/api/fs/cgroup.c @@ -14,7 +14,7 @@ struct cgroupfs_cache_entry { }; =20 /* just cache last used one */ -static struct cgroupfs_cache_entry cached; +static struct cgroupfs_cache_entry *cached; =20 int cgroupfs_find_mountpoint(char *buf, size_t maxlen, const char *subsys) { @@ -24,9 +24,9 @@ int cgroupfs_find_mountpoint(char *buf, size_t maxlen, co= nst char *subsys) char *p, *path; char mountpoint[PATH_MAX]; =20 - if (!strcmp(cached.subsys, subsys)) { - if (strlen(cached.mountpoint) < maxlen) { - strcpy(buf, cached.mountpoint); + if (cached && !strcmp(cached->subsys, subsys)) { + if (strlen(cached->mountpoint) < maxlen) { + strcpy(buf, cached->mountpoint); return 0; } return -1; @@ -91,8 +91,13 @@ int cgroupfs_find_mountpoint(char *buf, size_t maxlen, c= onst char *subsys) free(line); fclose(fp); =20 - strncpy(cached.subsys, subsys, sizeof(cached.subsys) - 1); - strcpy(cached.mountpoint, mountpoint); + if (!cached) + cached =3D calloc(1, sizeof(*cached)); + + if (cached) { + strncpy(cached->subsys, subsys, sizeof(cached->subsys) - 1); + strcpy(cached->mountpoint, mountpoint); + } =20 if (mountpoint[0] && strlen(mountpoint) < maxlen) { strcpy(buf, mountpoint); --=20 2.41.0.rc0.172.g3f132b7071-goog From nobody Sat Feb 7 18:20:10 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0CE56C77B7A for ; Fri, 26 May 2023 18:35:55 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S243503AbjEZSfx (ORCPT ); Fri, 26 May 2023 14:35:53 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44902 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S243249AbjEZSf0 (ORCPT ); Fri, 26 May 2023 14:35:26 -0400 Received: from mail-yb1-xb4a.google.com (mail-yb1-xb4a.google.com [IPv6:2607:f8b0:4864:20::b4a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9570D10FF for ; Fri, 26 May 2023 11:34:49 -0700 (PDT) Received: by mail-yb1-xb4a.google.com with SMTP id 3f1490d57ef6-babb78a3daaso1411122276.1 for ; Fri, 26 May 2023 11:34:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1685126084; x=1687718084; h=content-transfer-encoding:to:from:subject:references:mime-version :message-id:in-reply-to:date:from:to:cc:subject:date:message-id :reply-to; bh=bJF+qzVTbz8URltVyp28Lcb70/4s1v/RxMVJtiGJPTs=; b=Oo93B8xhgldm2cYdd68btGpV2pdvkwlHBWlxS5icl4+MgjgBAVpiUfPCGdKNVjaXOy nbHfYV37Ct84mF/lYACTfPM8+Y+S5tlr/K7ZfXUgfvjx+acs9EiplHZGGC281lJ16CL2 Rrwl7xcyB6QP+Pl7+72nAynawHHp4GqgTuZsZjj5k8BVPsqY5p+D2Y27WSTxTmq7DNmX X13xkE85m9vha/HAfVfZxxuL3WCs0S75DgczoEJqeiKBYRbGG1UhmMBepHt60U4692/U PSJZnP9nHn6WRIV9SPU7i1Sj9dXyhbsBB7wrhYKTQtO9RjYfyA1wEky8z6Bwq1tBIZry WjWA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1685126084; x=1687718084; h=content-transfer-encoding:to:from:subject:references:mime-version :message-id:in-reply-to:date:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to; bh=bJF+qzVTbz8URltVyp28Lcb70/4s1v/RxMVJtiGJPTs=; b=hq4w7L1mtIwnDhqn7AudDDj6EiI6+a9VfYS3G5CvLvGHWMNpa88pqM5WhegegZTgaO ibBsHCwcpvfxM2avXQuvqaIXgyoQHhWGWzsx6gZSUB1gk8oS+oLPjD7sIDS4nYBt1z9+ 0S4R3ViUGh0z6w5sDOWIolaGBZ7BL904HZH+2GGPOUpmkyHSejGb1CRdPibyqsZudGU5 9B6AbvyzFolfLpcbWCmRHzZCm/bRdS2UPZsSYQi9B7uZwfWyt5EbhgJdvLYqdhPNri52 I4Z7TqUxvDYxarJonexXsgcLlqBPoomwgq2ntryUUlHdH8LDNYc0caXN6JyCYJtiQsAX PjJg== X-Gm-Message-State: AC+VfDzxwYTBeeeBW8b2ZrTA4o5FBT3Zq6KRDlJ8VzfQhf1czEK/haqu Xr+o0tU3LIAYiGnT96+2bmrKjHTjdiE8 X-Google-Smtp-Source: ACHHUZ7nUrl4nIdvoUhRMjP56HiICrfn58XtXvw8FJD4ZtvRrtJXUh6CGXhYHum1JvN6Q2M/EhdiEl8lmy73 X-Received: from irogers.svl.corp.google.com ([2620:15c:2d4:203:3b4e:312c:644:a642]) (user=irogers job=sendgmr) by 2002:a5b:644:0:b0:ba8:4c16:78b7 with SMTP id o4-20020a5b0644000000b00ba84c1678b7mr1394238ybq.12.1685126084648; Fri, 26 May 2023 11:34:44 -0700 (PDT) Date: Fri, 26 May 2023 11:34:00 -0700 In-Reply-To: <20230526183401.2326121-1-irogers@google.com> Message-Id: <20230526183401.2326121-16-irogers@google.com> Mime-Version: 1.0 References: <20230526183401.2326121-1-irogers@google.com> X-Mailer: git-send-email 2.41.0.rc0.172.g3f132b7071-goog Subject: [PATCH v2 15/16] perf test pmu: Avoid 2 static path arrays From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Mark Rutland , Alexander Shishkin , Jiri Olsa , Namhyung Kim , Ian Rogers , Adrian Hunter , "Masami Hiramatsu (Google)" , "Steven Rostedt (Google)" , Ross Zwisler , Leo Yan , Tiezhu Yang , Yang Jihong , Andi Kleen , Kan Liang , Ravi Bangoria , Sean Christopherson , K Prateek Nayak , Paolo Bonzini , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Avoid two static paths that contributed 8,192 bytes to .bss are only used duing the perf parse pmu test. This change helps FORTIFY triggering 2 warnings like: ``` tests/pmu.c: In function =E2=80=98test__pmu=E2=80=99: tests/pmu.c:121:43: error: =E2=80=98%s=E2=80=99 directive output may be tru= ncated writing up to 4095 bytes into a region of size 4090 [-Werror=3Dforma= t-truncation=3D] 121 | snprintf(buf, sizeof(buf), "rm -f %s/*\n", dir); ``` So make buf a little larger. Signed-off-by: Ian Rogers --- tools/perf/tests/pmu.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/tools/perf/tests/pmu.c b/tools/perf/tests/pmu.c index 3cf25f883df7..a4452639a3d4 100644 --- a/tools/perf/tests/pmu.c +++ b/tools/perf/tests/pmu.c @@ -86,17 +86,16 @@ static struct parse_events_term test_terms[] =3D { * Prepare format directory data, exported by kernel * at /sys/bus/event_source/devices//format. */ -static char *test_format_dir_get(void) +static char *test_format_dir_get(char *dir, size_t sz) { - static char dir[PATH_MAX]; unsigned int i; =20 - snprintf(dir, PATH_MAX, "/tmp/perf-pmu-test-format-XXXXXX"); + snprintf(dir, sz, "/tmp/perf-pmu-test-format-XXXXXX"); if (!mkdtemp(dir)) return NULL; =20 for (i =3D 0; i < ARRAY_SIZE(test_formats); i++) { - static char name[PATH_MAX]; + char name[PATH_MAX]; struct test_format *format =3D &test_formats[i]; FILE *file; =20 @@ -118,12 +117,13 @@ static char *test_format_dir_get(void) /* Cleanup format directory. */ static int test_format_dir_put(char *dir) { - char buf[PATH_MAX]; - snprintf(buf, PATH_MAX, "rm -f %s/*\n", dir); + char buf[PATH_MAX + 20]; + + snprintf(buf, sizeof(buf), "rm -f %s/*\n", dir); if (system(buf)) return -1; =20 - snprintf(buf, PATH_MAX, "rmdir %s\n", dir); + snprintf(buf, sizeof(buf), "rmdir %s\n", dir); return system(buf); } =20 @@ -140,7 +140,8 @@ static struct list_head *test_terms_list(void) =20 static int test__pmu(struct test_suite *test __maybe_unused, int subtest _= _maybe_unused) { - char *format =3D test_format_dir_get(); + char dir[PATH_MAX]; + char *format =3D test_format_dir_get(dir, sizeof(dir)); LIST_HEAD(formats); struct list_head *terms =3D test_terms_list(); int ret; --=20 2.41.0.rc0.172.g3f132b7071-goog From nobody Sat Feb 7 18:20:10 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 33EEFC7EE2E for ; Fri, 26 May 2023 18:36:05 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S237230AbjEZSgD (ORCPT ); Fri, 26 May 2023 14:36:03 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44262 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S243477AbjEZSfb (ORCPT ); Fri, 26 May 2023 14:35:31 -0400 Received: from mail-yb1-xb4a.google.com (mail-yb1-xb4a.google.com [IPv6:2607:f8b0:4864:20::b4a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id ECBDCE77 for ; Fri, 26 May 2023 11:34:58 -0700 (PDT) Received: by mail-yb1-xb4a.google.com with SMTP id 3f1490d57ef6-babb78a3daaso1411155276.1 for ; Fri, 26 May 2023 11:34:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1685126087; x=1687718087; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=7VTTKtJ+YCmNAzWS6HH1h35ihzZOE/hPBS/qDm91hC0=; b=RnExY6ZhiUsGU/Xentrdy3UMPkxwr6rNYwsycye1nTC7/8jZe1qfzeTGi8SBvaT+AV s1p20pEAtLwnLMgJ6JYIucfFa8uAD1GbQ5Jr3trkadq5Mf8R1bEXVSq7rvpSJ6fYxyhm i0DQjoDIb2JrxkF27AdoYZYTlIiCK4p/JIZv2TmSsaogeqt92G8VOk5D0VtrsRbHlKT6 RoL78G7gNEsM7X0ixUo7P18Hz0x6GOCwxyWj0/RZM5+6ev/AYhCS0PgNoZCdHZMWlkxy cMdedvwrzsAqeNOl/mkmD5TyA5RgkJoCvN6+EKvxR2cp4DIA8F7BzRc+x92ihrDxDFf1 Pk7w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1685126087; x=1687718087; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=7VTTKtJ+YCmNAzWS6HH1h35ihzZOE/hPBS/qDm91hC0=; b=hK2FDxzxqCx9XmTaAmSq9Wj3mBhTRsssGVaJVIvi4sF4AIM8nmP7n3vMQkZVo4/MQT jJs2nBKBnvK9lH4XotL2wlD87peBfhb2lS+dCkvodYq0tSEil/nBVGpIF4qU5CC6+7zL mcJllzikJvR8H+L8E6PaYNcErVqCswjT2pF10Nu5jxlLF4Tx7w+qDAY53dEhBiLqdv3P K4IGbXuCGLR5xNYmWC0bvMflwjtBAHAyTzgqzCebx29ji8wwm+Eol1MRd05/EFEVajJo tZc1QTWfKrFC9BNgpUZNbd5b8gDwSqmLy3UPl6JqY6PdC5uLtTbdSY2l4gvOpm65wgyl kCug== X-Gm-Message-State: AC+VfDztCeiBc+usu2xVqMdfwW11MwWuMn9f1KQsPjA2zekijvjmydB/ +3jgknbudHQUGOwKSTQ9kkrRK1i558Sp X-Google-Smtp-Source: ACHHUZ6VjiV8Ug0wv3GGrTVFrA/kp7xEirEOm2PN7sV0f+t+HxN+6Uw2r4vd73pfoFtHjbVNoFkMaHWU/AVS X-Received: from irogers.svl.corp.google.com ([2620:15c:2d4:203:3b4e:312c:644:a642]) (user=irogers job=sendgmr) by 2002:a25:2403:0:b0:ba8:8ab3:3806 with SMTP id k3-20020a252403000000b00ba88ab33806mr1305870ybk.13.1685126086892; Fri, 26 May 2023 11:34:46 -0700 (PDT) Date: Fri, 26 May 2023 11:34:01 -0700 In-Reply-To: <20230526183401.2326121-1-irogers@google.com> Message-Id: <20230526183401.2326121-17-irogers@google.com> Mime-Version: 1.0 References: <20230526183401.2326121-1-irogers@google.com> X-Mailer: git-send-email 2.41.0.rc0.172.g3f132b7071-goog Subject: [PATCH v2 16/16] libsubcmd: Avoid two path statics From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Mark Rutland , Alexander Shishkin , Jiri Olsa , Namhyung Kim , Ian Rogers , Adrian Hunter , "Masami Hiramatsu (Google)" , "Steven Rostedt (Google)" , Ross Zwisler , Leo Yan , Tiezhu Yang , Yang Jihong , Andi Kleen , Kan Liang , Ravi Bangoria , Sean Christopherson , K Prateek Nayak , Paolo Bonzini , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Use a single stack allocated buffer and avoid 8,192 bytes in .bss. Signed-off-by: Ian Rogers --- tools/lib/subcmd/exec-cmd.c | 35 ++++++++++++++++++++--------------- 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/tools/lib/subcmd/exec-cmd.c b/tools/lib/subcmd/exec-cmd.c index 5dbea456973e..7739b5217cf6 100644 --- a/tools/lib/subcmd/exec-cmd.c +++ b/tools/lib/subcmd/exec-cmd.c @@ -36,38 +36,40 @@ static int is_absolute_path(const char *path) return path[0] =3D=3D '/'; } =20 -static const char *get_pwd_cwd(void) +static const char *get_pwd_cwd(char *buf, size_t sz) { - static char cwd[PATH_MAX + 1]; char *pwd; struct stat cwd_stat, pwd_stat; - if (getcwd(cwd, PATH_MAX) =3D=3D NULL) + if (getcwd(buf, sz) =3D=3D NULL) return NULL; pwd =3D getenv("PWD"); - if (pwd && strcmp(pwd, cwd)) { - stat(cwd, &cwd_stat); + if (pwd && strcmp(pwd, buf)) { + stat(buf, &cwd_stat); if (!stat(pwd, &pwd_stat) && pwd_stat.st_dev =3D=3D cwd_stat.st_dev && pwd_stat.st_ino =3D=3D cwd_stat.st_ino) { - strlcpy(cwd, pwd, PATH_MAX); + strlcpy(buf, pwd, sz); } } - return cwd; + return buf; } =20 -static const char *make_nonrelative_path(const char *path) +static const char *make_nonrelative_path(char *buf, size_t sz, const char = *path) { - static char buf[PATH_MAX + 1]; - if (is_absolute_path(path)) { - if (strlcpy(buf, path, PATH_MAX) >=3D PATH_MAX) + if (strlcpy(buf, path, sz) >=3D sz) die("Too long path: %.*s", 60, path); } else { - const char *cwd =3D get_pwd_cwd(); + const char *cwd =3D get_pwd_cwd(buf, sz); + if (!cwd) die("Cannot determine the current working directory"); - if (snprintf(buf, PATH_MAX, "%s/%s", cwd, path) >=3D PATH_MAX) + + if (strlen(cwd) + strlen(path) + 2 >=3D sz) die("Too long path: %.*s", 60, path); + + strcat(buf, "/"); + strcat(buf, path); } return buf; } @@ -133,8 +135,11 @@ static void add_path(char **out, const char *path) if (path && *path) { if (is_absolute_path(path)) astrcat(out, path); - else - astrcat(out, make_nonrelative_path(path)); + else { + char buf[PATH_MAX]; + + astrcat(out, make_nonrelative_path(buf, sizeof(buf), path)); + } =20 astrcat(out, ":"); } --=20 2.41.0.rc0.172.g3f132b7071-goog