diff options
author | 2020-04-18 06:10:23 +0000 | |
---|---|---|
committer | 2020-04-18 06:10:23 +0000 | |
commit | a763589e8e4ecee7bbce0d02c7628d77d18e6276 (patch) | |
tree | cb85a0c5c30e3b413af593a1d3a1ed724fbae602 | |
parent | When a redraw is deferred because the terminal hasn't finished reading (diff) | |
download | wireguard-openbsd-a763589e8e4ecee7bbce0d02c7628d77d18e6276.tar.xz wireguard-openbsd-a763589e8e4ecee7bbce0d02c7628d77d18e6276.zip |
drm/dp_mst: Fix clearing payload state on topology disable
From Lyude Paul
a0522bbd37d80507d118d3616e46bccde2c395a9 in linux 4.19.y/4.19.116
8732fe46b20c951493bfc4dba0ad08efdf41de81 in mainline linux
-rw-r--r-- | sys/dev/pci/drm/drm_dp_mst_topology.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/sys/dev/pci/drm/drm_dp_mst_topology.c b/sys/dev/pci/drm/drm_dp_mst_topology.c index c7b393fbd85..76315845981 100644 --- a/sys/dev/pci/drm/drm_dp_mst_topology.c +++ b/sys/dev/pci/drm/drm_dp_mst_topology.c @@ -2119,6 +2119,7 @@ int drm_dp_mst_topology_mgr_set_mst(struct drm_dp_mst_topology_mgr *mgr, bool ms int ret = 0; struct drm_dp_mst_branch *mstb = NULL; + mutex_lock(&mgr->payload_lock); mutex_lock(&mgr->lock); if (mst_state == mgr->mst_state) goto out_unlock; @@ -2177,7 +2178,10 @@ int drm_dp_mst_topology_mgr_set_mst(struct drm_dp_mst_topology_mgr *mgr, bool ms /* this can fail if the device is gone */ drm_dp_dpcd_writeb(mgr->aux, DP_MSTM_CTRL, 0); ret = 0; - memset(mgr->payloads, 0, mgr->max_payloads * sizeof(struct drm_dp_payload)); + memset(mgr->payloads, 0, + mgr->max_payloads * sizeof(mgr->payloads[0])); + memset(mgr->proposed_vcpis, 0, + mgr->max_payloads * sizeof(mgr->proposed_vcpis[0])); mgr->payload_mask = 0; set_bit(0, &mgr->payload_mask); mgr->vcpi_mask = 0; @@ -2185,6 +2189,7 @@ int drm_dp_mst_topology_mgr_set_mst(struct drm_dp_mst_topology_mgr *mgr, bool ms out_unlock: mutex_unlock(&mgr->lock); + mutex_unlock(&mgr->payload_lock); if (mstb) drm_dp_put_mst_branch_device(mstb); return ret; |