On 7/31/19 21:35, Stephen Boyd wrote:
> We don't want clk provider drivers to use the init structure after clk
> registration time, but we leave a dangling reference to it by means of
> clk_hw::init. Let's overwrite the member with NULL during clk_register()
> so that this can't be used anymore after registration time.
> 
> Cc: Bjorn Andersson <bjorn.anders...@linaro.org>
> Cc: Doug Anderson <diand...@chromium.org>
> Signed-off-by: Stephen Boyd <sb...@kernel.org>

Reviewed-by: Sylwester Nawrocki <s.nawro...@samsung.com>

>  drivers/clk/clk.c            | 24 ++++++++++++++++--------
>  include/linux/clk-provider.h |  3 ++-
>  2 files changed, 18 insertions(+), 9 deletions(-)
> 
> diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c
> index c0990703ce54..efac620264a2 100644
> --- a/drivers/clk/clk.c
> +++ b/drivers/clk/clk.c
> @@ -3484,9 +3484,9 @@ static int clk_cpy_name(const char **dst_p, const char 
> *src, bool must_exist)
>       return 0;
>  }
>  
> -static int clk_core_populate_parent_map(struct clk_core *core)
> +static int clk_core_populate_parent_map(struct clk_core *core,
> +                                     const struct clk_init_data *init)
>  {
> -     const struct clk_init_data *init = core->hw->init;
>       u8 num_parents = init->num_parents;
>       const char * const *parent_names = init->parent_names;
>       const struct clk_hw **parent_hws = init->parent_hws;
> @@ -3566,6 +3566,14 @@ __clk_register(struct device *dev, struct device_node 
> *np, struct clk_hw *hw)
>  {
>       int ret;
>       struct clk_core *core;
> +     const struct clk_init_data *init = hw->init;
> +
> +     /*
> +      * The init data is not supposed to be used outside of registration 
> path.
> +      * Set it to NULL so that provider drivers can't use it either and so 
> that
> +      * we catch use of hw->init early on in the core.
> +      */

nit: This comment could be re-edited to not exceed 80 columns limit.

> +     hw->init = NULL;

Reply via email to