disp: msm: dp: use base connector properties for mst connectors
When DRM property objects are created, the DRM framework attaches a dellocator which can eventually free the object when the last reference is removed from it. The framework can only do this before the driver is registered. If a property is created after the registration then the framework is unable to attach a deallocator causing a memory leak during tear down. The current DP driver creates a new colorspace property whenever a new dp connector is initialized. It creates a base connector at probe time prior to registration. But then it also creates new connectors, post registration, whenever a new MST dongle is attached to the topology, causing memory leaks. This change limits the property creation to the base connector and attaches the same object to MST connectors to avoid memory leak. Change-Id: Ib97dc7aac260b4f3f96c1097f58bd276c68501f8 Signed-off-by: Rajkumar Subbiah <rsubbia@codeaurora.org>
This commit is contained in:
@@ -702,3 +702,34 @@ int dp_connector_update_pps(struct drm_connector *connector,
|
||||
dp_disp = display;
|
||||
return dp_disp->update_pps(dp_disp, connector, pps_cmd);
|
||||
}
|
||||
|
||||
int dp_connector_install_properties(void *display, struct drm_connector *conn)
|
||||
{
|
||||
struct dp_display *dp_display = display;
|
||||
struct drm_connector *base_conn;
|
||||
int rc;
|
||||
|
||||
if (!display || !conn) {
|
||||
DP_ERR("invalid params\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
base_conn = dp_display->base_connector;
|
||||
|
||||
/*
|
||||
* Create the property on the base connector during probe time and then
|
||||
* attach the same property onto new connector objects created for MST
|
||||
*/
|
||||
if (!base_conn->colorspace_property) {
|
||||
/* This is the base connector. create the drm property */
|
||||
rc = drm_mode_create_dp_colorspace_property(base_conn);
|
||||
if (rc)
|
||||
return rc;
|
||||
} else {
|
||||
conn->colorspace_property = base_conn->colorspace_property;
|
||||
}
|
||||
|
||||
drm_object_attach_property(&conn->base, conn->colorspace_property, 0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
Reference in New Issue
Block a user