On Thu, Aug 15, 2024 at 09:44:50PM +0200, Heiner Kallweit wrote: > Krzysztof reported an issue [0] which is caused by parallel attempts to > instantiate the same I2C client device. This can happen if driver > supports auto-detection, but certain devices are also instantiated > explicitly. > The original change isn't actually wrong, it just revealed that I2C core > isn't prepared yet to handle this scenario. > Calls to i2c_new_client_device() can be nested, therefore we can't use a > simple mutex here. Parallel instantiation of devices at different addresses > is ok, so we just have to prevent parallel instantiation at the same address. > We can use a bitmap with one bit per 7-bit I2C client address, and atomic > bit operations to set/check/clear bits. > Now a parallel attempt to instantiate a device at the same address will > result in -EBUSY being returned, avoiding the "sysfs: cannot create duplicate > filename" splash. > > Note: This patch version includes small cosmetic changes to the Tested-by > version, only functional change is that address locking is supported > for slave addresses too. > > [0] https://lore.kernel.org/linux-i2c/9479fe4e-eb0c-407e-84c0-bd60c15baf74@xxxxxx/T/#m12706546e8e2414d8f1a0dc61c53393f731685cc > > Fixes: caba40ec3531 ("eeprom: at24: Probe for DDR3 thermal sensor in the SPD case") > Cc: stable@xxxxxxxxxxxxxxx > Tested-by: Krzysztof Piotr Oledzki <ole@xxxxxx> > Signed-off-by: Heiner Kallweit <hkallweit1@xxxxxxxxx> Applied to for-next, thanks!
Attachment:
signature.asc
Description: PGP signature