Messages in this thread | | | Subject | Re: [PATCH 9/9] clk: Overwrite clk_hw::init with NULL during clk_register() | From | Sylwester Nawrocki <> | Date | Thu, 8 Aug 2019 18:14:34 +0200 |
| |
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.andersson@linaro.org> > Cc: Doug Anderson <dianders@chromium.org> > Signed-off-by: Stephen Boyd <sboyd@kernel.org>
Reviewed-by: Sylwester Nawrocki <s.nawrocki@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;
| |