Hi Chris, On Sun, Nov 05, 2023 at 12:57:31PM +0000, Chris Green wrote: > Is it safe to allow multiple processes to read and write various > devices on the I2C bus? This may be either different processes > accessing the same device or different processes accessing different > devices on the I2C bus. Yes, it's save. Different processes and different in kernel users like drivers can access the I2C bus at the same time. The I2C transfers will not interfere with each other. They are serialized by the kernel and execute one after another. > I.e. is there a mutex (or equivalent code) in the Linux Kernel I2C > drivers that guarantees completion of one process's I2C transaction > before another one starts? Yes, exactly. The mutex is called 'bus_lock' and can be found here: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/include/linux/i2c.h?h=v6.6&id=ffc253263a1375a65fa6c9f62a893e9767fbebfa#n727 And here the adapter/bus is locked before a transfer starts: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/i2c/i2c-core-base.c?h=v6.6&id=ffc253263a1375a65fa6c9f62a893e9767fbebfa#n2279 > The information I have managed to find suggests that there is such a > mutex and that I don't need to make sure my processes don't try to > read/write the I2C bus simultaneously but I can't find a definitive > statement to this effect. So as the I2C bus is concerned, everything is safe. The I2C read/writes are serialized. But logically there maybe issues. E.g. if two processes or driver writes to the same I2C register of the same device at the same time. You will not know which transfer was the last one. So you don't know which write has won. So you can have race conditions on a logical level. Kind regards, Stefan