summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorDmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>2026-05-28 10:10:48 +0300
committerDmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>2026-06-08 09:48:42 +0300
commitcd0d23939b8775482c30ca7ab207f185aecd6555 (patch)
tree0601c9ae1cffe47942f28ad09b86231b1740add1 /include
parentce73a5db44e3d5f9c0c061f0868ae209b59605f1 (diff)
downloadlinux-cd0d23939b8775482c30ca7ab207f185aecd6555.tar.gz
linux-cd0d23939b8775482c30ca7ab207f185aecd6555.zip
drm/bridge: split hpd_mutex into two mutexes
Currently almost all bridge drivers which implement hpd_enable / hpd_disable callbacks simply toggle the hardware registers generating the interrupt. However, as pointed out by Jonas Karlman and Sashiko bot, using those callbacks for enable_irq() / disable_irq() calls or scheduling and cancelling the work can cause a AB-BA deadlock (between hpd_mutex lock and the corresponding lock). Split the hpd_mutex into two locks: one simply making sure that hpd_cb / hpd_data are consistent and another one, hpd_state_mutex, making sure that concurrent drm_bridge_hpd_enable() / drm_bridge_hpd_disable() calls can't end up with inconsistency between hpd_cb/_data and bridge's internal state. Link: https://lore.kernel.org/dri-devel/9aa4bd35-bff6-4009-a959-ce31010c7b35@kwiboo.se Link: https://sashiko.dev/#/patchset/20260513-dp-connector-hpd-v2-0-42f757bfcbf9%40oss.qualcomm.com Reviewed-by: Sebastian Reichel <sebastian.reichel@collabora.com> Link: https://patch.msgid.link/20260528-dp-connector-hpd-v3-1-d656eb1079b7@oss.qualcomm.com Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
Diffstat (limited to 'include')
-rw-r--r--include/drm/drm_bridge.h4
1 files changed, 4 insertions, 0 deletions
diff --git a/include/drm/drm_bridge.h b/include/drm/drm_bridge.h
index 4ba3a5deef9a..00a95f927e34 100644
--- a/include/drm/drm_bridge.h
+++ b/include/drm/drm_bridge.h
@@ -1257,6 +1257,10 @@ struct drm_bridge {
*/
struct mutex hpd_mutex;
/**
+ * @hpd_state_mutex: Protects the HPD en/disablement state for the bridge.
+ */
+ struct mutex hpd_state_mutex;
+ /**
* @hpd_cb: Hot plug detection callback, registered with
* drm_bridge_hpd_enable().
*/