From nobody Sat Feb 7 19:41:18 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 B7A02EE49B3 for ; Fri, 25 Aug 2023 02:41:19 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S242061AbjHYCkt (ORCPT ); Thu, 24 Aug 2023 22:40:49 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59462 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S241603AbjHYCkc (ORCPT ); Thu, 24 Aug 2023 22:40:32 -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 A2A011BDB for ; Thu, 24 Aug 2023 19:40:30 -0700 (PDT) Received: by mail-yw1-x114a.google.com with SMTP id 00721157ae682-59285f1e267so23964757b3.0 for ; Thu, 24 Aug 2023 19:40:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1692931230; x=1693536030; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=gleOx1R6bSswKzh9EuhLGrWijl71cST/VqhPvXlvs9U=; b=Cqu+Mpf9iSpDeRLvOSI3IVWLQssJ9tYBK0e1ZWdNFAycIwrIj1MxpQ1quvIleMZJB6 Drb5sCcEu+fxJtnG5dfoegKcS4mWhHZ523Dohm1QrgK8uHjNxutRRM2W/taS217gq+oI kHkSwnzlHIvea+nMmyhch28gwXtZtS4Q+i0/r1FVJ8rgPQ3Zgmo3DJUDTHva04iSuZ7j Pwog+gL+Ygwt5ML1nXOfFqaQvFCsUOw036pa3OrChBdWXOmot7F0ZhRNIpy1NkakWboa IV/zDZC3ynvtqUUfHShJiG/JbJzUmp13jVoZAVuTdnxcp6qj4ryVFvEGNKWJatT75FYw 4IyQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1692931230; x=1693536030; 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=gleOx1R6bSswKzh9EuhLGrWijl71cST/VqhPvXlvs9U=; b=SikKP3bVqYqMfXM0AS24xCPZmUCyiWXHOcup/SldgrbZVDa1J02iw2hVgHhKZeaaBO l2YQ0Fx8Yxik2xlnGknMiudB7vovUr2ijGt+E9twNkumcC7YF71SIjd8VIRclbP5Bvck D3TZKDXFniGND7yKQKB/qe4vxLUi1dCTE2/fhJeqFU35c0jWmSyvkUCMmIZR4a6CPnVH vNm5thIbzCWbBOZPOXb1nEPwBex4/rC1XKIzNuNDB5AnUGZfLWstaTIHUIZM4PTPhtqb WMsZimaDFtcLLXjar4DLJerz/1ULbiu/diJK1UFYqxdoQav9ww/vj24VnNmpfwDwbvza AqTQ== X-Gm-Message-State: AOJu0Yw+DaVvkuSQ+lbXKXktR6u213qWK7iRsnmlRdz15ieSebDy00y4 T27sx5PBLJIVNdlY0KB7iymJdjl7o65e X-Google-Smtp-Source: AGHT+IFi5wnjwMO3TOfHdkD/PK6fZ23/bjTAUd5coQ8Pvt3nE13DfLfuhsCiqnLwncG7b5sT0DyY9knVVA03 X-Received: from irogers.svl.corp.google.com ([2620:15c:2a3:200:449e:d47b:bc6b:cb6b]) (user=irogers job=sendgmr) by 2002:a05:6902:691:b0:bd5:dc2d:9d7f with SMTP id i17-20020a056902069100b00bd5dc2d9d7fmr410342ybt.4.1692931229945; Thu, 24 Aug 2023 19:40:29 -0700 (PDT) Date: Thu, 24 Aug 2023 19:39:57 -0700 In-Reply-To: <20230825024002.801955-1-irogers@google.com> Message-Id: <20230825024002.801955-2-irogers@google.com> Mime-Version: 1.0 References: <20230825024002.801955-1-irogers@google.com> X-Mailer: git-send-email 2.42.0.rc2.253.gd59a3bf2b4-goog Subject: [PATCH v2 1/6] perf header: Fix missing PMU caps From: Ian Rogers To: John Garry , Will Deacon , James Clark , Mike Leach , Leo Yan , Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Mark Rutland , Alexander Shishkin , Jiri Olsa , Namhyung Kim , Ian Rogers , Adrian Hunter , Kan Liang , Ravi Bangoria , Suzuki Poulouse , Kajol Jain , Athira Rajeev , Ming Wang , Huacai Chen , Sean Christopherson , K Prateek Nayak , linux-arm-kernel@lists.infradead.org, linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, Wei Li Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" PMU caps are written as HEADER_PMU_CAPS or for the special case of the PMU "cpu" as HEADER_CPU_PMU_CAPS. As the PMU "cpu" is special, and not any "core" PMU, the logic had become broken and core PMUs not called "cpu" were not having their caps written. This affects ARM and s390 non-hybrid PMUs. Simplify the PMU caps writing logic to scan one fewer time and to be more explicit in its behavior. Reported-by: Wei Li Fixes: 178ddf3bad98 ("perf header: Avoid hybrid PMU list in write_pmu_caps") Signed-off-by: Ian Rogers --- tools/perf/util/header.c | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/tools/perf/util/header.c b/tools/perf/util/header.c index 52fbf526fe74..13c71d28e0eb 100644 --- a/tools/perf/util/header.c +++ b/tools/perf/util/header.c @@ -1605,8 +1605,15 @@ static int write_pmu_caps(struct feat_fd *ff, int ret; =20 while ((pmu =3D perf_pmus__scan(pmu))) { - if (!pmu->name || !strcmp(pmu->name, "cpu") || - perf_pmu__caps_parse(pmu) <=3D 0) + if (!strcmp(pmu->name, "cpu")) { + /* + * The "cpu" PMU is special and covered by + * HEADER_CPU_PMU_CAPS. Note, core PMUs are + * counted/written here for ARM, s390 and Intel hybrid. + */ + continue; + } + if (perf_pmu__caps_parse(pmu) <=3D 0) continue; nr_pmu++; } @@ -1619,23 +1626,17 @@ static int write_pmu_caps(struct feat_fd *ff, return 0; =20 /* - * Write hybrid pmu caps first to maintain compatibility with - * older perf tool. + * Note older perf tools assume core PMUs come first, this is a property + * of perf_pmus__scan. */ - if (perf_pmus__num_core_pmus() > 1) { - pmu =3D NULL; - while ((pmu =3D perf_pmus__scan_core(pmu))) { - ret =3D __write_pmu_caps(ff, pmu, true); - if (ret < 0) - return ret; - } - } - pmu =3D NULL; while ((pmu =3D perf_pmus__scan(pmu))) { - if (pmu->is_core || !pmu->nr_caps) + if (!strcmp(pmu->name, "cpu")) { + /* Skip as above. */ + continue; + } + if (perf_pmu__caps_parse(pmu) <=3D 0) continue; - ret =3D __write_pmu_caps(ff, pmu, true); if (ret < 0) return ret; --=20 2.42.0.rc2.253.gd59a3bf2b4-goog From nobody Sat Feb 7 19:41:18 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 04E10EE49B7 for ; Fri, 25 Aug 2023 02:41:20 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S242142AbjHYCkv (ORCPT ); Thu, 24 Aug 2023 22:40:51 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59532 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S241999AbjHYCkg (ORCPT ); Thu, 24 Aug 2023 22:40:36 -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 062681BDB for ; Thu, 24 Aug 2023 19:40:33 -0700 (PDT) Received: by mail-yw1-x1149.google.com with SMTP id 00721157ae682-5924b2aac52so6657797b3.2 for ; Thu, 24 Aug 2023 19:40:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1692931232; x=1693536032; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=+0v6ZH91cRAWfBdufQXOgsVVfAmsDZGVPdtey97XoEE=; b=Btecnss5l4Wq7jLOEK/LGD64SV/s8pa43YQY1AffFs9TS+T6JdbuInYgZcTahf9+zo oxYgnfuFdzO79SpJh+LSgjXZtNjVxz7N8yTLT5TijYnZY8T8ORIAmgJVgCiNWlBj1oNX b2laVEfRwkZQlwtvYtoK+ybe1tT1I1cBfb8JYmc7zFfU+ENsOQLbBFdnvkWViObDswvk xz/BJiXEmam0+ZuFOS6uGYpoiqSmbk/ezm5pwW4aPP+dGLk421rA7WJvN0x9bqAkoSXq JLi5UMsQ1SjF1jmZ8OxHVl2pkGkYykxnp9R42abYgG5iFqDCQK/ZEXVpkfNIKaFLZtIw HOww== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1692931232; x=1693536032; 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=+0v6ZH91cRAWfBdufQXOgsVVfAmsDZGVPdtey97XoEE=; b=X5U7xKXEXDfuabUZanifdALEd7R+DxDWAx+oQSsLltNgw+68w2zrSKgu8cKKsV9G6h EwDq2Ab6PbUXcniiE31VKAvuX53/dXBfRMjqVa7FxDGxxgVuurngjNgSdn5mcoIECFLq HA3XZdaJGK7QJYPbe8IXOH2DdPGWIYXF3vXsxCq+c2U78c4J49R9rrPKru9IzXGSaUi/ KhueMsfyq5KQHpaDUGHaakAQicR3skBWkV5YHUl8XVhJBacaaiYdYwSXS+eQtnR9bxIX 7+kIx+4pQahgsfQV0AzkhpcVFA6RPCEjzVVjXcpgpzFHBRBi9CDLE1raUJuZaqtH4kco cpIw== X-Gm-Message-State: AOJu0Yz6TNdrEMsRLyajFwFoaMGwO2rSRZxlQabESCnLGoMrJe5P9/Wz +XkbIeWsCfUkYtuRFGU+FNGp9hPPTHXj X-Google-Smtp-Source: AGHT+IHTePzpW1ONhHhLRkqg7uW8qhFGUhV+RL2W0FxSqbDMmfOWE3o3zh1BgpGWXmGcIcGYlGfHSapRZQiD X-Received: from irogers.svl.corp.google.com ([2620:15c:2a3:200:449e:d47b:bc6b:cb6b]) (user=irogers job=sendgmr) by 2002:a25:3c87:0:b0:d78:215f:ba5f with SMTP id j129-20020a253c87000000b00d78215fba5fmr118274yba.9.1692931232240; Thu, 24 Aug 2023 19:40:32 -0700 (PDT) Date: Thu, 24 Aug 2023 19:39:58 -0700 In-Reply-To: <20230825024002.801955-1-irogers@google.com> Message-Id: <20230825024002.801955-3-irogers@google.com> Mime-Version: 1.0 References: <20230825024002.801955-1-irogers@google.com> X-Mailer: git-send-email 2.42.0.rc2.253.gd59a3bf2b4-goog Subject: [PATCH v2 2/6] perf pmu: Remove logic for PMU name being NULL From: Ian Rogers To: John Garry , Will Deacon , James Clark , Mike Leach , Leo Yan , Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Mark Rutland , Alexander Shishkin , Jiri Olsa , Namhyung Kim , Ian Rogers , Adrian Hunter , Kan Liang , Ravi Bangoria , Suzuki Poulouse , Kajol Jain , Athira Rajeev , Ming Wang , Huacai Chen , Sean Christopherson , K Prateek Nayak , linux-arm-kernel@lists.infradead.org, linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, Wei Li Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The PMU name could be NULL in the case of the fake_pmu. Initialize the name for the fake_pmu to "fake" so that all other logic can assume it is initialized. Add a const to the type of name so that a literal can be used to avoid additional initialization code. Propagate the cost through related routines and remove now unnecessary "(char *)" casts. Doing this located a bug in builtin-list for the pmu_glob that was missing a strdup. Signed-off-by: Ian Rogers --- tools/perf/arch/arm64/util/mem-events.c | 2 +- tools/perf/arch/powerpc/util/mem-events.c | 6 +++--- tools/perf/arch/x86/util/mem-events.c | 8 ++++---- tools/perf/arch/x86/util/pmu.c | 10 +++++----- tools/perf/builtin-list.c | 2 +- tools/perf/tests/pmu-events.c | 16 ++++++++-------- tools/perf/util/env.c | 8 ++------ tools/perf/util/header.c | 8 +------- tools/perf/util/mem-events.c | 16 ++++++++-------- tools/perf/util/mem-events.h | 2 +- tools/perf/util/parse-events.c | 7 ++----- tools/perf/util/parse-events.h | 2 +- tools/perf/util/parse-events.y | 2 +- tools/perf/util/pmu.c | 16 +++++++++------- tools/perf/util/pmu.h | 8 ++++---- 15 files changed, 51 insertions(+), 62 deletions(-) diff --git a/tools/perf/arch/arm64/util/mem-events.c b/tools/perf/arch/arm6= 4/util/mem-events.c index df817d1f9f3e..3bcc5c7035c2 100644 --- a/tools/perf/arch/arm64/util/mem-events.c +++ b/tools/perf/arch/arm64/util/mem-events.c @@ -20,7 +20,7 @@ struct perf_mem_event *perf_mem_events__ptr(int i) return &perf_mem_events[i]; } =20 -char *perf_mem_events__name(int i, char *pmu_name __maybe_unused) +const char *perf_mem_events__name(int i, const char *pmu_name __maybe_unus= ed) { struct perf_mem_event *e =3D perf_mem_events__ptr(i); =20 diff --git a/tools/perf/arch/powerpc/util/mem-events.c b/tools/perf/arch/po= werpc/util/mem-events.c index 4120fafe0be4..78b986e5268d 100644 --- a/tools/perf/arch/powerpc/util/mem-events.c +++ b/tools/perf/arch/powerpc/util/mem-events.c @@ -3,10 +3,10 @@ #include "mem-events.h" =20 /* PowerPC does not support 'ldlat' parameter. */ -char *perf_mem_events__name(int i, char *pmu_name __maybe_unused) +const char *perf_mem_events__name(int i, const char *pmu_name __maybe_unus= ed) { if (i =3D=3D PERF_MEM_EVENTS__LOAD) - return (char *) "cpu/mem-loads/"; + return "cpu/mem-loads/"; =20 - return (char *) "cpu/mem-stores/"; + return "cpu/mem-stores/"; } diff --git a/tools/perf/arch/x86/util/mem-events.c b/tools/perf/arch/x86/ut= il/mem-events.c index a8a782bcb121..191b372f9a2d 100644 --- a/tools/perf/arch/x86/util/mem-events.c +++ b/tools/perf/arch/x86/util/mem-events.c @@ -52,7 +52,7 @@ bool is_mem_loads_aux_event(struct evsel *leader) return leader->core.attr.config =3D=3D MEM_LOADS_AUX; } =20 -char *perf_mem_events__name(int i, char *pmu_name) +const char *perf_mem_events__name(int i, const char *pmu_name) { struct perf_mem_event *e =3D perf_mem_events__ptr(i); =20 @@ -65,7 +65,7 @@ char *perf_mem_events__name(int i, char *pmu_name) =20 if (!pmu_name) { mem_loads_name__init =3D true; - pmu_name =3D (char *)"cpu"; + pmu_name =3D "cpu"; } =20 if (perf_pmus__have_event(pmu_name, "mem-loads-aux")) { @@ -82,12 +82,12 @@ char *perf_mem_events__name(int i, char *pmu_name) =20 if (i =3D=3D PERF_MEM_EVENTS__STORE) { if (!pmu_name) - pmu_name =3D (char *)"cpu"; + pmu_name =3D "cpu"; =20 scnprintf(mem_stores_name, sizeof(mem_stores_name), e->name, pmu_name); return mem_stores_name; } =20 - return (char *)e->name; + return e->name; } diff --git a/tools/perf/arch/x86/util/pmu.c b/tools/perf/arch/x86/util/pmu.c index 65d8cdff4d5f..f428cffb0378 100644 --- a/tools/perf/arch/x86/util/pmu.c +++ b/tools/perf/arch/x86/util/pmu.c @@ -126,7 +126,7 @@ static int setup_pmu_alias_list(void) return ret; } =20 -static char *__pmu_find_real_name(const char *name) +static const char *__pmu_find_real_name(const char *name) { struct pmu_alias *pmu_alias; =20 @@ -135,10 +135,10 @@ static char *__pmu_find_real_name(const char *name) return pmu_alias->name; } =20 - return (char *)name; + return name; } =20 -char *pmu_find_real_name(const char *name) +const char *pmu_find_real_name(const char *name) { if (cached_list) return __pmu_find_real_name(name); @@ -149,7 +149,7 @@ char *pmu_find_real_name(const char *name) return __pmu_find_real_name(name); } =20 -static char *__pmu_find_alias_name(const char *name) +static const char *__pmu_find_alias_name(const char *name) { struct pmu_alias *pmu_alias; =20 @@ -160,7 +160,7 @@ static char *__pmu_find_alias_name(const char *name) return NULL; } =20 -char *pmu_find_alias_name(const char *name) +const char *pmu_find_alias_name(const char *name) { if (cached_list) return __pmu_find_alias_name(name); diff --git a/tools/perf/builtin-list.c b/tools/perf/builtin-list.c index 7fec2cca759f..e74d0223deb7 100644 --- a/tools/perf/builtin-list.c +++ b/tools/perf/builtin-list.c @@ -502,7 +502,7 @@ int cmd_list(int argc, const char **argv) ret =3D -1; goto out; } - default_ps.pmu_glob =3D pmu->name; + default_ps.pmu_glob =3D strdup(pmu->name); } } print_cb.print_start(ps); diff --git a/tools/perf/tests/pmu-events.c b/tools/perf/tests/pmu-events.c index 3dc1ebee4d9f..94937378647a 100644 --- a/tools/perf/tests/pmu-events.c +++ b/tools/perf/tests/pmu-events.c @@ -522,7 +522,7 @@ static int test_core_pmu_event_aliases_cb(void *state, = struct pmu_event_info *al } =20 /* Verify aliases are as expected */ -static int __test_core_pmu_event_aliases(char *pmu_name, int *count) +static int __test_core_pmu_event_aliases(const char *pmu_name, int *count) { struct perf_pmu_test_event const **test_event_table; struct perf_pmu *pmu; @@ -635,7 +635,7 @@ static int __test_uncore_pmu_event_aliases(struct perf_= pmu_test_pmu *test_pmu) static struct perf_pmu_test_pmu test_pmus[] =3D { { .pmu =3D { - .name =3D (char *)"hisi_sccl1_ddrc2", + .name =3D "hisi_sccl1_ddrc2", .is_uncore =3D 1, }, .aliases =3D { @@ -644,7 +644,7 @@ static struct perf_pmu_test_pmu test_pmus[] =3D { }, { .pmu =3D { - .name =3D (char *)"uncore_cbox_0", + .name =3D "uncore_cbox_0", .is_uncore =3D 1, }, .aliases =3D { @@ -655,7 +655,7 @@ static struct perf_pmu_test_pmu test_pmus[] =3D { }, { .pmu =3D { - .name =3D (char *)"hisi_sccl3_l3c7", + .name =3D "hisi_sccl3_l3c7", .is_uncore =3D 1, }, .aliases =3D { @@ -664,7 +664,7 @@ static struct perf_pmu_test_pmu test_pmus[] =3D { }, { .pmu =3D { - .name =3D (char *)"uncore_imc_free_running_0", + .name =3D "uncore_imc_free_running_0", .is_uncore =3D 1, }, .aliases =3D { @@ -673,7 +673,7 @@ static struct perf_pmu_test_pmu test_pmus[] =3D { }, { .pmu =3D { - .name =3D (char *)"uncore_imc_0", + .name =3D "uncore_imc_0", .is_uncore =3D 1, }, .aliases =3D { @@ -682,7 +682,7 @@ static struct perf_pmu_test_pmu test_pmus[] =3D { }, { .pmu =3D { - .name =3D (char *)"uncore_sys_ddr_pmu0", + .name =3D "uncore_sys_ddr_pmu0", .is_uncore =3D 1, .id =3D (char *)"v8", }, @@ -692,7 +692,7 @@ static struct perf_pmu_test_pmu test_pmus[] =3D { }, { .pmu =3D { - .name =3D (char *)"uncore_sys_ccn_pmu4", + .name =3D "uncore_sys_ccn_pmu4", .is_uncore =3D 1, .id =3D (char *)"0x01", }, diff --git a/tools/perf/util/env.c b/tools/perf/util/env.c index 9eabf3ec56e9..a164164001fb 100644 --- a/tools/perf/util/env.c +++ b/tools/perf/util/env.c @@ -324,11 +324,9 @@ int perf_env__read_pmu_mappings(struct perf_env *env) u32 pmu_num =3D 0; struct strbuf sb; =20 - while ((pmu =3D perf_pmus__scan(pmu))) { - if (!pmu->name) - continue; + while ((pmu =3D perf_pmus__scan(pmu))) pmu_num++; - } + if (!pmu_num) { pr_debug("pmu mappings not available\n"); return -ENOENT; @@ -339,8 +337,6 @@ int perf_env__read_pmu_mappings(struct perf_env *env) return -ENOMEM; =20 while ((pmu =3D perf_pmus__scan(pmu))) { - if (!pmu->name) - continue; if (strbuf_addf(&sb, "%u:%s", pmu->type, pmu->name) < 0) goto error; /* include a NULL character at the end */ diff --git a/tools/perf/util/header.c b/tools/perf/util/header.c index 13c71d28e0eb..9f35d86a3351 100644 --- a/tools/perf/util/header.c +++ b/tools/perf/util/header.c @@ -746,20 +746,14 @@ static int write_pmu_mappings(struct feat_fd *ff, * Do a first pass to count number of pmu to avoid lseek so this * works in pipe mode as well. */ - while ((pmu =3D perf_pmus__scan(pmu))) { - if (!pmu->name) - continue; + while ((pmu =3D perf_pmus__scan(pmu))) pmu_num++; - } =20 ret =3D do_write(ff, &pmu_num, sizeof(pmu_num)); if (ret < 0) return ret; =20 while ((pmu =3D perf_pmus__scan(pmu))) { - if (!pmu->name) - continue; - ret =3D do_write(ff, &pmu->type, sizeof(pmu->type)); if (ret < 0) return ret; diff --git a/tools/perf/util/mem-events.c b/tools/perf/util/mem-events.c index c07fe3a90722..39ffe8ceb380 100644 --- a/tools/perf/util/mem-events.c +++ b/tools/perf/util/mem-events.c @@ -37,7 +37,7 @@ struct perf_mem_event * __weak perf_mem_events__ptr(int i) return &perf_mem_events[i]; } =20 -char * __weak perf_mem_events__name(int i, char *pmu_name __maybe_unused) +const char * __weak perf_mem_events__name(int i, const char *pmu_name __m= aybe_unused) { struct perf_mem_event *e =3D perf_mem_events__ptr(i); =20 @@ -53,7 +53,7 @@ char * __weak perf_mem_events__name(int i, char *pmu_name= __maybe_unused) return mem_loads_name; } =20 - return (char *)e->name; + return e->name; } =20 __weak bool is_mem_loads_aux_event(struct evsel *leader __maybe_unused) @@ -186,7 +186,6 @@ int perf_mem_events__record_args(const char **rec_argv,= int *argv_nr, int i =3D *argv_nr, k =3D 0; struct perf_mem_event *e; struct perf_pmu *pmu; - char *s; =20 for (int j =3D 0; j < PERF_MEM_EVENTS__MAX; j++) { e =3D perf_mem_events__ptr(j); @@ -209,15 +208,16 @@ int perf_mem_events__record_args(const char **rec_arg= v, int *argv_nr, } =20 while ((pmu =3D perf_pmus__scan(pmu)) !=3D NULL) { + const char *s =3D perf_mem_events__name(j, pmu->name); + rec_argv[i++] =3D "-e"; - s =3D perf_mem_events__name(j, pmu->name); if (s) { - s =3D strdup(s); - if (!s) + char *copy =3D strdup(s); + if (!copy) return -1; =20 - rec_argv[i++] =3D s; - rec_tmp[k++] =3D s; + rec_argv[i++] =3D copy; + rec_tmp[k++] =3D copy; } } } diff --git a/tools/perf/util/mem-events.h b/tools/perf/util/mem-events.h index 12372309d60e..b40ad6ea93fc 100644 --- a/tools/perf/util/mem-events.h +++ b/tools/perf/util/mem-events.h @@ -38,7 +38,7 @@ extern unsigned int perf_mem_events__loads_ldlat; int perf_mem_events__parse(const char *str); int perf_mem_events__init(void); =20 -char *perf_mem_events__name(int i, char *pmu_name); +const char *perf_mem_events__name(int i, const char *pmu_name); struct perf_mem_event *perf_mem_events__ptr(int i); bool is_mem_loads_aux_event(struct evsel *leader); =20 diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c index c71e135d7335..621bdd157a0f 100644 --- a/tools/perf/util/parse-events.c +++ b/tools/perf/util/parse-events.c @@ -262,7 +262,7 @@ __add_event(struct list_head *list, int *idx, evsel->core.is_pmu_core =3D pmu ? pmu->is_core : false; evsel->auto_merge_stats =3D auto_merge_stats; evsel->pmu =3D pmu; - evsel->pmu_name =3D pmu && pmu->name ? strdup(pmu->name) : NULL; + evsel->pmu_name =3D pmu ? strdup(pmu->name) : NULL; =20 if (name) evsel->name =3D strdup(name); @@ -437,9 +437,6 @@ bool parse_events__filter_pmu(const struct parse_events= _state *parse_state, if (parse_state->pmu_filter =3D=3D NULL) return false; =20 - if (pmu->name =3D=3D NULL) - return true; - return strcmp(parse_state->pmu_filter, pmu->name) !=3D 0; } =20 @@ -1292,7 +1289,7 @@ static bool config_term_percore(struct list_head *con= fig_terms) } =20 int parse_events_add_pmu(struct parse_events_state *parse_state, - struct list_head *list, char *name, + struct list_head *list, const char *name, struct list_head *head_config, bool auto_merge_stats, void *loc_) { diff --git a/tools/perf/util/parse-events.h b/tools/perf/util/parse-events.h index c7f779420723..c4e8d8e94b28 100644 --- a/tools/perf/util/parse-events.h +++ b/tools/perf/util/parse-events.h @@ -176,7 +176,7 @@ int parse_events_add_breakpoint(struct parse_events_sta= te *parse_state, u64 addr, char *type, u64 len, struct list_head *head_config); int parse_events_add_pmu(struct parse_events_state *parse_state, - struct list_head *list, char *name, + struct list_head *list, const char *name, struct list_head *head_config, bool auto_merge_stats, void *loc); =20 diff --git a/tools/perf/util/parse-events.y b/tools/perf/util/parse-events.y index 00da1f8c0baf..3a9d4e2513b5 100644 --- a/tools/perf/util/parse-events.y +++ b/tools/perf/util/parse-events.y @@ -307,7 +307,7 @@ PE_NAME opt_pmu_config } =20 while ((pmu =3D perf_pmus__scan(pmu)) !=3D NULL) { - char *name =3D pmu->name; + const char *name =3D pmu->name; =20 if (parse_events__filter_pmu(parse_state, pmu)) continue; diff --git a/tools/perf/util/pmu.c b/tools/perf/util/pmu.c index bb2ca29cd7bd..a96ccc5c3b51 100644 --- a/tools/perf/util/pmu.c +++ b/tools/perf/util/pmu.c @@ -29,7 +29,9 @@ #include "fncache.h" #include "util/evsel_config.h" =20 -struct perf_pmu perf_pmu__fake; +struct perf_pmu perf_pmu__fake =3D { + .name =3D "fake", +}; =20 #define UNIT_MAX_LEN 31 /* max length for event unit name */ =20 @@ -967,13 +969,13 @@ perf_pmu__get_default_config(struct perf_pmu *pmu __m= aybe_unused) return NULL; } =20 -char * __weak +const char * __weak pmu_find_real_name(const char *name) { - return (char *)name; + return name; } =20 -char * __weak +const char * __weak pmu_find_alias_name(const char *name __maybe_unused) { return NULL; @@ -991,8 +993,8 @@ struct perf_pmu *perf_pmu__lookup(struct list_head *pmu= s, int dirfd, const char { struct perf_pmu *pmu; __u32 type; - char *name =3D pmu_find_real_name(lookup_name); - char *alias_name; + const char *name =3D pmu_find_real_name(lookup_name); + const char *alias_name; =20 pmu =3D zalloc(sizeof(*pmu)); if (!pmu) @@ -1974,7 +1976,7 @@ void perf_pmu__warn_invalid_config(struct perf_pmu *p= mu, __u64 config, name ?: "N/A", buf, config_name, config); } =20 -int perf_pmu__match(char *pattern, char *name, char *tok) +int perf_pmu__match(const char *pattern, const char *name, const char *tok) { if (!name) return -1; diff --git a/tools/perf/util/pmu.h b/tools/perf/util/pmu.h index bae0de3ed7a5..e90169ab3dc2 100644 --- a/tools/perf/util/pmu.h +++ b/tools/perf/util/pmu.h @@ -39,7 +39,7 @@ struct perf_pmu_caps { */ struct perf_pmu { /** @name: The name of the PMU such as "cpu". */ - char *name; + const char *name; /** * @alias_name: Optional alternate name for the PMU determined in * architecture specific code. @@ -249,10 +249,10 @@ void perf_pmu__warn_invalid_config(struct perf_pmu *p= mu, __u64 config, const char *config_name); void perf_pmu__warn_invalid_formats(struct perf_pmu *pmu); =20 -int perf_pmu__match(char *pattern, char *name, char *tok); +int perf_pmu__match(const char *pattern, const char *name, const char *tok= ); =20 -char *pmu_find_real_name(const char *name); -char *pmu_find_alias_name(const char *name); +const char *pmu_find_real_name(const char *name); +const char *pmu_find_alias_name(const char *name); double perf_pmu__cpu_slots_per_cycle(void); int perf_pmu__event_source_devices_scnprintf(char *pathname, size_t size); int perf_pmu__pathname_scnprintf(char *buf, size_t size, --=20 2.42.0.rc2.253.gd59a3bf2b4-goog From nobody Sat Feb 7 19:41:18 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 E83B0EE49B4 for ; Fri, 25 Aug 2023 02:41:19 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S242113AbjHYCku (ORCPT ); Thu, 24 Aug 2023 22:40:50 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59554 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S242021AbjHYCkh (ORCPT ); Thu, 24 Aug 2023 22:40:37 -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 61BD81FD5 for ; Thu, 24 Aug 2023 19:40:35 -0700 (PDT) Received: by mail-yb1-xb4a.google.com with SMTP id 3f1490d57ef6-d77bd411d7eso572967276.3 for ; Thu, 24 Aug 2023 19:40:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1692931234; x=1693536034; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=6+zdRFvr84d+fBWt10B0hHI/TeqmfF3seVVv15ew7F8=; b=HZSXLXGkuLPKgBuf4pk6J10eXiT7nvHcO4Exh1bIycY3L3BPD0nK3nX5wfOGHMWkDv fOGkuKwMhGemx7niIQSm5B6O3bwh2/0NdB86qMH9C6emksooUVvhet30JMKyQh2/8Ftc uRM999s3VRcT4ThF81DOXn0sQrFYDM/V3skOcZ0TaZeTpqp6uJHBEixUnhOsv7YIB6vU WfbAcOLPK86fNr+Iv4agkDrrY71JNNbNgU+M3vOuMK4jKOGS0aIQzHZy5v952AFnwYgx C4e04r+BRwB9Ud6KpXJe+k2b6OlJ6QK9VdDzYDudMRI3FVJHzcA1nw71vUwAvb3I4dih +IGw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1692931234; x=1693536034; 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=6+zdRFvr84d+fBWt10B0hHI/TeqmfF3seVVv15ew7F8=; b=WVCU1cKWAWHiNAMQaj/e9x2kTjLn4JnDfV4+fKLh9gyCIVn8vzFrvT8VOq/5dyTPS/ 9/SrjNdgm4ixrnUlPNx0HaV0iHX02qUEgbyFsS9oYIAT1JmM0rKzjlsBMP4r5chZfGzC 3hHtZ4zrGCA+jBCL2GzipdFXwD2u91onv3qjnI1mNnyd3kSu/oLRli91tnBE0StBXrZv IHHR9Vc+Qz+7q2VyZZP0okrZobO/hlh+7T6stAgc2P0nAwFXoVXqJggrbYxpNTchU9Py mzw/EZNV+My0tbGKVV7qSoayp/480zB4Wjfkj1YZ1CHE6NnXdTZbkRno0xNNjK37XSzJ Xvxg== X-Gm-Message-State: AOJu0Ywg8e74SQg7McbX87IFW4YAesqkgdsRDzM9/gCmopoII65NvtFQ J9nYa1R8F08IvoBqSI/jUQi2dh4MUjgD X-Google-Smtp-Source: AGHT+IEzM4glBr+PazUhBNmMADT2m3Tq6v7cCwDbE9cQUy4ophVAFva8E+T9hCeg0cPS0+531uZjKd8AAFZM X-Received: from irogers.svl.corp.google.com ([2620:15c:2a3:200:449e:d47b:bc6b:cb6b]) (user=irogers job=sendgmr) by 2002:a25:aa06:0:b0:d15:d6da:7e97 with SMTP id s6-20020a25aa06000000b00d15d6da7e97mr319274ybi.3.1692931234631; Thu, 24 Aug 2023 19:40:34 -0700 (PDT) Date: Thu, 24 Aug 2023 19:39:59 -0700 In-Reply-To: <20230825024002.801955-1-irogers@google.com> Message-Id: <20230825024002.801955-4-irogers@google.com> Mime-Version: 1.0 References: <20230825024002.801955-1-irogers@google.com> X-Mailer: git-send-email 2.42.0.rc2.253.gd59a3bf2b4-goog Subject: [PATCH v2 3/6] perf parse-events: Make term's config const From: Ian Rogers To: John Garry , Will Deacon , James Clark , Mike Leach , Leo Yan , Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Mark Rutland , Alexander Shishkin , Jiri Olsa , Namhyung Kim , Ian Rogers , Adrian Hunter , Kan Liang , Ravi Bangoria , Suzuki Poulouse , Kajol Jain , Athira Rajeev , Ming Wang , Huacai Chen , Sean Christopherson , K Prateek Nayak , linux-arm-kernel@lists.infradead.org, linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, Wei Li 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 avoids casts in tests. Use zfree in a few places to avoid warnings about a freeing a const pointer. Signed-off-by: Ian Rogers --- tools/perf/tests/pmu.c | 18 +++++++++--------- tools/perf/util/parse-events.c | 10 +++++----- tools/perf/util/parse-events.h | 4 ++-- tools/perf/util/pmu.c | 2 +- 4 files changed, 17 insertions(+), 17 deletions(-) diff --git a/tools/perf/tests/pmu.c b/tools/perf/tests/pmu.c index c204ed1f1a8b..eb60e5f66859 100644 --- a/tools/perf/tests/pmu.c +++ b/tools/perf/tests/pmu.c @@ -28,55 +28,55 @@ static struct test_format { /* Simulated users input. */ static struct parse_events_term test_terms[] =3D { { - .config =3D (char *) "krava01", + .config =3D "krava01", .val.num =3D 15, .type_val =3D PARSE_EVENTS__TERM_TYPE_NUM, .type_term =3D PARSE_EVENTS__TERM_TYPE_USER, }, { - .config =3D (char *) "krava02", + .config =3D "krava02", .val.num =3D 170, .type_val =3D PARSE_EVENTS__TERM_TYPE_NUM, .type_term =3D PARSE_EVENTS__TERM_TYPE_USER, }, { - .config =3D (char *) "krava03", + .config =3D "krava03", .val.num =3D 1, .type_val =3D PARSE_EVENTS__TERM_TYPE_NUM, .type_term =3D PARSE_EVENTS__TERM_TYPE_USER, }, { - .config =3D (char *) "krava11", + .config =3D "krava11", .val.num =3D 27, .type_val =3D PARSE_EVENTS__TERM_TYPE_NUM, .type_term =3D PARSE_EVENTS__TERM_TYPE_USER, }, { - .config =3D (char *) "krava12", + .config =3D "krava12", .val.num =3D 1, .type_val =3D PARSE_EVENTS__TERM_TYPE_NUM, .type_term =3D PARSE_EVENTS__TERM_TYPE_USER, }, { - .config =3D (char *) "krava13", + .config =3D "krava13", .val.num =3D 2, .type_val =3D PARSE_EVENTS__TERM_TYPE_NUM, .type_term =3D PARSE_EVENTS__TERM_TYPE_USER, }, { - .config =3D (char *) "krava21", + .config =3D "krava21", .val.num =3D 119, .type_val =3D PARSE_EVENTS__TERM_TYPE_NUM, .type_term =3D PARSE_EVENTS__TERM_TYPE_USER, }, { - .config =3D (char *) "krava22", + .config =3D "krava22", .val.num =3D 11, .type_val =3D PARSE_EVENTS__TERM_TYPE_NUM, .type_term =3D PARSE_EVENTS__TERM_TYPE_USER, }, { - .config =3D (char *) "krava23", + .config =3D "krava23", .val.num =3D 2, .type_val =3D PARSE_EVENTS__TERM_TYPE_NUM, .type_term =3D PARSE_EVENTS__TERM_TYPE_USER, diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c index 621bdd157a0f..4c812fbe0cf9 100644 --- a/tools/perf/util/parse-events.c +++ b/tools/perf/util/parse-events.c @@ -199,7 +199,7 @@ static void fix_raw(struct list_head *config_terms, str= uct perf_pmu *pmu) continue; =20 if (perf_pmu__have_event(pmu, term->val.str)) { - free(term->config); + zfree(&term->config); term->config =3D term->val.str; term->type_val =3D PARSE_EVENTS__TERM_TYPE_NUM; term->type_term =3D PARSE_EVENTS__TERM_TYPE_USER; @@ -208,7 +208,7 @@ static void fix_raw(struct list_head *config_terms, str= uct perf_pmu *pmu) continue; } =20 - free(term->config); + zfree(&term->config); term->config =3D strdup("config"); errno =3D 0; num =3D strtoull(term->val.str + 1, NULL, 16); @@ -1416,7 +1416,7 @@ int parse_events_multi_pmu_add(struct parse_events_st= ate *parse_state, struct perf_pmu *pmu =3D NULL; YYLTYPE *loc =3D loc_; int ok =3D 0; - char *config; + const char *config; =20 *listp =3D NULL; =20 @@ -1435,7 +1435,7 @@ int parse_events_multi_pmu_add(struct parse_events_st= ate *parse_state, PARSE_EVENTS__TERM_TYPE_USER, config, 1, false, NULL, NULL) < 0) { - free(config); + zfree(&config); goto out_err; } list_add_tail(&term->list, head); @@ -2378,7 +2378,7 @@ static int new_term(struct parse_events_term **_term, } =20 int parse_events_term__num(struct parse_events_term **term, - int type_term, char *config, u64 num, + int type_term, const char *config, u64 num, bool no_value, void *loc_term_, void *loc_val_) { diff --git a/tools/perf/util/parse-events.h b/tools/perf/util/parse-events.h index c4e8d8e94b28..6d75d853ce00 100644 --- a/tools/perf/util/parse-events.h +++ b/tools/perf/util/parse-events.h @@ -83,7 +83,7 @@ enum { }; =20 struct parse_events_term { - char *config; + const char *config; union { char *str; u64 num; @@ -138,7 +138,7 @@ bool parse_events__filter_pmu(const struct parse_events= _state *parse_state, void parse_events__shrink_config_terms(void); int parse_events__is_hardcoded_term(struct parse_events_term *term); int parse_events_term__num(struct parse_events_term **term, - int type_term, char *config, u64 num, + int type_term, const char *config, u64 num, bool novalue, void *loc_term, void *loc_val); int parse_events_term__str(struct parse_events_term **term, diff --git a/tools/perf/util/pmu.c b/tools/perf/util/pmu.c index a96ccc5c3b51..eb42f9830be7 100644 --- a/tools/perf/util/pmu.c +++ b/tools/perf/util/pmu.c @@ -1418,7 +1418,7 @@ static struct perf_pmu_alias *pmu_find_alias(struct p= erf_pmu *pmu, struct parse_events_term *term) { struct perf_pmu_alias *alias; - char *name; + const char *name; =20 if (parse_events__is_hardcoded_term(term)) return NULL; --=20 2.42.0.rc2.253.gd59a3bf2b4-goog From nobody Sat Feb 7 19:41:18 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 24E36C3DA6F for ; Fri, 25 Aug 2023 02:41:20 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S242195AbjHYCkw (ORCPT ); Thu, 24 Aug 2023 22:40:52 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59584 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S242074AbjHYCkj (ORCPT ); Thu, 24 Aug 2023 22:40:39 -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 C583D1AD for ; Thu, 24 Aug 2023 19:40:37 -0700 (PDT) Received: by mail-yw1-x1149.google.com with SMTP id 00721157ae682-58fc4291239so7438567b3.0 for ; Thu, 24 Aug 2023 19:40:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1692931237; x=1693536037; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=BHXteoJsO5CjisE3iWmyoU3o62DiyCouesqp1NV6ZaY=; b=aM1+/Q9/kqw9FPRt+ilUC2t7yHLdncPzCcyJOdfOPAzDkrfOyw4un0h7kWm/0Qss3d NZFW3A2SdinUDE2lpqWfXf87L12zQUGFk4HnP+F43itYhRV9t8p4sPKvIxpLO4O1e5ry xWTvly0fX09Jg95DitgN79YkII2+4qbIpeeQQLydHeV4IFgM1g6nevB8+LkEG1TR1gyo IgsiBX1y1/dn65Bvbkbn14tFgtJtGGxxK0KrXwN0HheDF/LrN7dc2LyhkLbEGu0uyqK1 VEVzzuFW9e/yWmLZP3luTRDeMbdMaF1I55SoCgD1dSo+nZFJUAJiI13BEx3e16PI+zJV sRTQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1692931237; x=1693536037; 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=BHXteoJsO5CjisE3iWmyoU3o62DiyCouesqp1NV6ZaY=; b=aI8F10oMLIpmleL0oYfcxTY3jL6orlC2XxoaVWZY/UPBpS8x4+iB/SO8aj20Sw1/Ox qIcBldOm+YUh36fRuKA1bbJeH1+DhFg9BEVO/lsPBk+rcHY1ClgTdx4Yh9Ngn6Haa9HY /Nc4to7jJB+dTTWjE1lQsho+6f5HlbLtUQ7DMw6yqxtkmvSyJLhp3syDqb4uFjQ78OmL pd3mfQRteNXfdWRSM3dO8PCcKXsyT1dIM83uBUyqehBzCYS4df8UQ0VWz1qeJdevYYwu aWYi8X1LwuOcrYKffzBs0q0zTxTsdFr0Bm/tIyEU0pC10idaEmhPiqPxDjyC7to3zHco ytiA== X-Gm-Message-State: AOJu0Yx3n4+vrwA147yc07NCg37/0sDw78LcNhOP+4LIcjwtCg4y1Kjc 0PXH/qfp8F+4xlUyoJB4HyjYWqBHHtQR X-Google-Smtp-Source: AGHT+IGaNkQKvYICmjYwbFYZkcVjwo9/uyNhIHNgKwBwkDBYJTIRQcWeE5epFd3NZyNnRo3DSrMjLPSFkFEv X-Received: from irogers.svl.corp.google.com ([2620:15c:2a3:200:449e:d47b:bc6b:cb6b]) (user=irogers job=sendgmr) by 2002:a81:b660:0:b0:573:5797:4b9e with SMTP id h32-20020a81b660000000b0057357974b9emr373461ywk.1.1692931237087; Thu, 24 Aug 2023 19:40:37 -0700 (PDT) Date: Thu, 24 Aug 2023 19:40:00 -0700 In-Reply-To: <20230825024002.801955-1-irogers@google.com> Message-Id: <20230825024002.801955-5-irogers@google.com> Mime-Version: 1.0 References: <20230825024002.801955-1-irogers@google.com> X-Mailer: git-send-email 2.42.0.rc2.253.gd59a3bf2b4-goog Subject: [PATCH v2 4/6] perf pmu: Make id const and add missing free From: Ian Rogers To: John Garry , Will Deacon , James Clark , Mike Leach , Leo Yan , Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Mark Rutland , Alexander Shishkin , Jiri Olsa , Namhyung Kim , Ian Rogers , Adrian Hunter , Kan Liang , Ravi Bangoria , Suzuki Poulouse , Kajol Jain , Athira Rajeev , Ming Wang , Huacai Chen , Sean Christopherson , K Prateek Nayak , linux-arm-kernel@lists.infradead.org, linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, Wei Li Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The struct pmu id is initialized from pmu_id that is read into allocated memory from a file, as such it needs free-ing in pmu__delete. Make the id value const so that we can remove casts in tests. Signed-off-by: Ian Rogers --- tools/perf/tests/pmu-events.c | 4 ++-- tools/perf/util/pmu.c | 1 + tools/perf/util/pmu.h | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/tools/perf/tests/pmu-events.c b/tools/perf/tests/pmu-events.c index 94937378647a..eb243392c0f4 100644 --- a/tools/perf/tests/pmu-events.c +++ b/tools/perf/tests/pmu-events.c @@ -684,7 +684,7 @@ static struct perf_pmu_test_pmu test_pmus[] =3D { .pmu =3D { .name =3D "uncore_sys_ddr_pmu0", .is_uncore =3D 1, - .id =3D (char *)"v8", + .id =3D "v8", }, .aliases =3D { &sys_ddr_pmu_write_cycles, @@ -694,7 +694,7 @@ static struct perf_pmu_test_pmu test_pmus[] =3D { .pmu =3D { .name =3D "uncore_sys_ccn_pmu4", .is_uncore =3D 1, - .id =3D (char *)"0x01", + .id =3D "0x01", }, .aliases =3D { &sys_ccn_pmu_read_cycles, diff --git a/tools/perf/util/pmu.c b/tools/perf/util/pmu.c index eb42f9830be7..b92dc7237f3b 100644 --- a/tools/perf/util/pmu.c +++ b/tools/perf/util/pmu.c @@ -2056,6 +2056,7 @@ void perf_pmu__delete(struct perf_pmu *pmu) zfree(&pmu->default_config); zfree(&pmu->name); zfree(&pmu->alias_name); + zfree(&pmu->id); free(pmu); } =20 diff --git a/tools/perf/util/pmu.h b/tools/perf/util/pmu.h index e90169ab3dc2..73965f208009 100644 --- a/tools/perf/util/pmu.h +++ b/tools/perf/util/pmu.h @@ -49,7 +49,7 @@ struct perf_pmu { * @id: Optional PMU identifier read from * /bus/event_source/devices//identifier. */ - char *id; + const char *id; /** * @type: Perf event attributed type value, read from * /bus/event_source/devices//type. --=20 2.42.0.rc2.253.gd59a3bf2b4-goog From nobody Sat Feb 7 19:41:18 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 1431FEE49B6 for ; Fri, 25 Aug 2023 02:41:20 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S242296AbjHYCkw (ORCPT ); Thu, 24 Aug 2023 22:40:52 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52132 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S242076AbjHYCkl (ORCPT ); Thu, 24 Aug 2023 22:40:41 -0400 Received: from mail-yw1-x114a.google.com (mail-yw1-x114a.google.com [IPv6:2607:f8b0:4864:20::114a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 05D781AD for ; Thu, 24 Aug 2023 19:40:40 -0700 (PDT) Received: by mail-yw1-x114a.google.com with SMTP id 00721157ae682-58cb845f2f2so6930717b3.1 for ; Thu, 24 Aug 2023 19:40:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1692931239; x=1693536039; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=nEmDxZXfqmiXij1P26PReriZNwm7Tzx0wPywITAyVZs=; b=0X4KsFbq6USzQWLK6dPK1VNHuT9qZ+6GnaNMLUTmFZL9XI5UK5j4OZhgw9gK4InZRb kKS8+Eu64Phorz6npOSiBkB0rdM17BaYM7yjh0Z0203v9TJ3n5m155de8klBCzUoh1qS DVybSs9v7pnVwF8qqaKXuD6n6BnWKTG/A/eJFRpmFlXZgSZx4uB9SxxAKn7HCl0s9FQS 3tyVb7DRO9MojxBY5WcOnOEHBtI7+uC63kASOKS8zXpI6IdUtcUw0E/Fm3T2FI38/lg4 xtceYZqS0Jw+LvOrNxpqcPEsRAwy6tD1pttwBM/aVoNlFOlyfZOlk+Ci4jcmKvHk4zQt +D5w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1692931239; x=1693536039; 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=nEmDxZXfqmiXij1P26PReriZNwm7Tzx0wPywITAyVZs=; b=CMP7bq48iQ3qbGqZ0w/uT5GiGS0r3nnl8wGf8GLGWm7fP5ifMPwVY4wKoQYXhLgZPt TAKT9v9mAn2Bo/HY0jBzLFk4X36j+wTokQFhrmw1D5theYqhr+KeYfSA2ZlgfGzFodPZ dFYjn8YQi+elun5CXPer053xI4dJ2FyCtYgCXPmNQm5SuXbZt8BRiz8PixdG2r7le33z dpz/ifaV/5SauQ3ORMGIyBKq9TioK6k2P73L8ysWxksJoKG9LnlLXxG4B3n9cf1hnExo DbXGu7ZHw3ABh2UFs3NHfC3gbHy95cn5J94Mc/revdEBfaGiOmxaYUIVKuat57+hOPm5 zbSg== X-Gm-Message-State: AOJu0YxHU5GkgW9d92v2QD3GsADDUplQ1HHgwWOXU0Ix7wq8BzKMDP2X A7Eoj8qulNINXrr/OSY9CMWA7GMSX01l X-Google-Smtp-Source: AGHT+IFgEMlpncts413bII2U21Eeh/C12lVb7PU6bgessDFhUJEFalAJ7Hcxnx0KkdzL9w9raMJUEdJo8+6b X-Received: from irogers.svl.corp.google.com ([2620:15c:2a3:200:449e:d47b:bc6b:cb6b]) (user=irogers job=sendgmr) by 2002:a81:ae27:0:b0:584:41b7:30e7 with SMTP id m39-20020a81ae27000000b0058441b730e7mr317527ywh.0.1692931239309; Thu, 24 Aug 2023 19:40:39 -0700 (PDT) Date: Thu, 24 Aug 2023 19:40:01 -0700 In-Reply-To: <20230825024002.801955-1-irogers@google.com> Message-Id: <20230825024002.801955-6-irogers@google.com> Mime-Version: 1.0 References: <20230825024002.801955-1-irogers@google.com> X-Mailer: git-send-email 2.42.0.rc2.253.gd59a3bf2b4-goog Subject: [PATCH v2 5/6] perf build-id: Simplify build_id_cache__cachedir From: Ian Rogers To: John Garry , Will Deacon , James Clark , Mike Leach , Leo Yan , Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Mark Rutland , Alexander Shishkin , Jiri Olsa , Namhyung Kim , Ian Rogers , Adrian Hunter , Kan Liang , Ravi Bangoria , Suzuki Poulouse , Kajol Jain , Athira Rajeev , Ming Wang , Huacai Chen , Sean Christopherson , K Prateek Nayak , linux-arm-kernel@lists.infradead.org, linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, Wei Li Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Initialize realname to NULL, rather than name. This avoids a cast and as realpath is either NULL or an allocated string, free can be called unconditionally. Signed-off-by: Ian Rogers --- tools/perf/util/build-id.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/tools/perf/util/build-id.c b/tools/perf/util/build-id.c index 36728222a5b4..03c64b85383b 100644 --- a/tools/perf/util/build-id.c +++ b/tools/perf/util/build-id.c @@ -560,7 +560,7 @@ char *build_id_cache__cachedir(const char *sbuild_id, c= onst char *name, struct nsinfo *nsi, bool is_kallsyms, bool is_vdso) { - char *realname =3D (char *)name, *filename; + char *realname =3D NULL, *filename; bool slash =3D is_kallsyms || is_vdso; =20 if (!slash) @@ -571,9 +571,7 @@ char *build_id_cache__cachedir(const char *sbuild_id, c= onst char *name, sbuild_id ? "/" : "", sbuild_id ?: "") < 0) filename =3D NULL; =20 - if (!slash) - free(realname); - + free(realname); return filename; } =20 --=20 2.42.0.rc2.253.gd59a3bf2b4-goog From nobody Sat Feb 7 19:41:18 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 4812BEE49B8 for ; Fri, 25 Aug 2023 02:41:20 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S242348AbjHYCkx (ORCPT ); Thu, 24 Aug 2023 22:40:53 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52190 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S242101AbjHYCkp (ORCPT ); Thu, 24 Aug 2023 22:40:45 -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 8175D1BF1 for ; Thu, 24 Aug 2023 19:40:43 -0700 (PDT) Received: by mail-yb1-xb4a.google.com with SMTP id 3f1490d57ef6-d72403b9e03so564743276.0 for ; Thu, 24 Aug 2023 19:40:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1692931243; x=1693536043; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=NcUqJfD2vtZBJtRGaKPEtBOFxtzHCYdgja7TOmPH0eI=; b=4taFDqDbuqGUd//d4zMAoKWauCGLK82axlzGRIGDVAL1t+gY+05nu1+h4d2VoJh/1J casYXof5V6zKlq3i9YWdXZJ8ovDquFLem9LyJHzo61d0Isb1ZqL9PRexQXEOxI41uPAy B87eNmmF+IkXg485Qn8dBCdkBoNQPqP3+54hmIgE81lllygg2MAbvpjmcb8EdNntw/yZ berDkWFyA3iJwBEhzx8xIRiRykVt8rEh7TppK8O0q5+a3KqBgdpWn+ef84Q5+w/yrJGT 6IconpBExhfL+GVCxBrOvQTvdquIsqkAra/L8QQgowQz5HaGYPeTvOE7o1NJCgv7iZcQ VPsQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1692931243; x=1693536043; 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=NcUqJfD2vtZBJtRGaKPEtBOFxtzHCYdgja7TOmPH0eI=; b=TGqtNMt0sD/xW4smww6w11r7l2jTLWhSqVPm+vw8y2mm/Z6Mt66uo3Mwrby7lQMPYA oXWrvMVfIbU0Xzyq950bL/rTmhiGfqO23zQ90aXCNEgjYqVe1O6YUuWxTcYeptqjCWZV c/KIgR+JWWLtQcacAqCRxi/LwR3HRE5CDbjj58n74JKT5HkybiLdoYxxTN1k4ap7JTd3 qBRmqzgP2mLV2Klejoh5K3Um6Roli3he8tRLPoVvRzNbJqMuCXoQ5hV+KNBHDqPjEjcd qKlSj127cQ1pTTaJA9tR1Aj2eWadAnOtcHIvoivyvPpTs3zxH9ESnmLhNtLe6Xsc05Eq /0ww== X-Gm-Message-State: AOJu0YxIsBmf54+k+F007Cm8LFXBF1gk1Wi36+I4ojEau+60rsA+Zcva VudeFTnQgZmg9OU16fOyD9nOv2rzSE00 X-Google-Smtp-Source: AGHT+IEOo3g5mLbnRiubfq5FYzAABS3D4p8ybai45wdimtAsrJ2oNUARHrolM3wRcoYP/3jUwHZ2GyLtspc3 X-Received: from irogers.svl.corp.google.com ([2620:15c:2a3:200:449e:d47b:bc6b:cb6b]) (user=irogers job=sendgmr) by 2002:a25:fc0d:0:b0:d07:e80c:412e with SMTP id v13-20020a25fc0d000000b00d07e80c412emr300379ybd.12.1692931242503; Thu, 24 Aug 2023 19:40:42 -0700 (PDT) Date: Thu, 24 Aug 2023 19:40:02 -0700 In-Reply-To: <20230825024002.801955-1-irogers@google.com> Message-Id: <20230825024002.801955-7-irogers@google.com> Mime-Version: 1.0 References: <20230825024002.801955-1-irogers@google.com> X-Mailer: git-send-email 2.42.0.rc2.253.gd59a3bf2b4-goog Subject: [PATCH v2 6/6] perf tui slang: Tidy casts From: Ian Rogers To: John Garry , Will Deacon , James Clark , Mike Leach , Leo Yan , Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Mark Rutland , Alexander Shishkin , Jiri Olsa , Namhyung Kim , Ian Rogers , Adrian Hunter , Kan Liang , Ravi Bangoria , Suzuki Poulouse , Kajol Jain , Athira Rajeev , Ming Wang , Huacai Chen , Sean Christopherson , K Prateek Nayak , linux-arm-kernel@lists.infradead.org, linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, Wei Li Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Casts were necessary for older versions of libslang, however, these are now 15 years old and so we no longer need to care about supporting them. Tidy the casts and remove unnecessary logic. Move the ENABLE_SLFUTURE_CONST to the libslang.h common include file, and also enable ENABLE_SLFUTURE_VOID. Signed-off-by: Ian Rogers --- tools/perf/ui/Build | 2 -- tools/perf/ui/browser.c | 6 +++--- tools/perf/ui/browsers/Build | 5 ----- tools/perf/ui/libslang.h | 20 ++++---------------- tools/perf/ui/tui/helpline.c | 2 +- tools/perf/ui/tui/setup.c | 2 +- tools/perf/ui/tui/util.c | 12 ++++++------ 7 files changed, 15 insertions(+), 34 deletions(-) diff --git a/tools/perf/ui/Build b/tools/perf/ui/Build index 3aff83c3275f..6b6d7143a37b 100644 --- a/tools/perf/ui/Build +++ b/tools/perf/ui/Build @@ -10,5 +10,3 @@ CFLAGS_setup.o +=3D -DLIBDIR=3D"BUILD_STR($(LIBDIR))" perf-$(CONFIG_SLANG) +=3D browser.o perf-$(CONFIG_SLANG) +=3D browsers/ perf-$(CONFIG_SLANG) +=3D tui/ - -CFLAGS_browser.o +=3D -DENABLE_SLFUTURE_CONST diff --git a/tools/perf/ui/browser.c b/tools/perf/ui/browser.c index 78fb01d6ad63..603d11283cbd 100644 --- a/tools/perf/ui/browser.c +++ b/tools/perf/ui/browser.c @@ -57,12 +57,12 @@ void ui_browser__gotorc(struct ui_browser *browser, int= y, int x) void ui_browser__write_nstring(struct ui_browser *browser __maybe_unused, = const char *msg, unsigned int width) { - slsmg_write_nstring(msg, width); + SLsmg_write_nstring(msg, width); } =20 void ui_browser__vprintf(struct ui_browser *browser __maybe_unused, const = char *fmt, va_list args) { - slsmg_vprintf(fmt, args); + SLsmg_vprintf(fmt, args); } =20 void ui_browser__printf(struct ui_browser *browser __maybe_unused, const c= har *fmt, ...) @@ -808,6 +808,6 @@ void ui_browser__init(void) =20 while (ui_browser__colorsets[i].name) { struct ui_browser_colorset *c =3D &ui_browser__colorsets[i++]; - sltt_set_color(c->colorset, c->name, c->fg, c->bg); + SLtt_set_color(c->colorset, c->name, c->fg, c->bg); } } diff --git a/tools/perf/ui/browsers/Build b/tools/perf/ui/browsers/Build index fdf86f7981ca..7a1d5ddaf688 100644 --- a/tools/perf/ui/browsers/Build +++ b/tools/perf/ui/browsers/Build @@ -4,8 +4,3 @@ perf-y +=3D map.o perf-y +=3D scripts.o perf-y +=3D header.o perf-y +=3D res_sample.o - -CFLAGS_annotate.o +=3D -DENABLE_SLFUTURE_CONST -CFLAGS_hists.o +=3D -DENABLE_SLFUTURE_CONST -CFLAGS_map.o +=3D -DENABLE_SLFUTURE_CONST -CFLAGS_scripts.o +=3D -DENABLE_SLFUTURE_CONST diff --git a/tools/perf/ui/libslang.h b/tools/perf/ui/libslang.h index 991e692b9b46..1dff3020e9d5 100644 --- a/tools/perf/ui/libslang.h +++ b/tools/perf/ui/libslang.h @@ -11,28 +11,16 @@ #define HAVE_LONG_LONG __GLIBC_HAVE_LONG_LONG #endif =20 +/* Enable future slang's corrected function prototypes. */ +#define ENABLE_SLFUTURE_CONST 1 +#define ENABLE_SLFUTURE_VOID 1 + #ifdef HAVE_SLANG_INCLUDE_SUBDIR #include #else #include #endif =20 -#if SLANG_VERSION < 20104 -#define slsmg_printf(msg, args...) \ - SLsmg_printf((char *)(msg), ##args) -#define slsmg_vprintf(msg, vargs) \ - SLsmg_vprintf((char *)(msg), vargs) -#define slsmg_write_nstring(msg, len) \ - SLsmg_write_nstring((char *)(msg), len) -#define sltt_set_color(obj, name, fg, bg) \ - SLtt_set_color(obj,(char *)(name), (char *)(fg), (char *)(bg)) -#else -#define slsmg_printf SLsmg_printf -#define slsmg_vprintf SLsmg_vprintf -#define slsmg_write_nstring SLsmg_write_nstring -#define sltt_set_color SLtt_set_color -#endif - #define SL_KEY_UNTAB 0x1000 =20 #endif /* _PERF_UI_SLANG_H_ */ diff --git a/tools/perf/ui/tui/helpline.c b/tools/perf/ui/tui/helpline.c index db4952f5990b..b39451314f43 100644 --- a/tools/perf/ui/tui/helpline.c +++ b/tools/perf/ui/tui/helpline.c @@ -22,7 +22,7 @@ static void tui_helpline__push(const char *msg) =20 SLsmg_gotorc(SLtt_Screen_Rows - 1, 0); SLsmg_set_color(0); - SLsmg_write_nstring((char *)msg, SLtt_Screen_Cols); + SLsmg_write_nstring(msg, SLtt_Screen_Cols); SLsmg_refresh(); strlcpy(ui_helpline__current, msg, sz); } diff --git a/tools/perf/ui/tui/setup.c b/tools/perf/ui/tui/setup.c index c1886aa184b3..605d9e175ea7 100644 --- a/tools/perf/ui/tui/setup.c +++ b/tools/perf/ui/tui/setup.c @@ -142,7 +142,7 @@ int ui__init(void) goto out; } =20 - SLkp_define_keysym((char *)"^(kB)", SL_KEY_UNTAB); + SLkp_define_keysym("^(kB)", SL_KEY_UNTAB); =20 signal(SIGSEGV, ui__signal_backtrace); signal(SIGFPE, ui__signal_backtrace); diff --git a/tools/perf/ui/tui/util.c b/tools/perf/ui/tui/util.c index 3c5174854ac8..e4d322ce0b54 100644 --- a/tools/perf/ui/tui/util.c +++ b/tools/perf/ui/tui/util.c @@ -106,7 +106,7 @@ int ui_browser__input_window(const char *title, const c= har *text, char *input, SLsmg_draw_box(y, x++, nr_lines, max_len); if (title) { SLsmg_gotorc(y, x + 1); - SLsmg_write_string((char *)title); + SLsmg_write_string(title); } SLsmg_gotorc(++y, x); nr_lines -=3D 7; @@ -117,12 +117,12 @@ int ui_browser__input_window(const char *title, const= char *text, char *input, len =3D 5; while (len--) { SLsmg_gotorc(y + len - 1, x); - SLsmg_write_nstring((char *)" ", max_len); + SLsmg_write_nstring(" ", max_len); } SLsmg_draw_box(y++, x + 1, 3, max_len - 2); =20 SLsmg_gotorc(y + 3, x); - SLsmg_write_nstring((char *)exit_msg, max_len); + SLsmg_write_nstring(exit_msg, max_len); SLsmg_refresh(); =20 mutex_unlock(&ui__lock); @@ -197,7 +197,7 @@ void __ui__info_window(const char *title, const char *t= ext, const char *exit_msg SLsmg_draw_box(y, x++, nr_lines, max_len); if (title) { SLsmg_gotorc(y, x + 1); - SLsmg_write_string((char *)title); + SLsmg_write_string(title); } SLsmg_gotorc(++y, x); if (exit_msg) @@ -207,9 +207,9 @@ void __ui__info_window(const char *title, const char *t= ext, const char *exit_msg nr_lines, max_len, 1); if (exit_msg) { SLsmg_gotorc(y + nr_lines - 2, x); - SLsmg_write_nstring((char *)" ", max_len); + SLsmg_write_nstring(" ", max_len); SLsmg_gotorc(y + nr_lines - 1, x); - SLsmg_write_nstring((char *)exit_msg, max_len); + SLsmg_write_nstring(exit_msg, max_len); } } =20 --=20 2.42.0.rc2.253.gd59a3bf2b4-goog