diff options
author | 2020-01-28 02:24:48 +0000 | |
---|---|---|
committer | 2020-01-28 02:24:48 +0000 | |
commit | 2403824a60c781961bb20fec444d3584e497077c (patch) | |
tree | 6fdee1f1857923eeba956cfe8a188e2ec3ad421a | |
parent | make IPTOS_DSCP_LE available via IPQoS directive; bz2986, based on (diff) | |
download | wireguard-openbsd-2403824a60c781961bb20fec444d3584e497077c.tar.xz wireguard-openbsd-2403824a60c781961bb20fec444d3584e497077c.zip |
drm/dp_mst: Skip validating ports during destruction, just ref
From Lyude Paul
035e304f95c3b3ed11ef8a0de48269ef4faad2e7 in linux 4.19.y/4.19.99
c54c7374ff44de5e609506aca7c0deae4703b6d1 in mainline linux
-rw-r--r-- | sys/dev/pci/drm/drm_dp_mst_topology.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/sys/dev/pci/drm/drm_dp_mst_topology.c b/sys/dev/pci/drm/drm_dp_mst_topology.c index 415a90259eb..cf1849e36b1 100644 --- a/sys/dev/pci/drm/drm_dp_mst_topology.c +++ b/sys/dev/pci/drm/drm_dp_mst_topology.c @@ -1024,9 +1024,25 @@ static struct drm_dp_mst_port *drm_dp_mst_get_port_ref_locked(struct drm_dp_mst_ static struct drm_dp_mst_port *drm_dp_get_validated_port_ref(struct drm_dp_mst_topology_mgr *mgr, struct drm_dp_mst_port *port) { struct drm_dp_mst_port *rport = NULL; + mutex_lock(&mgr->lock); + /* + * Port may or may not be 'valid' but we don't care about that when + * destroying the port and we are guaranteed that the port pointer + * will be valid until we've finished + */ +#ifdef notyet + if (current_work() == &mgr->destroy_connector_work) { + kref_get(&port->kref); + rport = port; + } else if (mgr->mst_primary) { + rport = drm_dp_mst_get_port_ref_locked(mgr->mst_primary, + port); + } +#else if (mgr->mst_primary) rport = drm_dp_mst_get_port_ref_locked(mgr->mst_primary, port); +#endif mutex_unlock(&mgr->lock); return rport; } |