On Thu, Apr 25, 2024 at 2:49 AM Heikki Krogerus <heikki.krogerus@xxxxxxxxxxxxxxx> wrote: > I'm probable missing something, but wouldn't it be safer to check > port->state after grabbing the lock? I could have been more explicit in describing the deadlock, my bad. But there are two threads here: Thread A starts in the TCPM. It is the port state machine that transitions to DR_SWAP and holds port->lock. When it unregisters DisplayPort Alt Mode, it goes into the DP Alt Mode driver and hangs until any DP Alt Mode work is finished. Thread B starts in the DP Alt Mode driver. It attempts to call tcpm_enter_mode and the call to mutex_lock in tcpm_queue_vdm_unlock hangs because Thread A holds the lock. Thread A will never drop the lock because it waits for Thread B to finish. So, the check is done before grabbing the lock because the thread needs to avoid grabbing the lock in the first place. If port->state changes between queueing and sending the message, the VDM state machine will drop the message anyways because port->state isn't in the ready state as well. best, rd