On Mon, 18 Mar 2024, Nam Cao wrote: > The flag I2C_HID_READ_PENDING is used to serialize I2C operations. > However, this is not necessary, because I2C core already has its own > locking for that. > > More importantly, this flag can cause a lock-up: if the flag is set in > i2c_hid_xfer() and an interrupt happens, the interrupt handler > (i2c_hid_irq) will check this flag and return immediately without doing > anything, then the interrupt handler will be invoked again in an > infinite loop. > > Since interrupt handler is an RT task, it takes over the CPU and the > flag-clearing task never gets scheduled, thus we have a lock-up. > > Delete this unnecessary flag. Hmm, right, good catch, I can't figure out what extra semantic I2C_HID_READ_PENDING would be adding (rather than deadlock :) ). Why RT throttling didn't happen and let the system in a completely locked up state is something I don't understand, but that's separate. I have now queued this in hid.git#for-6.9/upstream-fixes Thanks, -- Jiri Kosina SUSE Labs