Received: by 2002:a05:6a10:1d13:0:0:0:0 with SMTP id pp19csp735762pxb; Thu, 2 Sep 2021 13:58:58 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzm42O7OVg4DnxpBnpC/AlDmnrgwLF/0hY1LCVMoXlY1V//wJvumYLZZmh6Q+fDQSmPVKQb X-Received: by 2002:a17:906:8597:: with SMTP id v23mr151410ejx.178.1630616338552; Thu, 02 Sep 2021 13:58:58 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1630616338; cv=none; d=google.com; s=arc-20160816; b=0674uE2geHDQaAOini/lSi/Gf4TpIujXLGWOKyG1gG85oe4cqp6/u8sTdRnisn2RIM /Hc62eJxlPKuCOFSxcvFrgM45yVA7FmgbBSzPVWyFm+49Lm7+n96p5MT1TMluFbJmkzd G8SzNalTnj4gbEtFPp9hd6cHW+POBwoAB0Rb7PO3tsK2/6H9NIhP7te040CG/004e8Ul MOUycYI25sWzFr9vcizexqWg+aHlig4i3mlX9Ru0lH1Lw4bgxYIlO5G85GAufzasEZsR +72r6rWF8lfBj+wkO6A87uVwACqLLnp8mGcgw9MbCK8blQIDG3SEK3hVmbES4MWJBzqh JkRw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version:date:cc :to:from:subject:message-id:dkim-signature; bh=p3opKZS3oiBuaFH1BhF2sA2RtNoxmodKnmiWForWDNg=; b=de+2CK+0rdOlxhASJvLwMiGFtsfY4JwR2FpOUERFHm3q6v0LBqCHFExY2Tl/OIhQ9a /4tVuysAk5lOpCNdltSrVKnhPfWbzTinMJ6/n8PpbTzSmOm/VE21Q31JpW+TZBMUzfdq fcxWD9sBEpPNeheVH6z4QKJmtiiT4VPA9RbrLUOAQ7XwMBJ9DlK433hPKGiN2VKDTIkT h8NzwXB8NYKz5q1xxiFZ6O2+cYXaGQxxLnOnbTxy7FghyXtNKAYYJFVMwuXHkRmuiMFI M0Kpbt2cr3td2S2CHM60Corol+PEKMfKOsuOC4+1uKEnelBmfLDHbNl/CBuU89Ts/X/h og1A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=i7GiS3L6; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id i17si3043382edq.189.2021.09.02.13.58.35; Thu, 02 Sep 2021 13:58:58 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=i7GiS3L6; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1344767AbhIBU6N (ORCPT + 99 others); Thu, 2 Sep 2021 16:58:13 -0400 Received: from mail.kernel.org ([198.145.29.99]:36766 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1344797AbhIBU6M (ORCPT ); Thu, 2 Sep 2021 16:58:12 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 6D1EF600D4; Thu, 2 Sep 2021 20:57:13 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1630616233; bh=HWrI6rFLd2/Y9jP7+A8RsUe5lf2U6wY+IKNzSYzswdE=; h=Subject:From:To:Cc:Date:From; b=i7GiS3L6j2/PtfT3x+w8JVdeEtGJU+1ehYpiF+usA0nhl3E6jlPTKkMn6ZK6ObDrH B4+d/AyDu7G0vvk54XShvL3C0XCOCoc2HDjbSeuLO35zsQTJVDz5/koDA5+Wh/YN2R Grfg49uwlQqo8vDoqE0TP7IGsPlZQZi312IxBwVn2RORQCxWiK46b2yXtuTkpASISl yvMI5rZztTF4IRDBdXatIVpW8kZvoAuoTDdL9Gegxb4RlodRVlT6VgUaqRzhRxc+VL TuQXqchT7ffI6OYoUmmLumIiGWvFbrD+Hiw0f+XlJSzsqqT/bvw63omtV/T4T9AmmE Mh14NqqLYKcNg== Message-ID: Subject: [PATCH] tracing: Dynamically allocate the per-elt hist_elt_data array From: Tom Zanussi To: Steven Rostedt Cc: Artem Bityutskiy , linux-kernel@vger.kernel.org Date: Thu, 02 Sep 2021 15:57:12 -0500 Content-Type: text/plain; charset="UTF-8" X-Mailer: Evolution 3.28.5-0ubuntu0.18.04.1 Mime-Version: 1.0 Content-Transfer-Encoding: 7bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Setting the hist_elt_data.field_var_str[] array unconditionally to a size of SYNTH_FIELD_MAX elements wastes space unnecessarily. The actual number of elements needed can be calculated at run-time instead. In most cases, this will save a lot of space since it's a per-elt array which isn't normally close to being full. It also allows us to increase SYNTH_FIELD_MAX without worrying about even more wastage when we do that. Signed-off-by: Tom Zanussi --- kernel/trace/trace_events_hist.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/kernel/trace/trace_events_hist.c b/kernel/trace/trace_events_hist.c index 9d91b1c06957..a6061a69aa84 100644 --- a/kernel/trace/trace_events_hist.c +++ b/kernel/trace/trace_events_hist.c @@ -508,7 +508,8 @@ struct track_data { struct hist_elt_data { char *comm; u64 *var_ref_vals; - char *field_var_str[SYNTH_FIELDS_MAX]; + char **field_var_str; + int n_field_var_str; }; struct snapshot_context { @@ -1401,9 +1402,11 @@ static void hist_elt_data_free(struct hist_elt_data *elt_data) { unsigned int i; - for (i = 0; i < SYNTH_FIELDS_MAX; i++) + for (i = 0; i < elt_data->n_field_var_str; i++) kfree(elt_data->field_var_str[i]); + kfree(elt_data->field_var_str); + kfree(elt_data->comm); kfree(elt_data); } @@ -1451,6 +1454,13 @@ static int hist_trigger_elt_data_alloc(struct tracing_map_elt *elt) size = STR_VAR_LEN_MAX; + elt_data->field_var_str = kcalloc(n_str, sizeof(char *), GFP_KERNEL); + if (!elt_data->field_var_str) { + hist_elt_data_free(elt_data); + return -EINVAL; + } + elt_data->n_field_var_str = n_str; + for (i = 0; i < n_str; i++) { elt_data->field_var_str[i] = kzalloc(size, GFP_KERNEL); if (!elt_data->field_var_str[i]) { -- 2.17.1