mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-28 11:18:45 +07:00
drm/nouveau: Keep malloc references to MST ports
Now that we finally have a sane way to keep port allocations around, use it to fix the potential unchecked ->port accesses that nouveau makes by making sure we keep the mst port allocated for as long as it's drm_connector is accessible. Additionally, now that we've guaranteed that mstc->port is allocated for as long as we keep mstc around we can remove the connector registration checks for codepaths which release payloads, allowing us to release payloads on active topologies properly. These registration checks were only required before in order to avoid situations where mstc->port could technically be pointing at freed memory. Signed-off-by: Lyude Paul <lyude@redhat.com> Reviewed-by: Ben Skeggs <bskeggs@redhat.com> Cc: Daniel Vetter <daniel@ffwll.ch> Cc: David Airlie <airlied@redhat.com> Cc: Jerry Zuo <Jerry.Zuo@amd.com> Cc: Harry Wentland <harry.wentland@amd.com> Cc: Juston Li <juston.li@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20190111005343.17443-15-lyude@redhat.com
This commit is contained in:
parent
5e292e7646
commit
81640f01c2
@ -956,7 +956,11 @@ static void
|
||||
nv50_mstc_destroy(struct drm_connector *connector)
|
||||
{
|
||||
struct nv50_mstc *mstc = nv50_mstc(connector);
|
||||
|
||||
drm_connector_cleanup(&mstc->connector);
|
||||
if (mstc->port)
|
||||
drm_dp_mst_put_port_malloc(mstc->port);
|
||||
|
||||
kfree(mstc);
|
||||
}
|
||||
|
||||
@ -1004,6 +1008,7 @@ nv50_mstc_new(struct nv50_mstm *mstm, struct drm_dp_mst_port *port,
|
||||
drm_object_attach_property(&mstc->connector.base, dev->mode_config.path_property, 0);
|
||||
drm_object_attach_property(&mstc->connector.base, dev->mode_config.tile_property, 0);
|
||||
drm_connector_set_path_property(&mstc->connector, path);
|
||||
drm_dp_mst_get_port_malloc(port);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -1069,6 +1074,7 @@ nv50_mstm_destroy_connector(struct drm_dp_mst_topology_mgr *mgr,
|
||||
drm_fb_helper_remove_one_connector(&drm->fbcon->helper, &mstc->connector);
|
||||
|
||||
drm_modeset_lock(&drm->dev->mode_config.connection_mutex, NULL);
|
||||
drm_dp_mst_put_port_malloc(mstc->port);
|
||||
mstc->port = NULL;
|
||||
drm_modeset_unlock(&drm->dev->mode_config.connection_mutex);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user