[RFC 05/11] drm: split property values out
From: Rob ClarkSplit property values out into a different struct, so we can later move property values into state structs. This will allow the property values to stay in sync w/ the state updates which are either discarded or atomically committed. --- drivers/gpu/drm/drm_crtc.c | 29 - drivers/gpu/drm/drm_fb_helper.c|1 + drivers/staging/omapdrm/omap_drv.c |5 +++-- include/drm/drm_crtc.h | 10 +- 4 files changed, 33 insertions(+), 12 deletions(-) diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c index 5308a34..b1ccfea 100644 --- a/drivers/gpu/drm/drm_crtc.c +++ b/drivers/gpu/drm/drm_crtc.c @@ -446,6 +446,7 @@ int drm_crtc_init(struct drm_device *dev, struct drm_crtc *crtc, goto out; crtc->base.properties = >properties; + crtc->base.propvals = >propvals; list_add_tail(>head, >mode_config.crtc_list); dev->mode_config.num_crtc++; @@ -547,6 +548,7 @@ int drm_connector_init(struct drm_device *dev, goto out; connector->base.properties = >properties; + connector->base.propvals = >propvals; connector->dev = dev; connector->funcs = funcs; connector->connector_type = connector_type; @@ -670,6 +672,7 @@ int drm_plane_init(struct drm_device *dev, struct drm_plane *plane, goto out; plane->base.properties = >properties; + plane->base.propvals = >propvals; plane->dev = dev; plane->funcs = funcs; plane->format_types = kmalloc(sizeof(uint32_t) * format_count, @@ -1549,7 +1552,7 @@ int drm_mode_getconnector(struct drm_device *dev, void *data, goto out; } - if (put_user(connector->properties.values[i], + if (put_user(connector->propvals.values[i], prop_values + copied)) { ret = -EFAULT; goto out; @@ -2951,19 +2954,20 @@ void drm_object_attach_property(struct drm_mode_object *obj, } obj->properties->ids[count] = property->base.id; - obj->properties->values[count] = init_val; + obj->propvals->values[count] = init_val; obj->properties->count++; } EXPORT_SYMBOL(drm_object_attach_property); int drm_object_property_set_value(struct drm_mode_object *obj, + struct drm_object_property_values *propvals, struct drm_property *property, uint64_t val) { int i; for (i = 0; i < obj->properties->count; i++) { if (obj->properties->ids[i] == property->base.id) { - obj->properties->values[i] = val; + propvals->values[i] = val; return 0; } } @@ -2979,7 +2983,7 @@ int drm_object_property_get_value(struct drm_mode_object *obj, for (i = 0; i < obj->properties->count; i++) { if (obj->properties->ids[i] == property->base.id) { - *val = obj->properties->values[i]; + *val = obj->propvals->values[i]; return 0; } } @@ -3172,7 +3176,9 @@ int drm_mode_connector_update_edid_property(struct drm_connector *connector, /* Delete edid, when there is none. */ if (!edid) { connector->edid_blob_ptr = NULL; - ret = drm_object_property_set_value(>base, dev->mode_config.edid_property, 0); + ret = drm_object_property_set_value(>base, + >propvals, + dev->mode_config.edid_property, 0); return ret; } @@ -3181,6 +3187,7 @@ int drm_mode_connector_update_edid_property(struct drm_connector *connector, size, edid); ret = drm_object_property_set_value(>base, + >propvals, dev->mode_config.edid_property, connector->edid_blob_ptr->base.id); @@ -3254,7 +3261,9 @@ static int drm_mode_connector_set_obj_prop(struct drm_connector *connector, /* store the property value if successful */ if (!ret) - drm_object_property_set_value(>base, property, value); + drm_object_property_set_value(>base, + >propvals, property, value); + return ret; } @@ -3267,7 +3276,8 @@ static int drm_mode_crtc_set_obj_prop(struct drm_crtc *crtc, if (crtc->funcs->set_property) ret = crtc->funcs->set_property(crtc, state, property, value); if (!ret) - drm_object_property_set_value(>base, property, value); +
[RFC 05/11] drm: split property values out
From: Rob Clark r...@ti.com Split property values out into a different struct, so we can later move property values into state structs. This will allow the property values to stay in sync w/ the state updates which are either discarded or atomically committed. --- drivers/gpu/drm/drm_crtc.c | 27 ++- include/drm/drm_crtc.h | 10 +- 2 files changed, 27 insertions(+), 10 deletions(-) diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c index e62ae6a..245c462 100644 --- a/drivers/gpu/drm/drm_crtc.c +++ b/drivers/gpu/drm/drm_crtc.c @@ -446,6 +446,7 @@ int drm_crtc_init(struct drm_device *dev, struct drm_crtc *crtc, goto out; crtc-base.properties = crtc-properties; + crtc-base.propvals = crtc-propvals; list_add_tail(crtc-head, dev-mode_config.crtc_list); dev-mode_config.num_crtc++; @@ -547,6 +548,7 @@ int drm_connector_init(struct drm_device *dev, goto out; connector-base.properties = connector-properties; + connector-base.propvals = connector-propvals; connector-dev = dev; connector-funcs = funcs; connector-connector_type = connector_type; @@ -670,6 +672,7 @@ int drm_plane_init(struct drm_device *dev, struct drm_plane *plane, goto out; plane-base.properties = plane-properties; + plane-base.propvals = plane-propvals; plane-dev = dev; plane-funcs = funcs; plane-format_types = kmalloc(sizeof(uint32_t) * format_count, @@ -1549,7 +1552,7 @@ int drm_mode_getconnector(struct drm_device *dev, void *data, goto out; } - if (put_user(connector-properties.values[i], + if (put_user(connector-propvals.values[i], prop_values + copied)) { ret = -EFAULT; goto out; @@ -2944,7 +2947,8 @@ EXPORT_SYMBOL(drm_connector_attach_property); int drm_connector_property_set_value(struct drm_connector *connector, struct drm_property *property, uint64_t value) { - return drm_object_property_set_value(connector-base, property, value); + return drm_object_property_set_value(connector-base, + connector-propvals, property, value); } EXPORT_SYMBOL(drm_connector_property_set_value); @@ -2970,19 +2974,20 @@ void drm_object_attach_property(struct drm_mode_object *obj, } obj-properties-ids[count] = property-base.id; - obj-properties-values[count] = init_val; + obj-propvals-values[count] = init_val; obj-properties-count++; } EXPORT_SYMBOL(drm_object_attach_property); int drm_object_property_set_value(struct drm_mode_object *obj, + struct drm_object_property_values *propvals, struct drm_property *property, uint64_t val) { int i; for (i = 0; i obj-properties-count; i++) { if (obj-properties-ids[i] == property-base.id) { - obj-properties-values[i] = val; + propvals-values[i] = val; return 0; } } @@ -2998,7 +3003,7 @@ int drm_object_property_get_value(struct drm_mode_object *obj, for (i = 0; i obj-properties-count; i++) { if (obj-properties-ids[i] == property-base.id) { - *val = obj-properties-values[i]; + *val = obj-propvals-values[i]; return 0; } } @@ -3273,7 +3278,9 @@ static int drm_mode_connector_set_obj_prop(struct drm_connector *connector, /* store the property value if successful */ if (!ret) - drm_object_property_set_value(connector-base, property, value); + drm_object_property_set_value(connector-base, + connector-propvals, property, value); + return ret; } @@ -3286,7 +3293,8 @@ static int drm_mode_crtc_set_obj_prop(struct drm_crtc *crtc, if (crtc-funcs-set_property) ret = crtc-funcs-set_property(crtc, state, property, value); if (!ret) - drm_object_property_set_value(crtc-base, property, value); + drm_object_property_set_value(crtc-base, crtc-propvals, + property, value); return ret; } @@ -3300,7 +3308,8 @@ static int drm_mode_plane_set_obj_prop(struct drm_plane *plane, if (plane-funcs-set_property) ret = plane-funcs-set_property(plane, state, property, value); if (!ret) - drm_object_property_set_value(plane-base, property, value); + drm_object_property_set_value(plane-base, plane-propvals, + property, value);
[RFC 05/11] drm: split property values out
From: Rob ClarkSplit property values out into a different struct, so we can later move property values into state structs. This will allow the property values to stay in sync w/ the state updates which are either discarded or atomically committed. --- drivers/gpu/drm/drm_crtc.c | 27 ++- include/drm/drm_crtc.h | 10 +- 2 files changed, 27 insertions(+), 10 deletions(-) diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c index e62ae6a..245c462 100644 --- a/drivers/gpu/drm/drm_crtc.c +++ b/drivers/gpu/drm/drm_crtc.c @@ -446,6 +446,7 @@ int drm_crtc_init(struct drm_device *dev, struct drm_crtc *crtc, goto out; crtc->base.properties = >properties; + crtc->base.propvals = >propvals; list_add_tail(>head, >mode_config.crtc_list); dev->mode_config.num_crtc++; @@ -547,6 +548,7 @@ int drm_connector_init(struct drm_device *dev, goto out; connector->base.properties = >properties; + connector->base.propvals = >propvals; connector->dev = dev; connector->funcs = funcs; connector->connector_type = connector_type; @@ -670,6 +672,7 @@ int drm_plane_init(struct drm_device *dev, struct drm_plane *plane, goto out; plane->base.properties = >properties; + plane->base.propvals = >propvals; plane->dev = dev; plane->funcs = funcs; plane->format_types = kmalloc(sizeof(uint32_t) * format_count, @@ -1549,7 +1552,7 @@ int drm_mode_getconnector(struct drm_device *dev, void *data, goto out; } - if (put_user(connector->properties.values[i], + if (put_user(connector->propvals.values[i], prop_values + copied)) { ret = -EFAULT; goto out; @@ -2944,7 +2947,8 @@ EXPORT_SYMBOL(drm_connector_attach_property); int drm_connector_property_set_value(struct drm_connector *connector, struct drm_property *property, uint64_t value) { - return drm_object_property_set_value(>base, property, value); + return drm_object_property_set_value(>base, + >propvals, property, value); } EXPORT_SYMBOL(drm_connector_property_set_value); @@ -2970,19 +2974,20 @@ void drm_object_attach_property(struct drm_mode_object *obj, } obj->properties->ids[count] = property->base.id; - obj->properties->values[count] = init_val; + obj->propvals->values[count] = init_val; obj->properties->count++; } EXPORT_SYMBOL(drm_object_attach_property); int drm_object_property_set_value(struct drm_mode_object *obj, + struct drm_object_property_values *propvals, struct drm_property *property, uint64_t val) { int i; for (i = 0; i < obj->properties->count; i++) { if (obj->properties->ids[i] == property->base.id) { - obj->properties->values[i] = val; + propvals->values[i] = val; return 0; } } @@ -2998,7 +3003,7 @@ int drm_object_property_get_value(struct drm_mode_object *obj, for (i = 0; i < obj->properties->count; i++) { if (obj->properties->ids[i] == property->base.id) { - *val = obj->properties->values[i]; + *val = obj->propvals->values[i]; return 0; } } @@ -3273,7 +3278,9 @@ static int drm_mode_connector_set_obj_prop(struct drm_connector *connector, /* store the property value if successful */ if (!ret) - drm_object_property_set_value(>base, property, value); + drm_object_property_set_value(>base, + >propvals, property, value); + return ret; } @@ -3286,7 +3293,8 @@ static int drm_mode_crtc_set_obj_prop(struct drm_crtc *crtc, if (crtc->funcs->set_property) ret = crtc->funcs->set_property(crtc, state, property, value); if (!ret) - drm_object_property_set_value(>base, property, value); + drm_object_property_set_value(>base, >propvals, + property, value); return ret; } @@ -3300,7 +3308,8 @@ static int drm_mode_plane_set_obj_prop(struct drm_plane *plane, if (plane->funcs->set_property) ret = plane->funcs->set_property(plane, state, property, value); if (!ret) - drm_object_property_set_value(>base, property, value); + drm_object_property_set_value(>base, >propvals, + property, value); return ret; } @@ -3401,7 +3410,7 @@ int drm_mode_obj_get_properties_ioctl(struct