diff mbox

[RFC,35/37] drm: property: Allow non-global blob properties

Message ID 1426739616-10635-35-git-send-email-daniels@collabora.com (mailing list archive)
State New, archived
Headers show

Commit Message

Daniel Stone March 19, 2015, 4:33 a.m. UTC
All blob properties currently go on the device-global property list,
which is reaped at device exit. Make the addition to the list optional,
to allow for user properties whose lifetime will be tied to their
drm_file.

Signed-off-by: Daniel Stone <daniels@collabora.com>
---
 drivers/gpu/drm/drm_crtc.c | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)
diff mbox

Patch

diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c
index c1b3801..21e2052 100644
--- a/drivers/gpu/drm/drm_crtc.c
+++ b/drivers/gpu/drm/drm_crtc.c
@@ -4118,7 +4118,7 @@  done:
 
 static struct drm_property_blob *
 drm_property_create_blob(struct drm_device *dev, size_t length,
-			 const void *data)
+			 const void *data, bool global)
 {
 	struct drm_property_blob *blob;
 	int ret;
@@ -4140,7 +4140,10 @@  drm_property_create_blob(struct drm_device *dev, size_t length,
 
 	memcpy(blob->data, data, length);
 
-	list_add_tail(&blob->head, &dev->mode_config.property_blob_list);
+	if (global)
+		list_add_tail(&blob->head,
+		              &dev->mode_config.property_blob_list);
+
 	return blob;
 }
 
@@ -4233,7 +4236,7 @@  int drm_mode_connector_set_path_property(struct drm_connector *connector,
 	int ret;
 
 	connector->path_blob_ptr = drm_property_create_blob(connector->dev,
-							    size, path);
+							    size, path, true);
 	if (!connector->path_blob_ptr)
 		return -EINVAL;
 
@@ -4279,7 +4282,7 @@  int drm_mode_connector_set_tile_property(struct drm_connector *connector)
 	size = strlen(tile) + 1;
 
 	connector->tile_blob_ptr = drm_property_create_blob(connector->dev,
-							    size, tile);
+							    size, tile, true);
 	if (!connector->tile_blob_ptr)
 		return -EINVAL;
 
@@ -4324,7 +4327,7 @@  int drm_mode_connector_update_edid_property(struct drm_connector *connector,
 
 	size = EDID_LENGTH * (1 + edid->extensions);
 	connector->edid_blob_ptr = drm_property_create_blob(connector->dev,
-							    size, edid);
+							    size, edid, true);
 	if (!connector->edid_blob_ptr)
 		return -EINVAL;