Hi Tomi,

Sorry for the very late reply.

You are right.  The clk_put() I added to tidss_oldi_deinit() only covers
the unbind path.  When tidss_oldi_init() fails for a second OLDI
transmitter, tidss_probe() returns the error directly and
tidss_oldi_deinit() is never called, so the reference taken for the
first transmitter is leaked as well.

I have switched to devm_get_clk_from_child(), which is
of_clk_get_by_name() with a device managed reference.  The reference is
then dropped both when the driver is unbound and when probe fails, and
no explicit clk_put() is needed any more.  The updated patch follows in
a separate mail.

For transparency about how this patch was produced: the candidate issue
was found with static analysis tools, and DeepSeek-V4.1-Flash and
GPT-6.1 Sol were used to help audit the error paths and to prepare the
patch.

Thanks,
Wentao

Reply via email to