mirror of
https://github.com/torvalds/linux.git
synced 2026-09-25 21:21:09 -04:00
PROBE_DEFER also uses system_wq to reprobe drivers, which means when that again fails, and we try to flush the overall system_wq (to get all the delayed connectore cleanup work_struct completed), we deadlock. Fix this by using just a single cleanup work, so that we can only flush that one and don't block on anything else. That means a free list plus locking, a standard pattern. v2: - Correctly free connectors only on last ref. Oops (Chris). - use llist_head/node (Chris). v3 - Add init_llist_head (Chris). Fixes:a703c55004("drm: safely free connectors from connector_iter") Fixes:613051dac4("drm: locking&new iterators for connector_list") Cc: Ben Widawsky <[email protected]> Cc: Dave Airlie <[email protected]> Cc: Chris Wilson <[email protected]> Cc: Sean Paul <[email protected]> Cc: <[email protected]> # v4.11+:613051dac4("drm: locking&new iterators for connector_list" Cc: <[email protected]> # v4.11+ Cc: Daniel Vetter <[email protected]> Cc: Jani Nikula <[email protected]> Cc: Gustavo Padovan <[email protected]> Cc: David Airlie <[email protected]> Cc: Javier Martinez Canillas <[email protected]> Cc: Shuah Khan <[email protected]> Cc: Guillaume Tucker <[email protected]> Cc: Mark Brown <[email protected]> Cc: Kevin Hilman <[email protected]> Cc: Matt Hart <[email protected]> Cc: Thierry Escande <[email protected]> Cc: Tomeu Vizoso <[email protected]> Cc: Enric Balletbo i Serra <[email protected]> Tested-by: Marek Szyprowski <[email protected]> Reviewed-by: Chris Wilson <[email protected]> Signed-off-by: Daniel Vetter <[email protected]> Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]