Hi Martin, Martin Devera <devik@xxxxxxxxxx> wrote on Tue, 10 Dec 2019 16:03:18 +0100: > The used way to compute jiffies timeout brokes when > jiffie difference is 1. Simply add 1 - it has no other > side effects. > Fixes STM32MP1 FMC2 NAND controller which sometimes failed > exactly in this way. > > Signed-off-by: Martin Devera <devik@xxxxxxxxxx> > --- > drivers/mtd/nand/raw/nand_base.c | 6 +++++- > 1 file changed, 5 insertions(+), 1 deletion(-) > > diff --git a/drivers/mtd/nand/raw/nand_base.c b/drivers/mtd/nand/raw/nand_base.c > index d527e448ce19..beab3a775cc7 100644 > --- a/drivers/mtd/nand/raw/nand_base.c > +++ b/drivers/mtd/nand/raw/nand_base.c > @@ -721,7 +721,11 @@ int nand_soft_waitrdy(struct nand_chip *chip, unsigned long timeout_ms) > if (ret) > return ret; > > - timeout_ms = jiffies + msecs_to_jiffies(timeout_ms); > + /* +1 below is necessary because if we are now in the last fraction > + * of jiffy and msecs_to_jiffies is 1 then we will wait only that > + * small jiffy fraction - possibly leading to false timeout > + */ > + timeout_ms = jiffies + msecs_to_jiffies(timeout_ms) + 1; > do { > ret = nand_read_data_op(chip, &status, sizeof(status), true); > if (ret) I don't really what you are fixing here, I suspect the root cause to be a wrongly calculated timeout_ms in the calling driver. It is the responsibility of the caller to use this function with a relevant timeout_ms parameter. Maybe Christophe can help you here? Thanks, Miquèl ______________________________________________________ Linux MTD discussion mailing list http://lists.infradead.org/mailman/listinfo/linux-mtd/