summaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorVincent Chen <vincent.chen@sifive.com>2020-06-23 09:24:17 +0800
committerPalmer Dabbelt <palmerdabbelt@google.com>2020-06-25 15:04:13 -0700
commitd0a5fdf4cc83dabcdea668f971b8a2e916437711 (patch)
treee935af46c7523b5276860f2f617033e962023ffd /drivers
parenta0fc3b32893b29a7b3a2771b6d63bae16cb1e8de (diff)
downloadlinux-d0a5fdf4cc83dabcdea668f971b8a2e916437711.tar.bz2
clk: sifive: allocate sufficient memory for struct __prci_data
The (struct __prci_data).hw_clks.hws is an array with dynamic elements. Using struct_size(pd, hw_clks.hws, ARRAY_SIZE(__prci_init_clocks)) instead of sizeof(*pd) to get the correct memory size of struct __prci_data for sifive/fu540-prci. After applying this modifications, the kernel runs smoothly with CONFIG_SLAB_FREELIST_RANDOM enabled on the HiFive unleashed board. Fixes: 30b8e27e3b58 ("clk: sifive: add a driver for the SiFive FU540 PRCI IP block") Signed-off-by: Vincent Chen <vincent.chen@sifive.com> Signed-off-by: Palmer Dabbelt <palmerdabbelt@google.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/clk/sifive/fu540-prci.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/drivers/clk/sifive/fu540-prci.c b/drivers/clk/sifive/fu540-prci.c
index 6282ee2f361c..a8901f90a61a 100644
--- a/drivers/clk/sifive/fu540-prci.c
+++ b/drivers/clk/sifive/fu540-prci.c
@@ -586,7 +586,10 @@ static int sifive_fu540_prci_probe(struct platform_device *pdev)
struct __prci_data *pd;
int r;
- pd = devm_kzalloc(dev, sizeof(*pd), GFP_KERNEL);
+ pd = devm_kzalloc(dev,
+ struct_size(pd, hw_clks.hws,
+ ARRAY_SIZE(__prci_init_clocks)),
+ GFP_KERNEL);
if (!pd)
return -ENOMEM;