On Wed, Feb 23, 2022 at 02:48:38PM +0100, Hans de Goede wrote: > Lock the adapter while setting the suspended flag, to ensure that other > locked code always sees the change immediately, rather then possibly using > a stale value. > > This involves splitting the suspend/resume callbacks into separate runtime > and normal suspend/resume calls. This is necessary because i2c_dw_xfer() > will get called by the i2c-core with the adapter locked and it in turn > calls the runtime-resume callback through pm_runtime_get_sync(). > > So the runtime versions of the suspend/resume callbacks cannot take > the adapter-lock. Note this patch simply makes the runtime suspend/resume > callbacks not deal with the suspended flag at all. During runtime the > pm_runtime_get_sync() from i2c_dw_xfer() will always ensure that the > adapter is resumed when necessary. > > The suspended flag check is only necessary to check proper suspend/resume > ordering during normal suspend/resume which makes the pm_runtime_get_sync() > call a no-op. > > Signed-off-by: Hans de Goede Applied to for-next, thanks! We can still backport if we find out we really need it...