mirror of
https://github.com/torvalds/linux.git
synced 2026-08-09 00:45:33 +02:00
The handling of the MST Connection Status Notify message is skipped if
the probing of the topology is still pending. Acquiring the
drm_dp_mst_topology_mgr::probe_lock for this in
drm_dp_mst_handle_up_req() is problematic: the task/work this function
is called from is also responsible for handling MST down-request replies
(in drm_dp_mst_handle_down_rep()). Thus drm_dp_mst_link_probe_work() -
holding already probe_lock - could be blocked waiting for an MST
down-request reply while drm_dp_mst_handle_up_req() is waiting for
probe_lock while processing a CSN message. This leads to the probe
work's down-request message timing out.
A scenario similar to the above leading to a down-request timeout is
handling a CSN message in drm_dp_mst_handle_conn_stat(), holding the
probe_lock and sending down-request messages while a second CSN message
sent by the sink subsequently is handled by drm_dp_mst_handle_up_req().
Fix the above by moving the logic to skip the CSN handling to
drm_dp_mst_process_up_req(). This function is called from a work
(separate from the task/work handling new up/down messages), already
holding probe_lock. This solves the above timeout issue, since handling
of down-request replies won't be blocked by probe_lock.
Fixes:
|
||
|---|---|---|
| .. | ||
| drm_bridge_connector.c | ||
| drm_display_helper_mod.c | ||
| drm_dp_aux_bus.c | ||
| drm_dp_aux_dev.c | ||
| drm_dp_cec.c | ||
| drm_dp_dual_mode_helper.c | ||
| drm_dp_helper_internal.h | ||
| drm_dp_helper.c | ||
| drm_dp_mst_topology_internal.h | ||
| drm_dp_mst_topology.c | ||
| drm_dp_tunnel.c | ||
| drm_dsc_helper.c | ||
| drm_hdcp_helper.c | ||
| drm_hdmi_audio_helper.c | ||
| drm_hdmi_helper.c | ||
| drm_hdmi_state_helper.c | ||
| drm_scdc_helper.c | ||
| Kconfig | ||
| Makefile | ||