Skip to content

Commit

Permalink
tracing: Dynamically allocate the per-elt hist_elt_data array
Browse files Browse the repository at this point in the history
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.

Link: https://lkml.kernel.org/r/[email protected]

Signed-off-by: Tom Zanussi <[email protected]>
Tested-by: Artem Bityutskiy <[email protected]>
Signed-off-by: Steven Rostedt (VMware) <[email protected]>
  • Loading branch information
Tom Zanussi authored and rostedt committed Sep 8, 2021
1 parent 0be083c commit c910db9
Showing 1 changed file with 12 additions and 2 deletions.
14 changes: 12 additions & 2 deletions kernel/trace/trace_events_hist.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down Expand Up @@ -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);
}
Expand Down Expand Up @@ -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]) {
Expand Down

0 comments on commit c910db9

Please sign in to comment.