On 10/06/2023 12:39, Andi Shyti wrote: > Hi Christophe, > > On Fri, Jun 09, 2023 at 06:45:39AM +0200, Christophe JAILLET wrote: >> When the best clk is searched, we iterate over all possible clk. >> >> If we find a better match, the previous one, if any, needs to be freed. >> If a better match has already been found, we still need to free the new >> one, otherwise it leaks. >> >> Fixes: 5f5a7a5578c5 ("serial: samsung: switch to clkdev based clock lookup") >> Signed-off-by: Christophe JAILLET <christophe.jaillet@xxxxxxxxxx> >> --- >> This patch is speculative. Review with care. >> >> I think that some clk_put() are also missing somewhere else in the driver >> but won't be able to investigate further. >> --- >> drivers/tty/serial/samsung_tty.c | 8 ++++++++ >> 1 file changed, 8 insertions(+) >> >> diff --git a/drivers/tty/serial/samsung_tty.c b/drivers/tty/serial/samsung_tty.c >> index dd751e7010e3..c07877dd25fa 100644 >> --- a/drivers/tty/serial/samsung_tty.c >> +++ b/drivers/tty/serial/samsung_tty.c >> @@ -1488,10 +1488,18 @@ static unsigned int s3c24xx_serial_getclk(struct s3c24xx_uart_port *ourport, >> calc_deviation = -calc_deviation; >> >> if (calc_deviation < deviation) { >> + /* >> + * If we find a better clk, release the previous one, if >> + * any. >> + */ >> + if (!IS_ERR(*best_clk)) > > what is the case when *best_clk has an error in it? The initial one? Open the place where the function is being called. Best regards, Krzysztof