cpufreq: tegra186: Use flexible array to simplify memory allocation
authorChristophe JAILLET <christophe.jaillet@wanadoo.fr>
Sun, 20 Nov 2022 17:19:02 +0000 (18:19 +0100)
committerViresh Kumar <viresh.kumar@linaro.org>
Thu, 1 Dec 2022 09:19:50 +0000 (14:49 +0530)
commit32eb6453328c372a11559a21a53e5280ad44a421
treef0de4ae73b1311cbecab7f47f8f05dc1c35535b1
parent6286bbb40576ffadfde206c332b61345c19af57f
cpufreq: tegra186: Use flexible array to simplify memory allocation

Use flexible array to simplify memory allocation.
It saves some memory, avoids an indirection when reading the 'clusters'
array and removes some LoC.

Detailed explanation:
====================
Knowing that:
  - each devm_ allocation over-allocates 40 bytes for internal needs
  - Some rounding is done by the memory allocator on 8, 16, 32, 64, 96,
    128, 192, 256, 512, 1024, 2048, 4096, 8192 boundaries

and that:
  - sizeof(struct tegra186_cpufreq_data) = 24
  - sizeof(struct tegra186_cpufreq_cluster) = 16

Memory allocations in tegra186_cpufreq_probe() are:
  data:           (24 + 40) = 64        => 64 bytes
  data->clusters: (2 * 16 + 40) = 72     => 96 bytes
So a total of 160 bytes are allocated.
56 for the real need, 80 for internal uses and 24 are wasted.

If 'struct tegra186_cpufreq_data' is reordered so that 'clusters' is a
flexible array:
  - it saves one pointer in the structure
  - only one allocation is needed

So, only 96 bytes are allocated:
  16 + 2 * 16 + 40 = 88  => 96 bytes

Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
drivers/cpufreq/tegra186-cpufreq.c