concurrency - I2C concurrent access on Linux, mutex -
i'm writing multithread c program in embedded linux accesses userspace number of i2c devices (slaves). also, access same i2c device multiple threads. i'm using smbus functions (i2c_smbus_write_byte_data, i2c_smbus_read_byte_data, i2c_smbus_read_i2c_block_data,...).
is there protection concurrent access built in or need add mutexes myself?
for instance: have read function read data 1 sensor on i2c. same function can called thread well, resulting in possible concurrent access. have use static mutex in function or in i2c access functions?
i2c shared bus multiple devices, accessed multiple processes threads. linux i2c driver code uses mutex manage access each i2c bus.
for smbus functions, see linux kernel function i2c_smbus_xfer()
in i2c-core.c
. gets lock i2c adapter before beginning transfer (look @ source code, , see call i2c_lock_adapter()
). smbus transactions based on function.
for i2c functions, see linux kernel function i2c_transfer()
in i2c-core.c
. gets lock i2c adapter before beginning transfer. i2c transaction based on function.
so yes, there protection concurrent access built-in.
Comments
Post a Comment