Messages in this thread | | | From | Miles Chen <> | Subject | Re: [PATCH 22/31] clk: mediatek: gate: Implement error handling in register API | Date | Wed, 26 Jan 2022 15:42:42 +0800 |
| |
> The gate clk type registration function does not stop or return errors > if any clk failed to be registered, nor does it implement an error > handling path. This may result in a partially working device if any > step failed. > > Make the register function return proper error codes, and bail out if > errors occur. Proper cleanup, i.e. unregister any clks that were > successfully registered, is done in the new error path. > > Signed-off-by: Chen-Yu Tsai <wenst@chromium.org>
Reviewed-by: Miles Chen <miles.chen@mediatek.com>
> --- > drivers/clk/mediatek/clk-gate.c | 15 ++++++++++++++- > 1 file changed, 14 insertions(+), 1 deletion(-) > > diff --git a/drivers/clk/mediatek/clk-gate.c b/drivers/clk/mediatek/clk-gate.c > index e8881ae1489a..631ff170b7b9 100644 > --- a/drivers/clk/mediatek/clk-gate.c > +++ b/drivers/clk/mediatek/clk-gate.c > @@ -237,13 +237,26 @@ int mtk_clk_register_gates_with_dev(struct device_node *node, > > if (IS_ERR(clk)) { > pr_err("Failed to register clk %s: %pe\n", gate->name, clk); > - continue; > + goto err; > } > > clk_data->clks[gate->id] = clk; > } > > return 0; > + > +err: > + while (--i >= 0) { > + const struct mtk_gate *gate = &clks[i]; > + > + if (IS_ERR_OR_NULL(clk_data->clks[gate->id])) > + continue; > + > + mtk_clk_unregister_gate(clk_data->clks[gate->id]); > + clk_data->clks[gate->id] = ERR_PTR(-ENOENT); > + } > + > + return PTR_ERR(clk); > } > > int mtk_clk_register_gates(struct device_node *node, > -- > 2.35.0.rc0.227.g00780c9af4-goog
| |