⬢ DragonFlyBSD Kernel Audit
DF-3654 / run.log
← back to finding ↓ download raw
handle_hpd_rx_irq() hpd_lock pairing matrix (amdgpu_dm.c:1209 x 1251):
  entry=single      exit=single      lock=1 unlock=1 : balanced
  entry=single      exit=mst_branch  lock=1 unlock=0 : STRANDED LOCK
  entry=mst_branch  exit=single      lock=0 unlock=1 : UNLOCK WITHOUT HOLD
  entry=mst_branch  exit=mst_branch  lock=0 unlock=0 : balanced

2 unbalanced combinations; both flips occur INSIDE the handler:
  single    -> mst_branch : dc_link.c:528 (dc_link_detect discovers branch)
  mst_branch-> single     : dc_link.c:569 (start_top_mgr fails, sink-controlled)

Consequences of a stranded hpd_lock (entry=single, exit=mst_branch):
  - handle_hpd_irq() (amdgpu_dm.c:1083) blocks forever in its work item
  - dm_resume()/dm_suspend() block forever (amdgpu_dm.c:864,878)
  - amdgpu_dm_irq_fini() flush_work() hangs (amdgpu_dm_irq.c:334)
EXIT=0