From nobody Sat Feb 7 17:09:47 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 03B3BC77B7E for ; Thu, 25 May 2023 07:12:22 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238981AbjEYHMU (ORCPT ); Thu, 25 May 2023 03:12:20 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46766 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238906AbjEYHMI (ORCPT ); Thu, 25 May 2023 03:12:08 -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 02198E4D for ; Thu, 25 May 2023 00:12:02 -0700 (PDT) Received: by mail-yb1-xb49.google.com with SMTP id 3f1490d57ef6-ba83fed50e1so591511276.1 for ; Thu, 25 May 2023 00:12:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1684998721; x=1687590721; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=dNJ0JSFhRR08dujS92J3UXg3QUJTwNG/xlkH48LcHmA=; b=eJ/aqIq03f8tnjeZ1MgXCFXYAruTatREHTYsJ/irY7WETisT03N8hO8dtHNib2rzYc 7xMAw130VdlBKAgXT8sSPRy2MydV77sY5FKwBUGG1EX3+KqBG2u0aROkvlHXmfo9cSo3 FgzowShBJhYjRp7w1E06t52OpnHrOPXV4Royrom02WoyMpxBLxFsq/gFqYs1i97f2Pgs uwBe3KSWh/a8VUAj7K7jgbbkwmKMPAtBEEeAcHJx3FXsYl0H3UWwL4p60QmGnGiTgvKt wM39zlSA8ArutNp1bRi6+ObrcQ4yo0YqBdWFTjISsybgBsNXX00xlpHU6Bs2fltA2CbX oKfg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1684998721; x=1687590721; 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=dNJ0JSFhRR08dujS92J3UXg3QUJTwNG/xlkH48LcHmA=; b=hJ0jQZmbpmrKZh2RcSeoM6PPly8c2SP3ybuT8NsRR7bBSLqmyZ858hxClcqxQjrTKV CUzkKInIE1Kv2gjGCFRR6sbUdzTSO1q16fAjVfOvNkSUQbpQurGAqWFTNV93ZTzuTpcb HcbShFJUDxahIviEt6H1zaEH17+nCp5xVC2dfXpBUUZ7JCAMZ4XmLtuDmHhCKavmrJBk mk+akfTA4ofhO6KytXW7ye0BrpgrdDyNWFFRB0z1+NcC8R292q9rhRKb+kBnUY42NWKI /qPjDzU6dNfvG3iK6gSfk89MtB+5l/JF7m+lOjZEtgPtbUf7KkdfFhkysdEjThvVv3nW R6XQ== X-Gm-Message-State: AC+VfDy/u3zgeG7SLrKQyZIbz9lPgCvfMhmivuynwGMxwKb9yvaC7tFk XNnJ5S6ATLDAYZ0fxlQVfqGKvGHSyKsE X-Google-Smtp-Source: ACHHUZ6BmyCoXHTHVixcW18Nnib7Ltq6q9GOYchu1cJtE81jB75NnGPdMAhphoAQEyMa1J6SmiKEB9AxzIzS X-Received: from irogers.svl.corp.google.com ([2620:15c:2d4:203:7aa7:3d2d:76ae:8e96]) (user=irogers job=sendgmr) by 2002:a25:6584:0:b0:ba8:381b:f764 with SMTP id z126-20020a256584000000b00ba8381bf764mr1454787ybb.3.1684998721126; Thu, 25 May 2023 00:12:01 -0700 (PDT) Date: Thu, 25 May 2023 00:11:18 -0700 In-Reply-To: <20230525071133.2066610-1-irogers@google.com> Message-Id: <20230525071133.2066610-2-irogers@google.com> Mime-Version: 1.0 References: <20230525071133.2066610-1-irogers@google.com> X-Mailer: git-send-email 2.40.1.698.g37aff9b760-goog Subject: [PATCH v1 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 | 33 +++++++++++++++++++++------------ 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/tools/perf/util/header.c b/tools/perf/util/header.c index 2dde3ca20de5..80593ed8c79b 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,16 +1428,24 @@ 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); + free(nodes); + closedir(dir); + return -ENOMEM; + } + nodes =3D new_nodes; + size +=3D 4; + } ret =3D memory_node__read(&nodes[cnt++], idx); } =20 *cntp =3D cnt; + *nodesp =3D nodes; closedir(dir); =20 if (!ret) @@ -1444,8 +1454,6 @@ static int build_mem_topology(struct memory_node *nod= es, u64 size, u64 *cntp) 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.40.1.698.g37aff9b760-goog From nobody Sat Feb 7 17:09:47 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 4BF9CC77B7E for ; Thu, 25 May 2023 07:12:27 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239017AbjEYHMZ (ORCPT ); Thu, 25 May 2023 03:12:25 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46854 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238998AbjEYHMN (ORCPT ); Thu, 25 May 2023 03:12:13 -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 66FDCE58 for ; Thu, 25 May 2023 00:12:04 -0700 (PDT) Received: by mail-yw1-x1149.google.com with SMTP id 00721157ae682-56561689700so6270037b3.2 for ; Thu, 25 May 2023 00:12:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1684998723; x=1687590723; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=hra6WZ69L60AglI3672uw9bYTDH1KKdTR4WzF2eX2xU=; b=TA8mB11I1h+QeQQMXUG+vE9M/EN78BRwaxlLxUeqzVJ34TnG10IS0ugy3AVMvd9/xC eMPwd9a/QSq0g2ImBqKqt7J/QfGPS28JdZVv5y9SymqrKJdeoA85n3wRz88Y42poyCXf LTrwJ6kjvw5GcPH61PUch/P3C9WkzlUoESnNK825zrFM0TJZAalIEQakn7KWQ8T6s63P 5QsBLD9b6Z/MIUiWBm+ZmnOaq0fTx9MJJ336uGoTCx8VWt0UF6xr6eQrx8JJFkL6N1Gc ZFtC1f44h1U+lclYFbSBZNy9wNKyLL3C/P3j+JlWhhivKTQuB1oQzgNJr3cAWmbbTz0x nfXg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1684998723; x=1687590723; 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=hra6WZ69L60AglI3672uw9bYTDH1KKdTR4WzF2eX2xU=; b=R1/BQ54Hp/LrdpDM8PApK4co+LXIY6miI/IQ4kC3/ZtGZYHFQxurt03YoHQboxVQgI v8evc7ktafK1zuvwm3EbWIQoORorN+kyQ/6sPbvisDI7dKzF4Ud5w2k6+TsxSkk/+oY6 0VU3oV+5vC+uA4cLmE9ZE/EjupDFJNQM573lsQy5Tq59AYsVo1Q5o5NKO49lsiNBxzZy LuzKjAugiAdqvTyPtyG4cs2ntn6zdrCMXjLldYxYNaINedi8qZBZbzUrJDLM2bm03odY yV0MrdKcPBcfr9yxXHi//lSSITSZHZOrCAb/RT1DDU+fqwTu//2armqSwlApkZtFbpuK kV9A== X-Gm-Message-State: AC+VfDxQpj/bHxE1aRJ3l8MmKsXUJ6o2wcdh6Ex2pBC0OEgLjPV60z4d PJKmURKEwIxLYmW4WhaRLQRPw+0mip3w X-Google-Smtp-Source: ACHHUZ7jaebbxMj65Qp3RY/tMW9DiUNK6wQ5cXeeS7I29t97r1ExaRLt2iqCakfQG8xC2up0vFMD8BAVirTh X-Received: from irogers.svl.corp.google.com ([2620:15c:2d4:203:7aa7:3d2d:76ae:8e96]) (user=irogers job=sendgmr) by 2002:a81:ae09:0:b0:55a:8930:b13 with SMTP id m9-20020a81ae09000000b0055a89300b13mr12708203ywh.9.1684998723538; Thu, 25 May 2023 00:12:03 -0700 (PDT) Date: Thu, 25 May 2023 00:11:19 -0700 In-Reply-To: <20230525071133.2066610-1-irogers@google.com> Message-Id: <20230525071133.2066610-3-irogers@google.com> Mime-Version: 1.0 References: <20230525071133.2066610-1-irogers@google.com> X-Mailer: git-send-email 2.40.1.698.g37aff9b760-goog Subject: [PATCH v1 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.40.1.698.g37aff9b760-goog From nobody Sat Feb 7 17:09:47 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 38CCCC7EE2F for ; Thu, 25 May 2023 07:12:34 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239265AbjEYHMb (ORCPT ); Thu, 25 May 2023 03:12:31 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46768 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239023AbjEYHMP (ORCPT ); Thu, 25 May 2023 03:12:15 -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 3D1A5E5D for ; Thu, 25 May 2023 00:12:06 -0700 (PDT) Received: by mail-yw1-x114a.google.com with SMTP id 00721157ae682-56536dd5f79so6980187b3.3 for ; Thu, 25 May 2023 00:12:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1684998725; x=1687590725; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=SlPCaRU+xHpyvioAMBbcb2cR7GEOpahymP580BUT4pI=; b=M6eC7xv1W49Kd+3AAhL16c4FxlLAHUGtjeSE3jeiHUFigV8dfF2e0FuBIvWEhAm9xa Wybcgh7qY65Mal3Nz0SyQfniolccJN95JfAnWffnzmJv070XF9OJFuFoTNKyaHjifl1s U6M03gV3GMRDxp7ZR3pc0IIaOLUzqK/bsSv+HIlvvAZz8SUyB+a5uF4EA3HKwAgRjXCd dgHYmML0KaPHZ2t7f80SX4LrAJKx3PZr1+OToNMlkx2zdPkT1kcJ0IxfKeyPZ/umqH1w 11i2WaL6LmX9aMuoc5pKrcWE7lnjsL4/dOOdcfvNw6wulUf+WjOvlW9vBZ9G5bLeNyz+ ZEYg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1684998725; x=1687590725; 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=SlPCaRU+xHpyvioAMBbcb2cR7GEOpahymP580BUT4pI=; b=OA2RRucb2i9e0kecp9Gn/WVGOkiahenmXzrUpU2oZYu63LP7J7QJf0alhrLwU5zQQg 1LsNaKJT+EVQda5gMEaS1roncroQLv4J0KJuOJFFuOHgD1W7RfLaOWXDlGxk07DmanIj njwH4MHG5y/LyZ8MfSFEz7mwp6/SvIFWrgqxc1cbeJOPn4B8+1+ouX3oZDzGH6j18fRu APx5EaT3TM78LP708IbZiKW7yrPsaKVcqNQq2CBlED86uzRbFrjAmaa8YfLSjWlhktq/ Jl6MVZovuEnBXOV07bNm5lkpPD8oJ6NHHB1Ublz8SHsae7EVBhM7dPggUIetuWU61RvW rRDg== X-Gm-Message-State: AC+VfDwh/OqYj/itJZRhcgmAZPJjYiZ4aLiTzL0iIQzmmrLDz2cp27jx rxBXcr+ay1TwvS8w7zCCw0tEjMRDtFjq X-Google-Smtp-Source: ACHHUZ5odFseIone018NrJslT74WKcaZ+KqvkC0Y8yT+cUfEo8eJExKfPDO0M2qefVV3PFJdZ1ON1G3gJ82k X-Received: from irogers.svl.corp.google.com ([2620:15c:2d4:203:7aa7:3d2d:76ae:8e96]) (user=irogers job=sendgmr) by 2002:a25:ae26:0:b0:ba8:2e68:7715 with SMTP id a38-20020a25ae26000000b00ba82e687715mr1665664ybj.2.1684998725497; Thu, 25 May 2023 00:12:05 -0700 (PDT) Date: Thu, 25 May 2023 00:11:20 -0700 In-Reply-To: <20230525071133.2066610-1-irogers@google.com> Message-Id: <20230525071133.2066610-4-irogers@google.com> Mime-Version: 1.0 References: <20230525071133.2066610-1-irogers@google.com> X-Mailer: git-send-email 2.40.1.698.g37aff9b760-goog Subject: [PATCH v1 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.40.1.698.g37aff9b760-goog From nobody Sat Feb 7 17:09:47 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 85DBDC7EE39 for ; Thu, 25 May 2023 07:12:38 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238910AbjEYHMg (ORCPT ); Thu, 25 May 2023 03:12:36 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46906 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239059AbjEYHMQ (ORCPT ); Thu, 25 May 2023 03:12:16 -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 61102E67 for ; Thu, 25 May 2023 00:12:08 -0700 (PDT) Received: by mail-yw1-x114a.google.com with SMTP id 00721157ae682-560ee0df572so6392397b3.0 for ; Thu, 25 May 2023 00:12:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1684998727; x=1687590727; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=9bvqtZMaMVahHc8ltlI3yqPqIhhKvYIIrry65zbvjgo=; b=EvcEKepfQlDZdXfQ2topr18fG5SgrGkMrDGb6bXKfsk/E6u1iQDlvCXGEGeZSSJTY6 j45Ul6s9ALG3dcVd6GYYuVE1gfcG593zZg6kIDNpNGJcV0JsjCBqSe9v+QKUrlUtA4VW 6Z3iggxFzx2IKvwZaQ0Fr7Vrf9UrGS1G7IkwdNz0DF+AOVHcFcltf4ntb965lpeavXUX Eb3ksymwuH5wsVSv8xCnWbzN1Zq+CqWsqaqU1q+ONLCrRh0pZcM3JaobX0M/j9uKcH+D 5YzBfhYJ7kXUv66f5KL2IQjA0oRxEAyJ/+6bgN0MgEtSyGKJ+le0h0b0VD/pj9jodrJc vB0g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1684998727; x=1687590727; 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=9bvqtZMaMVahHc8ltlI3yqPqIhhKvYIIrry65zbvjgo=; b=SbDLLBsGBXOUDUG5L4oyVzeUPT3fJGKeaMnmqd+wQr6ZY1yLDIrDIk9vwBFjE9ubjk 9ldembnOSyL3Y4qc8I/ZPRrNRx/VQjQRCWPbUn+EyOgqSH6U1ITyABL0Id+gh6WyhAS+ kgZRuT9gxnWaXTKVJEQvKyKEgG2xC/TPl0opbZe1Ag6h2SGizGwFze9dfRFLdSIVANbu BjSqcbaDLex3uWX6JP9ipb/Hybx3UF2WTqNEmcw1n2rOySDuGrv15trxmWQxetImgDYG wAmphzRNAqYKH+9LLBKLRTH7+oruQf233LHGz7Oq/xw1JPUxiklwd9E9aOBNl+BCUFle eSGQ== X-Gm-Message-State: AC+VfDzhMSHQ8p2QhefFp8aVwt57cWwuUXtIZr25Umbax4A8EsWKKtG4 zdgFt3MUyL6+R8E5vbItFym0F9KdBz63 X-Google-Smtp-Source: ACHHUZ56KoRTg/8ZXkf+D/nXzC02q/vPfTREgKGfzN/3AV1a3sK4SMMvyr8WnSGo/ZkUQ9R4J0CmfpfV9C6Z X-Received: from irogers.svl.corp.google.com ([2620:15c:2d4:203:7aa7:3d2d:76ae:8e96]) (user=irogers job=sendgmr) by 2002:a81:ad27:0:b0:561:8fc0:24af with SMTP id l39-20020a81ad27000000b005618fc024afmr12304352ywh.9.1684998727652; Thu, 25 May 2023 00:12:07 -0700 (PDT) Date: Thu, 25 May 2023 00:11:21 -0700 In-Reply-To: <20230525071133.2066610-1-irogers@google.com> Message-Id: <20230525071133.2066610-5-irogers@google.com> Mime-Version: 1.0 References: <20230525071133.2066610-1-irogers@google.com> X-Mailer: git-send-email 2.40.1.698.g37aff9b760-goog Subject: [PATCH v1 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.40.1.698.g37aff9b760-goog From nobody Sat Feb 7 17:09:47 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 EFDA6C77B7A for ; Thu, 25 May 2023 07:12:53 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234573AbjEYHMv (ORCPT ); Thu, 25 May 2023 03:12:51 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46924 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238954AbjEYHMR (ORCPT ); Thu, 25 May 2023 03:12:17 -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 8E86DE74 for ; Thu, 25 May 2023 00:12:10 -0700 (PDT) Received: by mail-yb1-xb49.google.com with SMTP id 3f1490d57ef6-ba82ed6e450so538142276.2 for ; Thu, 25 May 2023 00:12:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1684998730; x=1687590730; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=SUCIph9jK5qjiaVbzBCW9jd0y4OBlbaAbGAhyKWQXwI=; b=Ud1pJbb8PouEaxMx39Qsb0pgXQhuacyg9dE15yBm5r7rhKMfmT/wtYE2bXvB9haeyo BUBUKC8ETaG4qAGi43orR7MBCDD3xmJ0ggNCx/vfVb0gwfAPQnuhooRT2CMQb9SDBlej aeuAnMX/JNhCmbxg7K4mABEvgSx55qB0QBWlNojB1OzD6HniNhvVSXqsOrZTo2JeLiQ2 AqnarGa9CWEnF2Ot0/Ipz5Slnp3JLrSRn6xuYI+mxDu6NEXLWJOn+9Ql5p4km3xx2FO7 eeZs0v7UgYnrvrpw64ig+vyli3RyuBx44SDd8pzAjOE244wfPz1Sld6TGQMAJGA8zoNr W88g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1684998730; x=1687590730; 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=SUCIph9jK5qjiaVbzBCW9jd0y4OBlbaAbGAhyKWQXwI=; b=EaDWpTbUH/z/215+Tk7EyZmxchr38CPBkRIEDwwnTp7wHFnq/gDgktHnQJtadZT5Ws sRL5YnIFWAqH4N98l41udu758+JoBGD7LkKkoNXjJq1isRHbOyyNCkdTioEpEx2rKCPU mbxbQPDJw3RnJXl9u0do+yMtY+fqr63Wxfr2a7IsVoBDtHKjXuPHwmftbq+sipUONaSZ dciRrI+yyGr3MTg3jUTYgnDYAHfUOMLx0dJmgmMN5SB59QaZWezXJGI6Rb4eIohR4c8g H+Ok6WNelBRf7c1F+q1Ofl0O0GR4ABsPxe1K28DSi3nQGl2HtxB9nIaRO4BVNje6flyd YAtw== X-Gm-Message-State: AC+VfDxnkioxirxW7UqDvBJO9pfOZ0ep5dA6rqhuakBYGcUBqB4lA5U8 S1LZ8vqnYrs9EBqMF67k+RLN84jlFatd X-Google-Smtp-Source: ACHHUZ68HRyMlyMUL7VBgU/YBf0IxbbVeqtg8y5j3FkwNP9nVcYZcks0CIY+Vf/g6P81tElQnzKI+NlxoEYW X-Received: from irogers.svl.corp.google.com ([2620:15c:2d4:203:7aa7:3d2d:76ae:8e96]) (user=irogers job=sendgmr) by 2002:a05:6902:118e:b0:ba7:5bec:7772 with SMTP id m14-20020a056902118e00b00ba75bec7772mr1217518ybu.5.1684998729741; Thu, 25 May 2023 00:12:09 -0700 (PDT) Date: Thu, 25 May 2023 00:11:22 -0700 In-Reply-To: <20230525071133.2066610-1-irogers@google.com> Message-Id: <20230525071133.2066610-6-irogers@google.com> Mime-Version: 1.0 References: <20230525071133.2066610-1-irogers@google.com> X-Mailer: git-send-email 2.40.1.698.g37aff9b760-goog Subject: [PATCH v1 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.40.1.698.g37aff9b760-goog From nobody Sat Feb 7 17:09:47 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 DCAF8C77B7E for ; Thu, 25 May 2023 07:13:01 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238760AbjEYHM6 (ORCPT ); Thu, 25 May 2023 03:12:58 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46936 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238973AbjEYHMR (ORCPT ); Thu, 25 May 2023 03:12:17 -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 81003E78 for ; Thu, 25 May 2023 00:12:12 -0700 (PDT) Received: by mail-yb1-xb4a.google.com with SMTP id 3f1490d57ef6-ba8cf175f5bso641718276.0 for ; Thu, 25 May 2023 00:12:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1684998732; x=1687590732; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=TpVpkWx/imTLr00+GTEXOikPom8bv+ZS7bO2wV57MhQ=; b=ZI9YPnE7qzrf4v6f+4zTWZMVj+saUiQ+EL1pEZ5JGh+ACoc3fTXdI063HcauKL4I87 52sOiKV576htS4W7uIXo/K6XtSaFRi5eDFgjw+UW384XvR5VObuags4MY+lrz3CTau7g hqQ8MZ6CbG/dQPdneqTkyRVZoEeCZV5DjuvN8WTK0/z+HAKlTJoFZDQAfHixW8MvWCe4 8ETSjjIayFzNYxcThELrlwF2P7b0HluQnQQgKT9Sd2jc2C8Vf31w4wt5X0B/CLGA5X2x UeM6q/Goi6F6rPIO8oHJ1BwjHi3nS8Q3JhKIfSUOnDZFywFMYER1RFETapM17azFgky4 FWTg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1684998732; x=1687590732; 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=TpVpkWx/imTLr00+GTEXOikPom8bv+ZS7bO2wV57MhQ=; b=E9SXuF3YiuBwt8DjR05YlcHZlPdiOo+uKqp5vTfnPSbAHKJaaIGLrCSBaolKkp9IBK MVI685pdY4tRABfp5tbKBFcLdo7nTY1qI58/eBTLF4vjHmGZG2hG+7M+5uBFuJjEcfC9 a6pFVmIeJsGqHuH1X4WZLzai2hBu2gUpSvssTFLsz0Lex4T3CN4wDl+ya8t1kND0lE+N G7056+IaqXKHBHNkbuwOI6EsSx4D5kC1D8QRy1/DTBTkoBUlgwHMtyAqg2+PTUITyvJV WCOatsLUnCS6J4nPTI7/G79CoApDIeokjJvmlch1RIGYJ4JBSs+t+ks7OsKsEjGJwsIq +DDw== X-Gm-Message-State: AC+VfDyP+c6nnvNYugLdf8FXbOVzc370CJMvY48V43i93SQgBcWii/pt Ity0PnzoX1u8AqelJRjP/yOmuU77FSiq X-Google-Smtp-Source: ACHHUZ4FhRQ9GF1LL7ag+4vEDk4EggmhjC5bOe2EKtfFPgW4t1biKjtiQOAoMMTb5I/RPH0pA4bjTNsi+zo6 X-Received: from irogers.svl.corp.google.com ([2620:15c:2d4:203:7aa7:3d2d:76ae:8e96]) (user=irogers job=sendgmr) by 2002:a25:d68d:0:b0:ba7:8628:93e2 with SMTP id n135-20020a25d68d000000b00ba7862893e2mr1543082ybg.4.1684998732197; Thu, 25 May 2023 00:12:12 -0700 (PDT) Date: Thu, 25 May 2023 00:11:23 -0700 In-Reply-To: <20230525071133.2066610-1-irogers@google.com> Message-Id: <20230525071133.2066610-7-irogers@google.com> Mime-Version: 1.0 References: <20230525071133.2066610-1-irogers@google.com> X-Mailer: git-send-email 2.40.1.698.g37aff9b760-goog Subject: [PATCH v1 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.40.1.698.g37aff9b760-goog From nobody Sat Feb 7 17:09:47 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 4C3ABC7EE2E for ; Thu, 25 May 2023 07:13:08 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239441AbjEYHNF (ORCPT ); Thu, 25 May 2023 03:13:05 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47006 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239118AbjEYHMW (ORCPT ); Thu, 25 May 2023 03:12: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 32E3CE47 for ; Thu, 25 May 2023 00:12:15 -0700 (PDT) Received: by mail-yb1-xb49.google.com with SMTP id 3f1490d57ef6-ba8c3186735so529537276.3 for ; Thu, 25 May 2023 00:12:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1684998734; x=1687590734; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=Uig2l1ENW/mdXFGb6s2gWNQOI7wDuYaOhOqcyff66lU=; b=WFkyDn+GM9s1OIHNVKuObZVdfyEZgexFdMsTstTrvYmg9t0RLdNZwjobMYNXSiayqX khdAEV+aAP+kS+KCdxiXzwt7cFGQekt2njUxpoLxg5X5nXeYUFBVxaCHh8k7FsxIAa19 eJMSph0uDPi+oHI37ag0tTtjJHP6wcgWD1YGT8mxGrbueNL9TqBDYv6xD9nXfZcVOG3D M1JYUzFkmRoKy89SbJud+5Aiy165HXKl1JUVzhZEgqAbX+N6Y5Cm4DsH2R75XtuDNPbj 4Px/9KkCG1kgjvpLPmH7/005l1lS0MEqo7SWmP+4ScZUAFd8tXIU7GgquBDoQ6Ax2Xhz UzOg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1684998734; x=1687590734; 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=Uig2l1ENW/mdXFGb6s2gWNQOI7wDuYaOhOqcyff66lU=; b=cFZus7+QttGAxekP1BAQbTJDpR9WloNb3A32gRa9RSr9tRjPcKtc/uGKetXYuqQw/G sU/l5V+N4utMiQznwip4XSNk4hldX3KJOgf96eevIOF5QUzT4uXSv44WFszGAUzr+CaX hdxHKNsPPnnI82+998NNin5ZKjUj45mr4gMif40qt7wTSvzCYecdKHm9GCQGc3m9L75k mn09IOi4sYZUsLgdawMvwAlbJSwXJYkq7av7GNFYYVMu/8xBQV3iuhcENnYapinPo/pe /Pori0g0hepy+I4UEBdwV6cYljMmYFR4p2EiR4POT/FR1PQRmYnDfEySRWHydHgtSPqi hBNw== X-Gm-Message-State: AC+VfDyC7wYCw5TmcRMV2bLkkU+Zyd9dX7mvSwMLH27yLBjZKcD1NMGr 2PjsfVl+EOVPEfXMcvZyBiU9NnZbZpNW X-Google-Smtp-Source: ACHHUZ5yqtiQnY7SZWdEmci8o4nFxrT52OQmcvPZ769+IpbJUqBpS9Sahk1sEapJJzGEI75KmWqAlmB6gHKV X-Received: from irogers.svl.corp.google.com ([2620:15c:2d4:203:7aa7:3d2d:76ae:8e96]) (user=irogers job=sendgmr) by 2002:a05:6902:1813:b0:ba8:4000:d7e1 with SMTP id cf19-20020a056902181300b00ba84000d7e1mr1224821ybb.2.1684998734413; Thu, 25 May 2023 00:12:14 -0700 (PDT) Date: Thu, 25 May 2023 00:11:24 -0700 In-Reply-To: <20230525071133.2066610-1-irogers@google.com> Message-Id: <20230525071133.2066610-8-irogers@google.com> Mime-Version: 1.0 References: <20230525071133.2066610-1-irogers@google.com> X-Mailer: git-send-email 2.40.1.698.g37aff9b760-goog Subject: [PATCH v1 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.40.1.698.g37aff9b760-goog From nobody Sat Feb 7 17:09:47 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 3D643C77B7A for ; Thu, 25 May 2023 07:13:11 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239161AbjEYHNJ (ORCPT ); Thu, 25 May 2023 03:13:09 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46874 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238998AbjEYHM0 (ORCPT ); Thu, 25 May 2023 03:12: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 A0C28E4C for ; Thu, 25 May 2023 00:12:17 -0700 (PDT) Received: by mail-yb1-xb4a.google.com with SMTP id 3f1490d57ef6-ba83fed51b0so392957276.3 for ; Thu, 25 May 2023 00:12:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1684998736; x=1687590736; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=JINgRbKyqeD/5xjEyB2Z8M27zbkpuoQ93P6f/ale0uI=; b=OP4afWsTIYHlIiVTegNyeLRIqJ2zMqeyRsGXo/7eq4nQ5gebMPUTViLGgtu89xP43w X25NyK2bhxqAHZtrw1issc4tRmXnff5EtFVyw+kq3E99WowlEQlVAV4935YOas6Bl/Bq LhMHBUoNbwpi0bpYt5T9maZQF4yoblT3yyX+IAZdUcmpyyuKxTOzG4miAldimh5JFUIB Hiu2a09aHEQYNjXmmZv0C//qoO+ntkS8zOpyqiIypFAXIpib6mKGDVU/UHRod0EfNM7Q nOsc/DeVMBBGfIoAUK4Fbqu4C3dpZ7W1WSvi/0P4y2uIevkTZhzXlmn9TyFaWIKeHC/j G8xA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1684998736; x=1687590736; 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=JINgRbKyqeD/5xjEyB2Z8M27zbkpuoQ93P6f/ale0uI=; b=OTt4vhmOHSyKpyGoFLM2D0FjycajqHp5qBzJSUpZ5UXmCi5j7n+d2ejRTrraLHOhYL w2CZKKmEH9SnYAl5KmvousH5gCkcjQiRXKOpKVApvmDWkbP7wUpSt6tsqG9Di6k5nuMH PGfdUWNR0gWnF19l5kCkQxHv2dkylJCDMMswbd8kt6NR+BpeN7ewiT5vd7MFUMTaE0l2 ChEHutaX29dh90bcegG2DVXsFjcT8ANGHn+jV1uVfSurxhEi0cdxv8RGsCNznCuQghJp Dq2V52j2b3w+xcTG02Ky+KzxXry1CqkxCVnbqnznq3MypcIg9slrFzdSFdctvyRXMt3H NoqA== X-Gm-Message-State: AC+VfDxNjxLxip3/sKjE5Hr1tfpCeFOjoacu3KFCG9ICnnciTevgWgJ6 UvqPTjnAQFwS19fZhznA9Y3OOQBNzOaF X-Google-Smtp-Source: ACHHUZ7sbw6AbhpElOgagS6t6+PV+X3bd3rUnq9Dqsw9hU6xB469HNKeglXDNdx1ojU0xz8YM86WvVJWnJUg X-Received: from irogers.svl.corp.google.com ([2620:15c:2d4:203:7aa7:3d2d:76ae:8e96]) (user=irogers job=sendgmr) by 2002:a25:7456:0:b0:ba7:1499:e202 with SMTP id p83-20020a257456000000b00ba71499e202mr1646377ybc.7.1684998736756; Thu, 25 May 2023 00:12:16 -0700 (PDT) Date: Thu, 25 May 2023 00:11:25 -0700 In-Reply-To: <20230525071133.2066610-1-irogers@google.com> Message-Id: <20230525071133.2066610-9-irogers@google.com> Mime-Version: 1.0 References: <20230525071133.2066610-1-irogers@google.com> X-Mailer: git-send-email 2.40.1.698.g37aff9b760-goog Subject: [PATCH v1 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 | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/tools/perf/builtin-daemon.c b/tools/perf/builtin-daemon.c index 34cbe3e959aa..adb5751c3ed0 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,15 @@ static int __cmd_ping(struct daemon *daemon, struct = option parent_options[], return send_cmd(daemon, &cmd); } =20 +static char *set_perf_exe(void) +{ + char path[PATH_MAX]; + + perf_exe(path, sizeof(path)); + __daemon.perf =3D strdup(path); + return __daemon.perf; +} + int cmd_daemon(int argc, const char **argv) { struct option daemon_options[] =3D { @@ -1503,7 +1512,9 @@ int cmd_daemon(int argc, const char **argv) OPT_END() }; =20 - perf_exe(__daemon.perf, sizeof(__daemon.perf)); + if (!set_perf_exe()) + return -ENOMEM; + __daemon.out =3D stdout; =20 argc =3D parse_options(argc, argv, daemon_options, daemon_usage, --=20 2.40.1.698.g37aff9b760-goog From nobody Sat Feb 7 17:09:47 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 1BDECC77B7A for ; Thu, 25 May 2023 07:13:19 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239227AbjEYHNR (ORCPT ); Thu, 25 May 2023 03:13:17 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47100 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239192AbjEYHM1 (ORCPT ); Thu, 25 May 2023 03:12:27 -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 AD3D6E55 for ; Thu, 25 May 2023 00:12:19 -0700 (PDT) Received: by mail-yb1-xb4a.google.com with SMTP id 3f1490d57ef6-ba83fed5097so629867276.2 for ; Thu, 25 May 2023 00:12:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1684998739; x=1687590739; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=ggTb6f0gA72Brkbk+lLnAHMXMj4Nzlq459y7w+X8s+M=; b=zya5huYBVKCG09FY59/9EdJFJ2gtw3RbTIm4L55BBG4PT8X/b9MS0BN14J4TKX+lMm IkFOIuPFZ707dsTexrCX/BMGBrjuOmazCA/KpqQ31nhcJCrHCuMwxRGCXdateaDifYsP +bqt+5PF4GgP5c+wrtqg6ILOa/6evCiGQAoR1k/Hu4+5xpIDLomMz1r/vAe7soVeoX8g YyUP8Jh6iKavD1b8sNyutgDqZTLf0Hp2jFHIY8cXwcZ6XTEikRZVK3nJHUYmCmzO0FZb 9qvJlc5ZMY/CWUCxRaEbUFxBW2ho276N0givK7byEZJV1kmxegsZynwjUqTyBf63X5hJ pB2w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1684998739; x=1687590739; 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=ggTb6f0gA72Brkbk+lLnAHMXMj4Nzlq459y7w+X8s+M=; b=i1kBeZOJ/NACILuMsFuOn2EfG6zpnvutIDwPvxFCnkF5UJ9maOefVzW/x3LAAMv0yU ag1bEnoyXKci2nHzT4MGFmgB6f6PZjo0dTkMab8LET/Sgc8CLzjRLpLLqAWiz7FLoDw0 AHHN3iyh9gj/bLrL2ungru+9+DGNXS/rWDehhu48B70eSQODVJmrsddfAYW3MiVTzQdD ZDTJgTL7rz1Q4nx5/I60MCvXnhwVkTRJ8JNPsoVY433uyxBGXD6cqyVxKhSNYgD8xll2 jMHSwQgf6AOvgloUoz2XrMIW0O1txdYhvpWBShrlrHa1AlwlXjaGWdScAavJdf9EDbEQ MDOg== X-Gm-Message-State: AC+VfDxnuxjsH7DlpG6Yzg+0rslG1UCerDWe8g6ymCjpXIe6glkp5twQ Pa44mwuNXuSghea+HbFK8+Vsx2Afv7U8 X-Google-Smtp-Source: ACHHUZ7nBAXkL3/0TFHswcK9NCUCL+Ni/cvNuvpsdJBuVmg6LFyOPSr0UMvPxYD7FGLVdzpa0HosozU2iF0S X-Received: from irogers.svl.corp.google.com ([2620:15c:2d4:203:7aa7:3d2d:76ae:8e96]) (user=irogers job=sendgmr) by 2002:a05:6902:4ca:b0:ba8:84fb:6ad with SMTP id v10-20020a05690204ca00b00ba884fb06admr1696358ybs.4.1684998738824; Thu, 25 May 2023 00:12:18 -0700 (PDT) Date: Thu, 25 May 2023 00:11:26 -0700 In-Reply-To: <20230525071133.2066610-1-irogers@google.com> Message-Id: <20230525071133.2066610-10-irogers@google.com> Mime-Version: 1.0 References: <20230525071133.2066610-1-irogers@google.com> X-Mailer: git-send-email 2.40.1.698.g37aff9b760-goog Subject: [PATCH v1 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.40.1.698.g37aff9b760-goog From nobody Sat Feb 7 17:09:47 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 9979CC77B7E for ; Thu, 25 May 2023 07:13:23 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239058AbjEYHNV (ORCPT ); Thu, 25 May 2023 03:13:21 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47104 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239213AbjEYHM1 (ORCPT ); Thu, 25 May 2023 03:12: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 B8AFEE7D for ; Thu, 25 May 2023 00:12:21 -0700 (PDT) Received: by mail-yb1-xb49.google.com with SMTP id 3f1490d57ef6-bac6a453dd5so386798276.2 for ; Thu, 25 May 2023 00:12:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1684998741; x=1687590741; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=ZQssMmRP2wJKhvVAGwMQRvc8xRuelQIJF/8q4jupSGA=; b=TJiixVtMZeC3209DI4a+Wqx30PTkEqVQGLcWxbs3F7IGJl+lLRC446HR6cgLqKXR1S OBgBG2Jr6hiM1VFANKz2VttplxhD0MeHEobRtPMPmii8E5p1nUbjYW1TfMauo+SN28z2 lSI9iTRuICFrH1sYzHFOp7jdw/TUMpS8qPzZhxNgpVSEoF5Yn59/X292xPzEGADihn9b 4v368nxohDWEtYg6FgH814JHLFeI5At+Q/Kr2/7RkzlM6fmOgEww6L9R10qBz5AXOwjL u82znnd74OoTpBjEvnk4ohaQbxyAg0kjvdNlqCiW1pgSLJLj2f1cgVr4PXixn/TPlQd+ dM5g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1684998741; x=1687590741; 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=ZQssMmRP2wJKhvVAGwMQRvc8xRuelQIJF/8q4jupSGA=; b=fgv6bDHgUJgkBkZErcvcRlzUFrM3Xr5+vSvsprfopB6Qux4HvvF+NNU7HgZvQqhuxN ybThxgtj7igc9bVXdEHYbWLnVhZBaR/o/iaeRx5MlpsL5RgqiHrgvaqcfxptfljwGcGr fnckLQT34iLQlw2TvtkaZhCj1j7wpeqF/0ZQ2c10NmFhuPoiGiFWIodEsh8ajcJduUiR KBfeOz7Ynw/o3ZudMHvaY5Ik7bnG+BvfqKhtgpw/EDdIrzVruvNPoJoRYd+70v7667RJ x5EccRlX9ZyevgwaQbFX8ZttP/FNlhc2jfen/CodVUqRSk9mDLb+ruHStB/e+Q7fbSlx B9Tg== X-Gm-Message-State: AC+VfDxffmj5WLI8AVM9vau0+7VL82+uZtAH4IbhIty9VNSqTtKQQyZj 7ggsw9DWOwj/giQJi+KmoTOSt5FpmKp0 X-Google-Smtp-Source: ACHHUZ6dE51mtGFKTQu7+rwGV8dzbKxQILl/CC4V+X+bxRaBcGI79wTY5Ou0otAXiflY/HPYyXB8AgA9x986 X-Received: from irogers.svl.corp.google.com ([2620:15c:2d4:203:7aa7:3d2d:76ae:8e96]) (user=irogers job=sendgmr) by 2002:a25:2f4a:0:b0:ba8:3600:c3d0 with SMTP id v71-20020a252f4a000000b00ba83600c3d0mr1650408ybv.8.1684998740957; Thu, 25 May 2023 00:12:20 -0700 (PDT) Date: Thu, 25 May 2023 00:11:27 -0700 In-Reply-To: <20230525071133.2066610-1-irogers@google.com> Message-Id: <20230525071133.2066610-11-irogers@google.com> Mime-Version: 1.0 References: <20230525071133.2066610-1-irogers@google.com> X-Mailer: git-send-email 2.40.1.698.g37aff9b760-goog Subject: [PATCH v1 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.40.1.698.g37aff9b760-goog From nobody Sat Feb 7 17:09:47 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 B5E49C77B7E for ; Thu, 25 May 2023 07:13:29 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233092AbjEYHN1 (ORCPT ); Thu, 25 May 2023 03:13:27 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47150 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239248AbjEYHM3 (ORCPT ); Thu, 25 May 2023 03:12:29 -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 23CDD10C2 for ; Thu, 25 May 2023 00:12:24 -0700 (PDT) Received: by mail-yb1-xb4a.google.com with SMTP id 3f1490d57ef6-bac6a453dd5so386878276.2 for ; Thu, 25 May 2023 00:12:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1684998743; x=1687590743; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=uYmWmrVJRzjK/f+g53+3Cvg7rRYv/70UmHPYZe1x3SQ=; b=C/dez78d/o6CDLFZLCHmOqdwKTUZo59bmWx+BRLFutxoT1hl/gKpVVPsUia5DRXzdd TIxjTlm/h8EkAWLe1mQ8SIJlM5vC8PBhw1jMTFh0orsOCwNrOWAO6ea2nZxr9meykLDJ GcFJS36SXYlgJLpo0vXroZASvr/87/QNPJ3/8SldZDpZOCxAGIrSxKT9w1am1l3XoYtV xjoW53g5RPZKBRZrwtc7GZ5UDPaRT9533tSw/X0zWegPJh8a6j3ODoW8RvvoC2AiX37p Yiawc1tDOChUUr48Qe9KdR25uO3UisFcB8kC1txU8Xq6Od8ECwVXbQxJ0scax6DQqN9Z hfZw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1684998743; x=1687590743; 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=uYmWmrVJRzjK/f+g53+3Cvg7rRYv/70UmHPYZe1x3SQ=; b=Bo8SSkTietImDZe2soxSfLFFkzEEqLhmYOnwiFJ06JEM4kypgjUZ/Ze39uHEc1CNDD HHAiMrbtpo68e46G7c9nd4/4rvURQRIP4ubWBfNftpmNaTmVPWmGEY6ZshcYCBts/dy+ UNSqwIDSGE1X8pku9TwllHXOWhc/ieB/W+Wx5x1vV2f/9EJE0l2g+lB2L9y9+rHYsOOQ mqP9kXWy4eBdFAL1JbDsW8DIGcKgDC3pTcVZGP13qyhgnmcW4C6cBbRGY+SpvG8dDR7J yEs0ldreQetvqNPAxZJ7lljH3rFhaSTa5FtAQyKOQAyjD0zdJ6Z7r6qrXLytv6qFr7le Cnag== X-Gm-Message-State: AC+VfDzhJnJDJVZKlvbhMt6mNONQC1LBS/IkzFSjtbBlSRgwxH5ziK1I NxJzliCpkvss03w+/ZUcSpRqTNMhiJg9 X-Google-Smtp-Source: ACHHUZ6e2+i2YbKwMe3kzwSJASlhLWwjNr+cmN2wBNPWlle2Q/e5jSyzxUVFFss2Xnv7/ZFTFAK+Jh+trxX8 X-Received: from irogers.svl.corp.google.com ([2620:15c:2d4:203:7aa7:3d2d:76ae:8e96]) (user=irogers job=sendgmr) by 2002:a05:6902:b21:b0:ba8:4489:74c0 with SMTP id ch33-20020a0569020b2100b00ba8448974c0mr1681483ybb.6.1684998743374; Thu, 25 May 2023 00:12:23 -0700 (PDT) Date: Thu, 25 May 2023 00:11:28 -0700 In-Reply-To: <20230525071133.2066610-1-irogers@google.com> Message-Id: <20230525071133.2066610-12-irogers@google.com> Mime-Version: 1.0 References: <20230525071133.2066610-1-irogers@google.com> X-Mailer: git-send-email 2.40.1.698.g37aff9b760-goog Subject: [PATCH v1 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 --- 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.40.1.698.g37aff9b760-goog From nobody Sat Feb 7 17:09:47 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 4003FC77B7A for ; Thu, 25 May 2023 07:13:46 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239353AbjEYHNo (ORCPT ); Thu, 25 May 2023 03:13:44 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47372 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239272AbjEYHMo (ORCPT ); Thu, 25 May 2023 03:12:44 -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 CD2DBE5E for ; Thu, 25 May 2023 00:12:26 -0700 (PDT) Received: by mail-yb1-xb4a.google.com with SMTP id 3f1490d57ef6-ba88ec544ddso643665276.1 for ; Thu, 25 May 2023 00:12:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1684998746; x=1687590746; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=t2aELLGlNNj7hku9z1aRjQTB9lcqOk+GXPWkETSohOQ=; b=iKmBY0tqG9A4f90Oxzgc6K2d5FDijlR6/v662mMbKBcPRqpnrnSjeNQ7uLHcQRIBTo NVLKZoJchJNoH9E6Pj5fxuSPMsL3/V9+/OUlQeD/Ep+sGnWNQzPTpXKUp0WrFYdCkxJ4 Shs33MQyKnjbVs4/mxGIPse3SMm7jwWL8NKa3zwnotMaCxDgcId6Gu9t9SXMvsz7zo9z 8h85Bnl2M1psoVN2MJ/F+qD6BXzNjZp8WqAf6+CmyRDpeF+es9AeOBhKkTpiHFChXWXD Yzpb4QzvQzM+4Ze+jMf7XL6rm7M9fXrCyTok06hU5CT/sbzN/6IPRt6E3JMhJG3ySKvE R6Vw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1684998746; x=1687590746; 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=t2aELLGlNNj7hku9z1aRjQTB9lcqOk+GXPWkETSohOQ=; b=OD4vLJqKa24mTcb6xLUwGTGXR8xMuqMJUXEImB17+5/1kXTf4T4knWMeCsmIeSiwAs y0hM5Z0UutvkNluMalhvVGMGxRhI2r2Il8xFgBX80+rFHUrDr1dTfSJPp0PpHi2kuyb+ U9/iETlNJX/vLmC9EsQMaADUWeWighNZKzMeygmelxbetAWvYnmxXM6to0tLOvN02Tr8 A7xK+bUdXmqmi5SGMA4n9Ker2ml0pYQlpgwe52mC+ySINcqMRq0o9/HK1aZD194hEJe5 8UO1Yz+ANvll+l/QR1TMP2JOsONyGAdfdXKg/kko+bJSgqkKZtDtP1Usrc/BnG8zGbLa VWWQ== X-Gm-Message-State: AC+VfDy0aXCl9jfIJUkqq+Ti2kWVcWPUD0bXWMdovT+hqjhFYdeYP66s 8wfhMVcqK+9A+t3NYnlUFARfox+uNVxm X-Google-Smtp-Source: ACHHUZ7BinpmXpwKmORyqVBwqgT6XCjUR6ZaZ1Am4QsjEhiXgq8OGs7h5oRO7Y6iB2GePDNw0Tt/Fa69P3UZ X-Received: from irogers.svl.corp.google.com ([2620:15c:2d4:203:7aa7:3d2d:76ae:8e96]) (user=irogers job=sendgmr) by 2002:a25:ada1:0:b0:ba8:736a:5bec with SMTP id z33-20020a25ada1000000b00ba8736a5becmr1676397ybi.6.1684998745826; Thu, 25 May 2023 00:12:25 -0700 (PDT) Date: Thu, 25 May 2023 00:11:29 -0700 In-Reply-To: <20230525071133.2066610-1-irogers@google.com> Message-Id: <20230525071133.2066610-13-irogers@google.com> Mime-Version: 1.0 References: <20230525071133.2066610-1-irogers@google.com> X-Mailer: git-send-email 2.40.1.698.g37aff9b760-goog Subject: [PATCH v1 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.40.1.698.g37aff9b760-goog From nobody Sat Feb 7 17:09:47 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 4A475C7EE2E for ; Thu, 25 May 2023 07:13:50 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239428AbjEYHNt (ORCPT ); Thu, 25 May 2023 03:13:49 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47014 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231126AbjEYHMv (ORCPT ); Thu, 25 May 2023 03:12:51 -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 099D310EA for ; Thu, 25 May 2023 00:12:35 -0700 (PDT) Received: by mail-yw1-x1149.google.com with SMTP id 00721157ae682-5655d99da53so6064917b3.0 for ; Thu, 25 May 2023 00:12:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1684998748; x=1687590748; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=+m2pnwk7ltDlRfODCcS98B4qxXpyD/wmySMIwUeQIa0=; b=3I/660dhM9lZf9IEkWxnK7nkFcSifm+MxTnqZxo1HIHPCMgFuczZTKQKko9pimGaAR KW+h/lWcmmDUB+9Qg7oBkaoKx7ICAG0RlJufytpXp6OVeIbXCyTzUHolDfuCumgGvmdB LIs+TiP23mCsJk1FwJnI7NvdstKE0tOdKgPoDgWX2fj72g3/uk9lYvD+BF0NVW7zAfwh ryxOat6Q2JryQ6iERzMFybbEGHGN5Qsa3RdbftPt6jhgxH2bmxeTSnHUn1MFemcbjrJ9 ya4+m/9d4ZsQ2u2J6Yy911kLOaCi6VzjXq5eQ7ZVVuAiaul5sFY0NqAfbNfBgFUjqpD9 wNXw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1684998748; x=1687590748; 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=+m2pnwk7ltDlRfODCcS98B4qxXpyD/wmySMIwUeQIa0=; b=ZjYnQz5LyXICQDY2iqD9+XUccX/L2v+HkDrPeDLi0CuLtgakXTbForcCfKK0o+U8cd rfSrqs4kcu/0FRRi1usnGyBHv34CDcPFDolkxctDVzLOqDCPuY/5LAR+9ZcXRZhDrXAP A4cZ2mPM9rPsKVNOV3L3yH4OHX/t18GICtrP3bzYVVuSqLOsth7HOE2vd6F7Cjk37nfh HTxBK19poTXIbEYMh8HOD5+/HuF7MH3o/JBaGh2W9So5n5HQPIFNMkiYnlOW4iocnRQ5 XcqSN1c90S6AkVJ3v2c1+Ev9RzwOXgVVQLRS3zqJxErpNHaAObheWrXEBpH+/dEsyY+u u1OQ== X-Gm-Message-State: AC+VfDw+x/feXQ6Uv02fYzBNKhaMpx6F2iN4KgJhvU8u4Zn5xcLkWGMx 9IrF1L1URawFv5KfLWl5eDJdf1PDABdi X-Google-Smtp-Source: ACHHUZ56MPxsMx36Wz7nvFDJJuJBcGPxPIUE7ojVvrebDC27lXhEXg5YoRdSUiYt0XDG5gOoxyZPnmchi5ws X-Received: from irogers.svl.corp.google.com ([2620:15c:2d4:203:7aa7:3d2d:76ae:8e96]) (user=irogers job=sendgmr) by 2002:a81:ac07:0:b0:561:8c16:2b66 with SMTP id k7-20020a81ac07000000b005618c162b66mr1514887ywh.4.1684998748115; Thu, 25 May 2023 00:12:28 -0700 (PDT) Date: Thu, 25 May 2023 00:11:30 -0700 In-Reply-To: <20230525071133.2066610-1-irogers@google.com> Message-Id: <20230525071133.2066610-14-irogers@google.com> Mime-Version: 1.0 References: <20230525071133.2066610-1-irogers@google.com> X-Mailer: git-send-email 2.40.1.698.g37aff9b760-goog Subject: [PATCH v1 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.40.1.698.g37aff9b760-goog From nobody Sat Feb 7 17:09:47 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 3AB34C77B7E for ; Thu, 25 May 2023 07:14:01 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232180AbjEYHN7 (ORCPT ); Thu, 25 May 2023 03:13:59 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47100 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237564AbjEYHNO (ORCPT ); Thu, 25 May 2023 03:13:14 -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 5F0DB10F7 for ; Thu, 25 May 2023 00:12:39 -0700 (PDT) Received: by mail-yb1-xb49.google.com with SMTP id 3f1490d57ef6-ba8bab3b392so605991276.1 for ; Thu, 25 May 2023 00:12:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1684998750; x=1687590750; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=OOlx2WRh+JFuq5y5J1qgtXH5kcli3Ek1O+02SLEhl6g=; b=kmXVsTge4xmX+270y+4v3x5uW1+11ox1yW+hi9yEMgQn9sO0CHfD+VwreYbdFONYoN LjcOzr176iehQTRWpLbTvBtKPzDvkKPOHMOe5UJli8zL7Q/4efTzSwUWVeoLxMGAGIL5 52U1NI/uaGB+bmjAvbSlPl1I+T4m4aHFhvV1yeGgJzmXFBme6m9WwsXSRMKvyohQDQdH cRhImkqUfXu2cmZJRZ+7FtGsPaqchPbL/I0+x+Yxy7oWeIg2ikFVuyIm6Vf3Y9N+ZFFY A573FB21aZOIgWnAoW2z8qnTLF+RMR9aL76pKKyKZht6Sn0y9c3r/kQMunTjTkCfFftM I/Hg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1684998750; x=1687590750; 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=OOlx2WRh+JFuq5y5J1qgtXH5kcli3Ek1O+02SLEhl6g=; b=YKNMDi3mmyw4up4tZguBjlBhrEBofBWoLanHbhH5C004JhxZKw1di5RZSsmPGAV1zK iytxYUpOSr7GXNgK/jSkMOlUxpqJUNZBcoOtPoD5K/EwRHGSSxXpxP/xMcVBXnZ+Kl+B vmwxk9R1e55g42BakA2ZXkMr7zgQAtjqeh6tWv7fii7lKpGipAWekFekUC9aftuDakpn 8PJREUY5NB/00pnV2548hQ0Vxb6DIYbM1kwd9zT4d77bOAu5f0wsyCfdgpGSOwA0nXE+ MAglK1fGyi0AgrXJbJvOWTvalzjz4OO1cpWMu0bnVbF/ir1H9lAOAn2Oqcyb0u7DBj9q dT+A== X-Gm-Message-State: AC+VfDwJVaTW0MONnaQlVKh8PdQC1DUf9H/dehGPJ1KOCTExYAfEXAGh gvQ7PLuweea6slSs7EMr+Himq0s3Km5y X-Google-Smtp-Source: ACHHUZ5IKhWTV/gXJDXr9pJVclWxuWbfOiaxQn3UH+XZ67yumdh7Bo9yq4vReN/76WBymOEj6XPPtLGWFSZY X-Received: from irogers.svl.corp.google.com ([2620:15c:2d4:203:7aa7:3d2d:76ae:8e96]) (user=irogers job=sendgmr) by 2002:a25:6584:0:b0:ba8:381b:f764 with SMTP id z126-20020a256584000000b00ba8381bf764mr1455616ybb.3.1684998750427; Thu, 25 May 2023 00:12:30 -0700 (PDT) Date: Thu, 25 May 2023 00:11:31 -0700 In-Reply-To: <20230525071133.2066610-1-irogers@google.com> Message-Id: <20230525071133.2066610-15-irogers@google.com> Mime-Version: 1.0 References: <20230525071133.2066610-1-irogers@google.com> X-Mailer: git-send-email 2.40.1.698.g37aff9b760-goog Subject: [PATCH v1 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.40.1.698.g37aff9b760-goog From nobody Sat Feb 7 17:09:47 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 B6B5EC77B7E for ; Thu, 25 May 2023 07:14:03 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239580AbjEYHOC (ORCPT ); Thu, 25 May 2023 03:14:02 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46878 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235071AbjEYHNO (ORCPT ); Thu, 25 May 2023 03:13:14 -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 932C210F9 for ; Thu, 25 May 2023 00:12:39 -0700 (PDT) Received: by mail-yb1-xb4a.google.com with SMTP id 3f1490d57ef6-ba83fed51adso574436276.0 for ; Thu, 25 May 2023 00:12:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1684998752; x=1687590752; 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=tFIhQDFEKIUaqXH8KPF9Rc0UUB3N+wzcHQvTErnCb94=; b=aLvL4WUNiYGn7YqSRcIajOnoOp7Ns/caZgB3ExYe4cZKgG/JIeWjs77b4qdlx+2aOw O5+ULy5sQfwWCK7MTeyHd6GQNbrdbOB3bwe2wcONhK2EXX/cF/T1UplU0oDKpl2hULKV ToTt74ZMxzHkhY2Ah8nFyyxZ4We6xdS9uI6QD5FNOcJLSLwb/AtwZc2zkS3uMxyLvsVY 2x5hKeZCVzAvzuBJIJlDxrGEFFeTthalhAvrs+cmSVyjyGCuFlytjzD6OGjBJRyzP/dF wVIEjApzHSFJdo8BjkiKXfLo4RvN1UcLW7zbSAirg1IniXJhiJ0tTiYQ2zmNGmURMeex tzZw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1684998752; x=1687590752; 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=tFIhQDFEKIUaqXH8KPF9Rc0UUB3N+wzcHQvTErnCb94=; b=JRy1ZX8x82Saypd9lLYrxks5fkhXwcPde9N0Oz1G/p9lmylC3dLdSnSzoQbwFQg77d fT+Fq+rN6CWwv4nRYP3HnE9bvcUkYvFrpbAWPqqSBkK0gxmIwdMqEgjkw2t6QQCbfIYy wZo9w6yOSBUG/ubaeZgb/w1/SlTNZY247VlKyB+gmOGxB1hVJRB4UfB4r61lrDlQHZu4 0OLno9zGLXtr6iQWv2NAXq07QjJK60A3bovCr4poarYAdUI/tyWxwxTlcK95t8gnIJoF 6hcpsbkwkzzrcvR8Xm2IbnRIqnyjiTusvYIzRr2nDYS7nONt7rLZBtiIsnVVi33SRNup gmNw== X-Gm-Message-State: AC+VfDydmCkQoV7oNCuV/gl5afmbTc26dt+K+Sfdkb2He+iGATOWJEus CKgfTEdowaRw7pVQUoznA6HTBAWNM5Fw X-Google-Smtp-Source: ACHHUZ4e3CApx3zDOiO4M4HximKdQvZpEhzdGnACtjgtnrPAYXZPGQWU/IsbgfrTndN+yHn8r8sr+WfvpL75 X-Received: from irogers.svl.corp.google.com ([2620:15c:2d4:203:7aa7:3d2d:76ae:8e96]) (user=irogers job=sendgmr) by 2002:a25:2511:0:b0:b9a:6508:1b5f with SMTP id l17-20020a252511000000b00b9a65081b5fmr1188695ybl.11.1684998752418; Thu, 25 May 2023 00:12:32 -0700 (PDT) Date: Thu, 25 May 2023 00:11:32 -0700 In-Reply-To: <20230525071133.2066610-1-irogers@google.com> Message-Id: <20230525071133.2066610-16-irogers@google.com> Mime-Version: 1.0 References: <20230525071133.2066610-1-irogers@google.com> X-Mailer: git-send-email 2.40.1.698.g37aff9b760-goog Subject: [PATCH v1 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.40.1.698.g37aff9b760-goog From nobody Sat Feb 7 17:09:47 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 3D036C77B7E for ; Thu, 25 May 2023 07:14:07 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239588AbjEYHOF (ORCPT ); Thu, 25 May 2023 03:14:05 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47132 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239222AbjEYHNQ (ORCPT ); Thu, 25 May 2023 03:13:16 -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 4237D1701 for ; Thu, 25 May 2023 00:12:41 -0700 (PDT) Received: by mail-yw1-x114a.google.com with SMTP id 00721157ae682-5653a78102eso7037927b3.1 for ; Thu, 25 May 2023 00:12:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1684998755; x=1687590755; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=fUbHbSjVoUcJs86GoUKywFnnspnn0CwjY1A+xgeJcrE=; b=7LtR4l2JL/M4jrlSVU40EKtOPMO9N0dHxSoR2A3E+/SFXlYWvUTFqVwUxLJUSGlzDV F6u5E3ufJCkrh98qSFG5E9ePrbrARJkjqi9c1X5Xttcmj/6EVj4j2RBPb8B3ZL+Amrki yj3ZkWUqMrq7qgqbXOH+Q+Zx7PkrJQaD9q9U/zGCebFeL2Yo17ojkCnQ60ZOmbXfptTv ezVT76QHlFCtJvzF54v9e5KRtWbnKLSESLXIBy9oAHjzUYpyfy/+p/fmc3NOZgZCsB+D CPWb/PhGo7Drd9gjoehm7CMbM1mCV3R16jIFa7AUSXDPfXFXWql0HqQM9qAInpOaZ/xA 20RA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1684998755; x=1687590755; 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=fUbHbSjVoUcJs86GoUKywFnnspnn0CwjY1A+xgeJcrE=; b=J2JZ90jSklSry8bxUZ2YcwxdsLhfUoPMjbRUdS0gqRx9r3MtIM46a/IYawqCxX47Gb LQ1ADrOygLxVug1yo73qbMoS2bUeH0KMYTwMtKAPvDL2+s38IDXUysGJxyUGoD6IFQV+ FHbO8sZos0meTwbtZ0n7lL5mnkK3sD1utIcnTZ9CRfnUK5thZlNMBGfzAFgjf71Vp4vc wmosJ5GQ88d1vDTKvKy2XvLHOU5DfbpQPSNFdRSuqYbEbSYSA1sFqespUTcuxew/2Jh3 Kv9kMYZkK9O91tTvDy3aXte/rf0x9ZRe6mhEMlgQ9vv4ehNQhDvLKj+ZmXAljQCBIEQf 0hjA== X-Gm-Message-State: AC+VfDzSNCzyQmAucjcmo75hgR0BiTwXShjohPnrvMzr5QNAwudn4Mvl cr30q4hspWqveuCr8Lk9K/yLLitjGDwL X-Google-Smtp-Source: ACHHUZ6DYMEKjWI2+BEz4r2CwS0UkrArsaV42OVmb0uVNSR+netmY8Zy2pEdzoCY7oajTqfSioq+92W7Wt0s X-Received: from irogers.svl.corp.google.com ([2620:15c:2d4:203:7aa7:3d2d:76ae:8e96]) (user=irogers job=sendgmr) by 2002:a81:ae68:0:b0:55e:14b:bab9 with SMTP id g40-20020a81ae68000000b0055e014bbab9mr12549654ywk.4.1684998754691; Thu, 25 May 2023 00:12:34 -0700 (PDT) Date: Thu, 25 May 2023 00:11:33 -0700 In-Reply-To: <20230525071133.2066610-1-irogers@google.com> Message-Id: <20230525071133.2066610-17-irogers@google.com> Mime-Version: 1.0 References: <20230525071133.2066610-1-irogers@google.com> X-Mailer: git-send-email 2.40.1.698.g37aff9b760-goog Subject: [PATCH v1 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.40.1.698.g37aff9b760-goog