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;