You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I've become convinced that the "LostInterrupt" failures we've
intermittently seen in the I2C driver are due to timer notification
mismanagement. I recently merged a commit (dd76a4c) that reworked
timer notification handling to eliminate a case where the driver could
crash _itself_ in a narrow race condition window. That also eliminated a
way to crashed it from other task, by posting to its timer notification
bit (bit 31) while it was working -- both cases were fixed by double
checking that the timer had actually gone off before responding.
With that fixed, there's only one way remaining to get the LostInterrupt
panic, which is: keep i2c_driver from running for 100ms during any I2C
transaction. You can do this pretty easily by triggering a large
coredump. As a result, the driver contains a system-load-induced panic
that isn't detecting any real error condition, and acts as a load
multiplier (by triggering crash response and retries).
From what I can tell from the commit history, the software timer (the
thing that explodes after 100ms) was added while attempting to track
down some _other_ state machine misbehavior, which I believe has since
been fixed. Certainly, none of our investigations into the LostInterrupt
failures over the past year have yielded any concrete evidence of a
hardware bug. They've mostly seemed random... which is what you'd expect
if they were being triggered by unrelated system load spikes.
This commit removes the entire mechanism. The hardware SMBus 25ms
timeout remains, but that's separate and ran in parallel to this
software timer. The path leading to the LostInterrupt panic no longer
exists in the code.
Fixes#2004.
0 commit comments