Hi Jakko, On Wed, Mar 18, 2020 at 10:19 PM Laine Jaakko EXT <ext-jaakko.laine@xxxxxxxxxxx> wrote: > > Hello, > > >> @@ -521,19 +523,26 @@ static int xiic_bus_busy(struct xiic_i2c *i2c) > >> static int xiic_busy(struct xiic_i2c *i2c) > >> { > >> int tries = 3; > >> - int err; > >> + int err = 0; > >> > >> if (i2c->tx_msg) > >> return -EBUSY; > >> > >> - /* for instance if previous transfer was terminated due to TX error > >> - * it might be that the bus is on it's way to become available > >> - * give it at most 3 ms to wake > >> + /* In single master mode bus can only be busy, when in use by this > >> + * driver. If the register indicates bus being busy for some reason we > >> + * should ignore it, since bus will never be released and i2c will be > >> + * stuck forever. > >> */ > > > >the other thing i was thinking how will multithreading . > >Should we have a lock here. > > > >> - err = xiic_bus_busy(i2c); > >> - while (err && tries--) { > >> - msleep(1); > >> + if (i2c->multimaster) { > >> + /* for instance if previous transfer was terminated due to TX > >> + * error it might be that the bus is on it's way to become > >> + * available give it at most 3 ms to wake > >> + */ > >> err = xiic_bus_busy(i2c); > >> + while (err && tries--) { > >> + msleep(1); > >> + err = xiic_bus_busy(i2c); > >> + } > >> } > >> > >> return err; > > Which resource specifically are you worried about needing locking here? > Earlier multiple threads on the same processor will wait for bus busy. Now my concern was thread1 -> makes a transaction thread2 -> this will not wait for bus busy and access.