clk: Initialize the clk_rate_request even if clk_core is NULL
authorMaxime Ripard <maxime@cerno.tech>
Tue, 18 Oct 2022 13:52:57 +0000 (15:52 +0200)
committerStephen Boyd <sboyd@kernel.org>
Fri, 28 Oct 2022 00:08:29 +0000 (17:08 -0700)
Since commit c35e84b09776 ("clk: Introduce clk_hw_init_rate_request()"),
users that used to initialize their clk_rate_request by initializing
their local structure now rely on clk_hw_init_rate_request().

This function is backed by clk_core_init_rate_req(), which will skip the
initialization if either the pointer to struct clk_core or to struct
clk_rate_request are NULL.

However, the core->parent pointer might be NULL because the clock is
orphan, and we will thus end up with our local struct clk_rate_request
left untouched.

And since clk_hw_init_rate_request() doesn't return an error, we will
then call a determine_rate variant with that unitialized structure.

In order to avoid this, let's clear our clk_rate_request if the pointer
to it is valid but the pointer to struct clk_core isn't.

Fixes: c35e84b09776 ("clk: Introduce clk_hw_init_rate_request()")
Signed-off-by: Maxime Ripard <maxime@cerno.tech>
Link: https://lore.kernel.org/r/20221018-clk-range-checks-fixes-v1-2-f3ef80518140@cerno.tech
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Signed-off-by: Stephen Boyd <sboyd@kernel.org>
drivers/clk/clk.c

index 37d623c..eb2f9be 100644 (file)
@@ -1459,11 +1459,14 @@ static void clk_core_init_rate_req(struct clk_core * const core,
 {
        struct clk_core *parent;
 
-       if (!core || WARN_ON(!req))
+       if (WARN_ON(!req))
                return;
 
        memset(req, 0, sizeof(*req));
 
+       if (!core)
+               return;
+
        req->rate = rate;
        clk_core_get_boundaries(core, &req->min_rate, &req->max_rate);