public inbox for linux-perf-users@vger.kernel.org
 help / color / mirror / Atom feed
From: Arnaldo Melo <arnaldo.melo@gmail.com>
To: Ian Rogers <irogers@google.com>,
	Arnaldo Carvalho de Melo <acme@kernel.org>
Cc: Namhyung Kim <namhyung@kernel.org>,
	Ingo Molnar <mingo@kernel.org>,
	Thomas Gleixner <tglx@linutronix.de>,
	James Clark <james.clark@linaro.org>,
	Jiri Olsa <jolsa@kernel.org>,
	Adrian Hunter <adrian.hunter@intel.com>,
	Kan Liang <kan.liang@linux.intel.com>,
	Clark Williams <williams@redhat.com>,
	linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org,
	Arnaldo Carvalho de Melo <acme@redhat.com>
Subject: Re: [PATCH 3/4] perf tools: Use calloc() were applicable
Date: Wed, 01 Apr 2026 20:15:25 -0300	[thread overview]
Message-ID: <DEE862AB-0E14-4DFC-946B-334E05AC0B4D@gmail.com> (raw)
In-Reply-To: <CAP-5=fWsC-aCphP2XJuJHSFhjEvg9T+1y+BTGQLU3AM2jcwUUw@mail.gmail.com>



On April 1, 2026 7:14:40 PM GMT-03:00, Ian Rogers <irogers@google.com> wrote:
>On Wed, Apr 1, 2026 at 2:53 PM Arnaldo Carvalho de Melo <acme@kernel.org> wrote:
>>
>> From: Arnaldo Carvalho de Melo <acme@redhat.com>
>>
>> Instead of using zalloc(nr_entries * sizeof_entry) that is what calloc()
>> does.
>>
>> In some places where linux/zalloc.h isn't needed, remove it, add when
>> needed and was getting it indirectly.
>>
>> Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
>> ---

>>
>> +++ b/tools/perf/builtin-script.c
>> @@ -3667,7 +3667,7 @@ static int list_available_scripts(const struct option *opt __maybe_unused,
>>         struct script_desc *desc;
>>         char *script_root;
>>
>> -       buf = malloc(3 * MAXPATHLEN + BUFSIZ);
>> +       buf = calloc(3, MAXPATHLEN + BUFSIZ);
>
>Sashiko caught this one, although I'd probably just keep it as a malloc/zalloc.
>
>Does this unintentionally over-allocate memory?
>
>The original malloc requested 3 * MAXPATHLEN + BUFSIZ bytes. The updated
>calloc requests 3 elements of size MAXPATHLEN + BUFSIZ, which evaluates to
>3 * MAXPATHLEN + 3 * BUFSIZ bytes.
>
>Should this be calloc(1, 3 * MAXPATHLEN + BUFSIZ) to maintain the original
>allocation size?

I think we should just leave it as a malloc, will send a V3.

Eagle eyes, sashiko! :-)

- Arnaldo


>Thanks,
>Ian
>
>>         if (!buf) {
>>                 pr_err("malloc failed\n");
>>                 exit(-1);
>> @@ -3819,7 +3819,7 @@ static int has_required_arg(char *script_path)
>>
>>  static int have_cmd(int argc, const char **argv)
>>  {
>> -       char **__argv = malloc(sizeof(const char *) * argc);
>> +       char **__argv = calloc(argc, sizeof(const char *));
>>
>>         if (!__argv) {
>>                 pr_err("malloc failed\n");
>> @@ -4317,7 +4317,7 @@ int cmd_script(int argc, const char **argv)
>>                                 }
>>                         }
>>
>> -                       __argv = malloc((argc + 6) * sizeof(const char *));
>> +                       __argv = calloc(argc + 6, sizeof(const char *));
>>                         if (!__argv) {
>>                                 pr_err("malloc failed\n");
>>                                 err = -ENOMEM;
>> @@ -4343,7 +4343,7 @@ int cmd_script(int argc, const char **argv)
>>                 dup2(live_pipe[0], 0);
>>                 close(live_pipe[1]);
>>
>> -               __argv = malloc((argc + 4) * sizeof(const char *));
>> +               __argv = calloc(argc + 4, sizeof(const char *));
>>                 if (!__argv) {
>>                         pr_err("malloc failed\n");
>>                         err = -ENOMEM;
>> @@ -4381,7 +4381,7 @@ int cmd_script(int argc, const char **argv)
>>                         }
>>                 }
>>
>> -               __argv = malloc((argc + 2) * sizeof(const char *));
>> +               __argv = calloc(argc + 2, sizeof(const char *));
>>                 if (!__argv) {
>>                         pr_err("malloc failed\n");
>>                         err = -ENOMEM;
>> diff --git a/tools/perf/builtin-stat.c b/tools/perf/builtin-stat.c
>> index a24326c44297c534..94b753d25550324f 100644
>> --- a/tools/perf/builtin-stat.c
>> +++ b/tools/perf/builtin-stat.c
>> @@ -2766,7 +2766,7 @@ int cmd_stat(int argc, const char **argv)
>>         }
>>
>>         if (stat_config.walltime_run_table) {
>> -               stat_config.walltime_run = zalloc(stat_config.run_count * sizeof(stat_config.walltime_run[0]));
>> +               stat_config.walltime_run = calloc(stat_config.run_count, sizeof(stat_config.walltime_run[0]));
>>                 if (!stat_config.walltime_run) {
>>                         pr_err("failed to setup -r option");
>>                         goto out;
>> diff --git a/tools/perf/builtin-trace.c b/tools/perf/builtin-trace.c
>> index f487fbaa0ad60028..8cdfd126115e1b69 100644
>> --- a/tools/perf/builtin-trace.c
>> +++ b/tools/perf/builtin-trace.c
>> @@ -2265,9 +2265,7 @@ static int trace__validate_ev_qualifier(struct trace *trace)
>>         struct str_node *pos;
>>         size_t nr_used = 0, nr_allocated = strlist__nr_entries(trace->ev_qualifier);
>>
>> -       trace->ev_qualifier_ids.entries = malloc(nr_allocated *
>> -                                                sizeof(trace->ev_qualifier_ids.entries[0]));
>> -
>> +       trace->ev_qualifier_ids.entries = calloc(nr_allocated, sizeof(trace->ev_qualifier_ids.entries[0]));
>>         if (trace->ev_qualifier_ids.entries == NULL) {
>>                 fputs("Error:\tNot enough memory for allocating events qualifier ids\n",
>>                        trace->output);
>> diff --git a/tools/perf/jvmti/libjvmti.c b/tools/perf/jvmti/libjvmti.c
>> index 87bfd4781003a331..d3dc53010e768669 100644
>> --- a/tools/perf/jvmti/libjvmti.c
>> +++ b/tools/perf/jvmti/libjvmti.c
>> @@ -98,7 +98,7 @@ get_line_numbers(jvmtiEnv *jvmti, const void *compile_info, jvmti_line_info_t **
>>         /*
>>          * Phase 2 -- allocate big enough line table
>>          */
>> -       *tab = malloc(nr_total * sizeof(**tab));
>> +       *tab = calloc(nr_total, sizeof(**tab));
>>         if (!*tab)
>>                 return JVMTI_ERROR_OUT_OF_MEMORY;
>>
>> @@ -262,11 +262,10 @@ compiled_method_load_cb(jvmtiEnv *jvmti,
>>                         }
>>                         nr_lines = 0;
>>                 } else if (nr_lines > 0) {
>> -                       line_file_names = malloc(sizeof(char*) * nr_lines);
>> +                       line_file_names = calloc(nr_lines, sizeof(char *));
>>                         if (!line_file_names) {
>>                                 warnx("jvmti: cannot allocate space for line table method names");
>>                         } else {
>> -                               memset(line_file_names, 0, sizeof(char*) * nr_lines);
>>                                 ret = fill_source_filenames(jvmti, nr_lines, line_tab, line_file_names);
>>                                 if (ret != JVMTI_ERROR_NONE) {
>>                                         warnx("jvmti: fill_source_filenames failed");
>> diff --git a/tools/perf/tests/code-reading.c b/tools/perf/tests/code-reading.c
>> index 5927d1ea20e22331..47043a3a2fb4f833 100644
>> --- a/tools/perf/tests/code-reading.c
>> +++ b/tools/perf/tests/code-reading.c
>> @@ -4,6 +4,7 @@
>>  #include <linux/kernel.h>
>>  #include <linux/rbtree.h>
>>  #include <linux/types.h>
>> +#include <linux/zalloc.h>
>>  #include <inttypes.h>
>>  #include <stdlib.h>
>>  #include <unistd.h>
>> diff --git a/tools/perf/tests/thread-map.c b/tools/perf/tests/thread-map.c
>> index 54209592168d8aaf..877868107455e87e 100644
>> --- a/tools/perf/tests/thread-map.c
>> +++ b/tools/perf/tests/thread-map.c
>> @@ -9,7 +9,6 @@
>>  #include "debug.h"
>>  #include "event.h"
>>  #include "util/synthetic-events.h"
>> -#include <linux/zalloc.h>
>>  #include <perf/event.h>
>>  #include <internal/threadmap.h>
>>
>> diff --git a/tools/perf/util/annotate-arch/annotate-x86.c b/tools/perf/util/annotate-arch/annotate-x86.c
>> index c77aabd48ebab693..7e61365363938728 100644
>> --- a/tools/perf/util/annotate-arch/annotate-x86.c
>> +++ b/tools/perf/util/annotate-arch/annotate-x86.c
>> @@ -1,6 +1,7 @@
>>  // SPDX-License-Identifier: GPL-2.0
>>  #include <string.h>
>>  #include <linux/compiler.h>
>> +#include <linux/zalloc.h>
>>  #include <assert.h>
>>  #include <inttypes.h>
>>  #include "../annotate-data.h"
>> diff --git a/tools/perf/util/bpf-event.c b/tools/perf/util/bpf-event.c
>> index 67e7786bb878b396..a27945c279efb779 100644
>> --- a/tools/perf/util/bpf-event.c
>> +++ b/tools/perf/util/bpf-event.c
>> @@ -349,7 +349,7 @@ static struct bpf_metadata *bpf_metadata_alloc(__u32 nr_prog_tags,
>>         if (!metadata)
>>                 return NULL;
>>
>> -       metadata->prog_names = zalloc(nr_prog_tags * sizeof(char *));
>> +       metadata->prog_names = calloc(nr_prog_tags, sizeof(char *));
>>         if (!metadata->prog_names) {
>>                 bpf_metadata_free(metadata);
>>                 return NULL;
>> diff --git a/tools/perf/util/bpf_counter_cgroup.c b/tools/perf/util/bpf_counter_cgroup.c
>> index 5572ceccf86092ff..519fee3dc3d03685 100644
>> --- a/tools/perf/util/bpf_counter_cgroup.c
>> +++ b/tools/perf/util/bpf_counter_cgroup.c
>> @@ -11,7 +11,6 @@
>>  #include <sys/time.h>
>>  #include <sys/resource.h>
>>  #include <linux/err.h>
>> -#include <linux/zalloc.h>
>>  #include <linux/perf_event.h>
>>  #include <api/fs/fs.h>
>>  #include <bpf/bpf.h>
>> diff --git a/tools/perf/util/data-convert-bt.c b/tools/perf/util/data-convert-bt.c
>> index ba1c8e48d4952e4a..d4927d31a7a3a8d9 100644
>> --- a/tools/perf/util/data-convert-bt.c
>> +++ b/tools/perf/util/data-convert-bt.c
>> @@ -1360,7 +1360,7 @@ static int setup_streams(struct ctf_writer *cw, struct perf_session *session)
>>          */
>>         ncpus = env->nr_cpus_avail ?: MAX_CPUS;
>>
>> -       stream = zalloc(sizeof(*stream) * ncpus);
>> +       stream = calloc(ncpus, sizeof(*stream));
>>         if (!stream) {
>>                 pr_err("Failed to allocate streams.\n");
>>                 return -ENOMEM;
>> diff --git a/tools/perf/util/data.c b/tools/perf/util/data.c
>> index 90df41da1a32b315..14fa83dae71a8b80 100644
>> --- a/tools/perf/util/data.c
>> +++ b/tools/perf/util/data.c
>> @@ -43,7 +43,7 @@ int perf_data__create_dir(struct perf_data *data, int nr)
>>         if (WARN_ON(!data->is_dir))
>>                 return -EINVAL;
>>
>> -       files = zalloc(nr * sizeof(*files));
>> +       files = calloc(nr, sizeof(*files));
>>         if (!files)
>>                 return -ENOMEM;
>>
>> diff --git a/tools/perf/util/db-export.c b/tools/perf/util/db-export.c
>> index ae9a9065aab76c63..cc2bb1af4243446c 100644
>> --- a/tools/perf/util/db-export.c
>> +++ b/tools/perf/util/db-export.c
>> @@ -19,7 +19,6 @@
>>  #include "callchain.h"
>>  #include "call-path.h"
>>  #include "db-export.h"
>> -#include <linux/zalloc.h>
>>
>>  int db_export__init(struct db_export *dbe)
>>  {
>> diff --git a/tools/perf/util/disasm.c b/tools/perf/util/disasm.c
>> index 40fcaed5d0b1a3b8..4f5bd915355242ec 100644
>> --- a/tools/perf/util/disasm.c
>> +++ b/tools/perf/util/disasm.c
>> @@ -13,6 +13,7 @@
>>  #include <unistd.h>
>>
>>  #include <linux/string.h>
>> +#include <linux/zalloc.h>
>>  #include <subcmd/run-command.h>
>>
>>  #include "annotate.h"
>> diff --git a/tools/perf/util/event.c b/tools/perf/util/event.c
>> index bc045fddf7d57569..66f4843bb235df53 100644
>> --- a/tools/perf/util/event.c
>> +++ b/tools/perf/util/event.c
>> @@ -12,7 +12,6 @@
>>  #include <unistd.h>
>>  #include <uapi/linux/mman.h> /* To get things like MAP_HUGETLB even on older libc headers */
>>  #include <linux/perf_event.h>
>> -#include <linux/zalloc.h>
>>  #include "cpumap.h"
>>  #include "dso.h"
>>  #include "event.h"
>> diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c
>> index c702741a917380b9..73ea382d826364dd 100644
>> --- a/tools/perf/util/evlist.c
>> +++ b/tools/perf/util/evlist.c
>> @@ -825,9 +825,8 @@ static struct mmap *evlist__alloc_mmap(struct evlist *evlist,
>>                                        bool overwrite)
>>  {
>>         int i;
>> -       struct mmap *map;
>> +       struct mmap *map = calloc(evlist->core.nr_mmaps, sizeof(struct mmap));
>>
>> -       map = zalloc(evlist->core.nr_mmaps * sizeof(struct mmap));
>>         if (!map)
>>                 return NULL;
>>
>> diff --git a/tools/perf/util/header.c b/tools/perf/util/header.c
>> index 9142a8ba401957c6..a0a5c96288af2674 100644
>> --- a/tools/perf/util/header.c
>> +++ b/tools/perf/util/header.c
>> @@ -2761,7 +2761,7 @@ static int process_cmdline(struct feat_fd *ff, void *data __maybe_unused)
>>         if (!cmdline)
>>                 return -1;
>>
>> -       argv = zalloc(sizeof(char *) * (nr + 1));
>> +       argv = calloc(nr + 1, sizeof(char *));
>>         if (!argv)
>>                 goto error;
>>
>> @@ -2915,7 +2915,7 @@ static int process_numa_topology(struct feat_fd *ff, void *data __maybe_unused)
>>         if (do_read_u32(ff, &nr))
>>                 return -1;
>>
>> -       nodes = zalloc(sizeof(*nodes) * nr);
>> +       nodes = calloc(nr, sizeof(*nodes));
>>         if (!nodes)
>>                 return -ENOMEM;
>>
>> @@ -3113,7 +3113,7 @@ static int process_cache(struct feat_fd *ff, void *data __maybe_unused)
>>         if (do_read_u32(ff, &cnt))
>>                 return -1;
>>
>> -       caches = zalloc(sizeof(*caches) * cnt);
>> +       caches = calloc(cnt, sizeof(*caches));
>>         if (!caches)
>>                 return -1;
>>
>> @@ -3195,7 +3195,7 @@ static int process_mem_topology(struct feat_fd *ff,
>>         if (do_read_u64(ff, &nr))
>>                 return -1;
>>
>> -       nodes = zalloc(sizeof(*nodes) * nr);
>> +       nodes = calloc(nr, sizeof(*nodes));
>>         if (!nodes)
>>                 return -1;
>>
>> @@ -3285,7 +3285,7 @@ static int process_hybrid_topology(struct feat_fd *ff,
>>         if (do_read_u32(ff, &nr))
>>                 return -1;
>>
>> -       nodes = zalloc(sizeof(*nodes) * nr);
>> +       nodes = calloc(nr, sizeof(*nodes));
>>         if (!nodes)
>>                 return -ENOMEM;
>>
>> @@ -3492,7 +3492,7 @@ static int __process_pmu_caps(struct feat_fd *ff, int *nr_caps,
>>         if (!nr_pmu_caps)
>>                 return 0;
>>
>> -       *caps = zalloc(sizeof(char *) * nr_pmu_caps);
>> +       *caps = calloc(nr_pmu_caps, sizeof(char *));
>>         if (!*caps)
>>                 return -1;
>>
>> @@ -3569,7 +3569,7 @@ static int process_pmu_caps(struct feat_fd *ff, void *data __maybe_unused)
>>                 return 0;
>>         }
>>
>> -       pmu_caps = zalloc(sizeof(*pmu_caps) * nr_pmu);
>> +       pmu_caps = calloc(nr_pmu, sizeof(*pmu_caps));
>>         if (!pmu_caps)
>>                 return -ENOMEM;
>>
>> @@ -3622,7 +3622,7 @@ static int process_cpu_domain_info(struct feat_fd *ff, void *data __maybe_unused
>>         nra = env->nr_cpus_avail;
>>         nr = env->nr_cpus_online;
>>
>> -       cd_map = zalloc(sizeof(*cd_map) * nra);
>> +       cd_map = calloc(nra, sizeof(*cd_map));
>>         if (!cd_map)
>>                 return -1;
>>
>> @@ -3655,7 +3655,7 @@ static int process_cpu_domain_info(struct feat_fd *ff, void *data __maybe_unused
>>
>>                 cd_map[cpu]->nr_domains = nr_domains;
>>
>> -               cd_map[cpu]->domains = zalloc(sizeof(*d_info) * max_sched_domains);
>> +               cd_map[cpu]->domains = calloc(max_sched_domains, sizeof(*d_info));
>>                 if (!cd_map[cpu]->domains)
>>                         return -1;
>>
>> diff --git a/tools/perf/util/hist.c b/tools/perf/util/hist.c
>> index fc737a0a8e4d7acd..747fdc455c80ec0f 100644
>> --- a/tools/perf/util/hist.c
>> +++ b/tools/perf/util/hist.c
>> @@ -1151,7 +1151,7 @@ iter_prepare_cumulative_entry(struct hist_entry_iter *iter,
>>          * cumulated only one time to prevent entries more than 100%
>>          * overhead.
>>          */
>> -       he_cache = malloc(sizeof(*he_cache) * (cursor->nr + 1));
>> +       he_cache = calloc(cursor->nr + 1, sizeof(*he_cache));
>>         if (he_cache == NULL)
>>                 return -ENOMEM;
>>
>> diff --git a/tools/perf/util/mem2node.c b/tools/perf/util/mem2node.c
>> index 03a7d7b2773774a0..51a2292cbf7ef44f 100644
>> --- a/tools/perf/util/mem2node.c
>> +++ b/tools/perf/util/mem2node.c
>> @@ -59,7 +59,7 @@ int mem2node__init(struct mem2node *map, struct perf_env *env)
>>                 max += bitmap_weight(n->set, n->size);
>>         }
>>
>> -       entries = zalloc(sizeof(*entries) * max);
>> +       entries = calloc(max, sizeof(*entries));
>>         if (!entries)
>>                 return -ENOMEM;
>>
>> diff --git a/tools/perf/util/pmus.c b/tools/perf/util/pmus.c
>> index 98be2eb8f1f03923..9a2023ceeefd933a 100644
>> --- a/tools/perf/util/pmus.c
>> +++ b/tools/perf/util/pmus.c
>> @@ -621,7 +621,7 @@ void perf_pmus__print_pmu_events(const struct print_callbacks *print_cb, void *p
>>         while ((pmu = scan_fn(pmu)) != NULL)
>>                 len += perf_pmu__num_events(pmu);
>>
>> -       aliases = zalloc(sizeof(struct sevent) * len);
>> +       aliases = calloc(len, sizeof(struct sevent));
>>         if (!aliases) {
>>                 pr_err("FATAL: not enough memory to print PMU events\n");
>>                 return;
>> diff --git a/tools/perf/util/powerpc-vpadtl.c b/tools/perf/util/powerpc-vpadtl.c
>> index d1c3396f182fdd83..5884ae2ff5fff218 100644
>> --- a/tools/perf/util/powerpc-vpadtl.c
>> +++ b/tools/perf/util/powerpc-vpadtl.c
>> @@ -4,6 +4,7 @@
>>   */
>>
>>  #include <linux/string.h>
>> +#include <linux/zalloc.h>
>>  #include <errno.h>
>>  #include <inttypes.h>
>>  #include "color.h"
>> diff --git a/tools/perf/util/probe-event.c b/tools/perf/util/probe-event.c
>> index 710e4620923ea8b2..f37a783ea7723197 100644
>> --- a/tools/perf/util/probe-event.c
>> +++ b/tools/perf/util/probe-event.c
>> @@ -1850,7 +1850,7 @@ int parse_perf_probe_command(const char *cmd, struct perf_probe_event *pev)
>>
>>         /* Copy arguments and ensure return probe has no C argument */
>>         pev->nargs = argc - 1;
>> -       pev->args = zalloc(sizeof(struct perf_probe_arg) * pev->nargs);
>> +       pev->args = calloc(pev->nargs, sizeof(struct perf_probe_arg));
>>         if (pev->args == NULL) {
>>                 ret = -ENOMEM;
>>                 goto out;
>> @@ -2000,7 +2000,7 @@ int parse_probe_trace_command(const char *cmd, struct probe_trace_event *tev)
>>         }
>>
>>         tev->nargs = argc - 2;
>> -       tev->args = zalloc(sizeof(struct probe_trace_arg) * tev->nargs);
>> +       tev->args = calloc(tev->nargs, sizeof(struct probe_trace_arg));
>>         if (tev->args == NULL) {
>>                 ret = -ENOMEM;
>>                 goto out;
>> @@ -2373,7 +2373,7 @@ static int convert_to_perf_probe_event(struct probe_trace_event *tev,
>>
>>         /* Convert trace_arg to probe_arg */
>>         pev->nargs = tev->nargs;
>> -       pev->args = zalloc(sizeof(struct perf_probe_arg) * pev->nargs);
>> +       pev->args = calloc(pev->nargs, sizeof(struct perf_probe_arg));
>>         if (pev->args == NULL)
>>                 return -ENOMEM;
>>         for (i = 0; i < tev->nargs && ret >= 0; i++) {
>> @@ -2480,7 +2480,7 @@ int perf_probe_event__copy(struct perf_probe_event *dst,
>>         if (perf_probe_point__copy(&dst->point, &src->point) < 0)
>>                 goto out_err;
>>
>> -       dst->args = zalloc(sizeof(struct perf_probe_arg) * src->nargs);
>> +       dst->args = calloc(src->nargs, sizeof(struct perf_probe_arg));
>>         if (!dst->args)
>>                 goto out_err;
>>         dst->nargs = src->nargs;
>> @@ -3179,7 +3179,7 @@ static int find_probe_trace_events_from_map(struct perf_probe_event *pev,
>>         }
>>
>>         /* Setup result trace-probe-events */
>> -       *tevs = zalloc(sizeof(*tev) * num_matched_functions);
>> +       *tevs = calloc(num_matched_functions, sizeof(*tev));
>>         if (!*tevs) {
>>                 ret = -ENOMEM;
>>                 goto out;
>> @@ -3251,8 +3251,7 @@ static int find_probe_trace_events_from_map(struct perf_probe_event *pev,
>>                 tev->uprobes = pev->uprobes;
>>                 tev->nargs = pev->nargs;
>>                 if (tev->nargs) {
>> -                       tev->args = zalloc(sizeof(struct probe_trace_arg) *
>> -                                          tev->nargs);
>> +                       tev->args = calloc(tev->nargs, sizeof(struct probe_trace_arg));
>>                         if (tev->args == NULL)
>>                                 goto nomem_out;
>>                 }
>> @@ -3363,7 +3362,7 @@ static int try_to_find_absolute_address(struct perf_probe_event *pev,
>>         }
>>
>>         tev->nargs = pev->nargs;
>> -       tev->args = zalloc(sizeof(struct probe_trace_arg) * tev->nargs);
>> +       tev->args = calloc(tev->nargs, sizeof(struct probe_trace_arg));
>>         if (!tev->args)
>>                 goto errout;
>>
>> @@ -3549,7 +3548,7 @@ static int find_probe_trace_events_from_cache(struct perf_probe_event *pev,
>>                 goto out;
>>         }
>>
>> -       *tevs = zalloc(ret * sizeof(*tev));
>> +       *tevs = calloc(ret, sizeof(*tev));
>>         if (!*tevs) {
>>                 ret = -ENOMEM;
>>                 goto out;
>> diff --git a/tools/perf/util/probe-file.c b/tools/perf/util/probe-file.c
>> index f78c3bc3d601ea95..4032572cbf55df12 100644
>> --- a/tools/perf/util/probe-file.c
>> +++ b/tools/perf/util/probe-file.c
>> @@ -414,7 +414,7 @@ int probe_cache_entry__get_event(struct probe_cache_entry *entry,
>>         if (ret > probe_conf.max_probes)
>>                 return -E2BIG;
>>
>> -       *tevs = zalloc(ret * sizeof(*tev));
>> +       *tevs = calloc(ret, sizeof(*tev));
>>         if (!*tevs)
>>                 return -ENOMEM;
>>
>> diff --git a/tools/perf/util/probe-finder.c b/tools/perf/util/probe-finder.c
>> index 5ffd97ee4898e51e..64328abeef8b2427 100644
>> --- a/tools/perf/util/probe-finder.c
>> +++ b/tools/perf/util/probe-finder.c
>> @@ -1305,7 +1305,7 @@ static int add_probe_trace_event(Dwarf_Die *sc_die, struct probe_finder *pf)
>>                  tev->point.offset);
>>
>>         /* Expand special probe argument if exist */
>> -       args = zalloc(sizeof(struct perf_probe_arg) * MAX_PROBE_ARGS);
>> +       args = calloc(MAX_PROBE_ARGS, sizeof(struct perf_probe_arg));
>>         if (args == NULL) {
>>                 ret = -ENOMEM;
>>                 goto end;
>> @@ -1316,7 +1316,7 @@ static int add_probe_trace_event(Dwarf_Die *sc_die, struct probe_finder *pf)
>>                 goto end;
>>
>>         tev->nargs = ret;
>> -       tev->args = zalloc(sizeof(struct probe_trace_arg) * tev->nargs);
>> +       tev->args = calloc(tev->nargs, sizeof(struct probe_trace_arg));
>>         if (tev->args == NULL) {
>>                 ret = -ENOMEM;
>>                 goto end;
>> @@ -1393,7 +1393,7 @@ int debuginfo__find_trace_events(struct debuginfo *dbg,
>>         int ret, i;
>>
>>         /* Allocate result tevs array */
>> -       *tevs = zalloc(sizeof(struct probe_trace_event) * tf.max_tevs);
>> +       *tevs = calloc(tf.max_tevs, sizeof(struct probe_trace_event));
>>         if (*tevs == NULL)
>>                 return -ENOMEM;
>>
>> @@ -1566,7 +1566,7 @@ int debuginfo__find_available_vars_at(struct debuginfo *dbg,
>>         int ret;
>>
>>         /* Allocate result vls array */
>> -       *vls = zalloc(sizeof(struct variable_list) * af.max_vls);
>> +       *vls = calloc(af.max_vls, sizeof(struct variable_list));
>>         if (*vls == NULL)
>>                 return -ENOMEM;
>>
>> diff --git a/tools/perf/util/session.c b/tools/perf/util/session.c
>> index 09de5288f9e15bb0..7996c4c654b0f5b7 100644
>> --- a/tools/perf/util/session.c
>> +++ b/tools/perf/util/session.c
>> @@ -2533,7 +2533,7 @@ static int __perf_session__process_dir_events(struct perf_session *session)
>>                         nr_readers++;
>>         }
>>
>> -       rd = zalloc(nr_readers * sizeof(struct reader));
>> +       rd = calloc(nr_readers, sizeof(struct reader));
>>         if (!rd)
>>                 return -ENOMEM;
>>
>> diff --git a/tools/perf/util/srcline.c b/tools/perf/util/srcline.c
>> index 9be42f3984405f9e..b58710624eadfe1b 100644
>> --- a/tools/perf/util/srcline.c
>> +++ b/tools/perf/util/srcline.c
>> @@ -12,6 +12,7 @@
>>  #include <inttypes.h>
>>  #include <string.h>
>>  #include <linux/string.h>
>> +#include <linux/zalloc.h>
>>
>>  bool srcline_full_filename;
>>
>> diff --git a/tools/perf/util/stat-shadow.c b/tools/perf/util/stat-shadow.c
>> index 59d2cd4f2188de72..bc2d44df7bafa4d5 100644
>> --- a/tools/perf/util/stat-shadow.c
>> +++ b/tools/perf/util/stat-shadow.c
>> @@ -13,7 +13,6 @@
>>  #include "metricgroup.h"
>>  #include "cgroup.h"
>>  #include "units.h"
>> -#include <linux/zalloc.h>
>>  #include "iostat.h"
>>  #include "util/hashmap.h"
>>  #include "tool_pmu.h"
>> diff --git a/tools/perf/util/unwind-libunwind-local.c b/tools/perf/util/unwind-libunwind-local.c
>> index 5b39ce21e33351f8..87d496e9dfa6669c 100644
>> --- a/tools/perf/util/unwind-libunwind-local.c
>> +++ b/tools/perf/util/unwind-libunwind-local.c
>> @@ -25,7 +25,6 @@
>>  #include <unistd.h>
>>  #include <sys/mman.h>
>>  #include <linux/list.h>
>> -#include <linux/zalloc.h>
>>  #ifndef REMOTE_UNWIND_LIBUNWIND
>>  #include <libunwind.h>
>>  #include <libunwind-ptrace.h>
>> diff --git a/tools/perf/util/values.c b/tools/perf/util/values.c
>> index ec72d29f3d586d47..6eaddfcf833e52a2 100644
>> --- a/tools/perf/util/values.c
>> +++ b/tools/perf/util/values.c
>> @@ -13,9 +13,9 @@
>>  int perf_read_values_init(struct perf_read_values *values)
>>  {
>>         values->threads_max = 16;
>> -       values->pid = malloc(values->threads_max * sizeof(*values->pid));
>> -       values->tid = malloc(values->threads_max * sizeof(*values->tid));
>> -       values->value = zalloc(values->threads_max * sizeof(*values->value));
>> +       values->pid = calloc(values->threads_max, sizeof(*values->pid));
>> +       values->tid = calloc(values->threads_max, sizeof(*values->tid));
>> +       values->value = calloc(values->threads_max, sizeof(*values->value));
>>         if (!values->pid || !values->tid || !values->value) {
>>                 pr_debug("failed to allocate read_values threads arrays");
>>                 goto out_free_pid;
>> @@ -96,7 +96,7 @@ static int perf_read_values__findnew_thread(struct perf_read_values *values,
>>
>>         i = values->threads;
>>
>> -       values->value[i] = zalloc(values->counters_max * sizeof(**values->value));
>> +       values->value[i] = calloc(values->counters_max, sizeof(**values->value));
>>         if (!values->value[i]) {
>>                 pr_debug("failed to allocate read_values counters array");
>>                 return -ENOMEM;
>> --
>> 2.53.0
>>
>

- Arnaldo

  reply	other threads:[~2026-04-01 23:15 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-04-01 21:53 [PATCHES v2 perf-tools-next 0/4] Cleanups and a fix Arnaldo Carvalho de Melo
2026-04-01 21:53 ` [PATCH 1/4] perf tools: Make more global variables static Arnaldo Carvalho de Melo
2026-04-01 21:53 ` [PATCH 2/4] perf bench: Constify tables Arnaldo Carvalho de Melo
2026-04-01 21:53 ` [PATCH 3/4] perf tools: Use calloc() were applicable Arnaldo Carvalho de Melo
2026-04-01 22:14   ` Ian Rogers
2026-04-01 23:15     ` Arnaldo Melo [this message]
2026-04-01 21:53 ` [PATCH 4/4] perf symbol: Add missing libgen.h include to get basename() prototype Arnaldo Carvalho de Melo
  -- strict thread matches above, loose matches on Subject: below --
2026-04-02  0:17 [PATCHES v3 perf-tools-next 0/4] Cleanups and a fix Arnaldo Carvalho de Melo
2026-04-02  0:17 ` [PATCH 3/4] perf tools: Use calloc() were applicable Arnaldo Carvalho de Melo
2026-04-01 21:01 [PATCHES perf-tools-next 0/4] Cleanups and a fix Arnaldo Carvalho de Melo
2026-04-01 21:02 ` [PATCH 3/4] perf tools: Use calloc() were applicable Arnaldo Carvalho de Melo

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=DEE862AB-0E14-4DFC-946B-334E05AC0B4D@gmail.com \
    --to=arnaldo.melo@gmail.com \
    --cc=acme@kernel.org \
    --cc=acme@redhat.com \
    --cc=adrian.hunter@intel.com \
    --cc=irogers@google.com \
    --cc=james.clark@linaro.org \
    --cc=jolsa@kernel.org \
    --cc=kan.liang@linux.intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-perf-users@vger.kernel.org \
    --cc=mingo@kernel.org \
    --cc=namhyung@kernel.org \
    --cc=tglx@linutronix.de \
    --cc=williams@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox