All of lore.kernel.org
 help / color / mirror / Atom feed
From: Paulo Zanoni <przanoni@gmail.com>
To: dri-devel@lists.freedesktop.org
Cc: Paulo Zanoni <paulo.r.zanoni@intel.com>
Subject: [PATCH] drm: add 'count' to struct drm_object_properties
Date: Tue, 15 May 2012 18:09:04 -0300	[thread overview]
Message-ID: <1337116145-15041-6-git-send-email-przanoni@gmail.com> (raw)
In-Reply-To: <1337116145-15041-1-git-send-email-przanoni@gmail.com>

From: Paulo Zanoni <paulo.r.zanoni@intel.com>

This way, we don't need to count every time, so we're a little bit
faster and code is a little bit smaller.

Change suggested by Ville Syrjälä.

Signed-off-by: Paulo Zanoni <paulo.r.zanoni@intel.com>
---
 drivers/gpu/drm/drm_crtc.c |   64 +++++++++++++++++++-------------------------
 include/drm/drm_crtc.h     |    1 +
 2 files changed, 28 insertions(+), 37 deletions(-)

diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c
index 793f51b..368e3e7 100644
--- a/drivers/gpu/drm/drm_crtc.c
+++ b/drivers/gpu/drm/drm_crtc.c
@@ -1425,11 +1425,7 @@ int drm_mode_getconnector(struct drm_device *dev, void *data,
 	}
 	connector = obj_to_connector(obj);
 
-	for (i = 0; i < DRM_OBJECT_MAX_PROPERTY; i++) {
-		if (connector->properties.ids[i] != 0) {
-			props_count++;
-		}
-	}
+	props_count = connector->properties.count;
 
 	for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) {
 		if (connector->encoder_ids[i] != 0) {
@@ -1482,21 +1478,19 @@ int drm_mode_getconnector(struct drm_device *dev, void *data,
 		copied = 0;
 		prop_ptr = (uint32_t __user *)(unsigned long)(out_resp->props_ptr);
 		prop_values = (uint64_t __user *)(unsigned long)(out_resp->prop_values_ptr);
-		for (i = 0; i < DRM_OBJECT_MAX_PROPERTY; i++) {
-			if (connector->properties.ids[i] != 0) {
-				if (put_user(connector->properties.ids[i],
-					     prop_ptr + copied)) {
-					ret = -EFAULT;
-					goto out;
-				}
+		for (i = 0; i < connector->properties.count; i++) {
+			if (put_user(connector->properties.ids[i],
+				     prop_ptr + copied)) {
+				ret = -EFAULT;
+				goto out;
+			}
 
-				if (put_user(connector->properties.values[i],
-					     prop_values + copied)) {
-					ret = -EFAULT;
-					goto out;
-				}
-				copied++;
+			if (put_user(connector->properties.values[i],
+				     prop_values + copied)) {
+				ret = -EFAULT;
+				goto out;
 			}
+			copied++;
 		}
 	}
 	out_resp->count_props = props_count;
@@ -2845,19 +2839,19 @@ void drm_object_attach_property(struct drm_mode_object *obj,
 				struct drm_property *property,
 				uint64_t init_val)
 {
-	int i;
+	int count = obj->properties->count;
 
-	for (i = 0; i < DRM_OBJECT_MAX_PROPERTY; i++) {
-		if (obj->properties->ids[i] == 0) {
-			obj->properties->ids[i] = property->base.id;
-			obj->properties->values[i] = init_val;
-			return;
-		}
+	if (count == DRM_OBJECT_MAX_PROPERTY) {
+		WARN(1, "Failed to attach object property (type: 0x%x). Please "
+			"increase DRM_OBJECT_MAX_PROPERTY by 1 for each time "
+			"you see this message on the same object type.\n",
+			obj->type);
+		return;
 	}
 
-	WARN(1, "Failed to attach object property (type: 0x%x). Please "
-		"increase DRM_OBJECT_MAX_PROPERTY by 1 for each time you see "
-		"this message on the same object type.\n", obj->type);
+	obj->properties->ids[count] = property->base.id;
+	obj->properties->values[count] = init_val;
+	obj->properties->count++;
 }
 EXPORT_SYMBOL(drm_object_attach_property);
 
@@ -2866,7 +2860,7 @@ int drm_object_property_set_value(struct drm_mode_object *obj,
 {
 	int i;
 
-	for (i = 0; i < DRM_OBJECT_MAX_PROPERTY; i++) {
+	for (i = 0; i < obj->properties->count; i++) {
 		if (obj->properties->ids[i] == property->base.id) {
 			obj->properties->values[i] = val;
 			return 0;
@@ -2882,7 +2876,7 @@ int drm_object_property_get_value(struct drm_mode_object *obj,
 {
 	int i;
 
-	for (i = 0; i < DRM_OBJECT_MAX_PROPERTY; i++) {
+	for (i = 0; i < obj->properties->count; i++) {
 		if (obj->properties->ids[i] == property->base.id) {
 			*val = obj->properties->values[i];
 			return 0;
@@ -3174,11 +3168,7 @@ int drm_mode_obj_get_properties_ioctl(struct drm_device *dev, void *data,
 		goto out;
 	}
 
-	/* Assume [ prop, 0, prop ] won't happen (if we ever delete properties,
-	 * we need to remove the gap inside the array). */
-	for (props_count = 0; props_count < DRM_OBJECT_MAX_PROPERTY &&
-		obj->properties->ids[props_count] != 0; props_count++)
-		;
+	props_count = obj->properties->count;
 
 	/* This ioctl is called twice, once to determine how much space is
 	 * needed, and the 2nd time to fill it. */
@@ -3228,11 +3218,11 @@ int drm_mode_obj_set_property_ioctl(struct drm_device *dev, void *data,
 	if (!arg_obj->properties)
 		goto out;
 
-	for (i = 0; i < DRM_OBJECT_MAX_PROPERTY; i++)
+	for (i = 0; i < arg_obj->properties->count; i++)
 		if (arg_obj->properties->ids[i] == arg->prop_id)
 			break;
 
-	if (i == DRM_OBJECT_MAX_PROPERTY)
+	if (i == arg_obj->properties->count)
 		goto out;
 
 	prop_obj = drm_mode_object_find(dev, arg->prop_id,
diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h
index b0c3249..6d36552 100644
--- a/include/drm/drm_crtc.h
+++ b/include/drm/drm_crtc.h
@@ -56,6 +56,7 @@ struct drm_mode_object {
 
 #define DRM_OBJECT_MAX_PROPERTY 16
 struct drm_object_properties {
+	int count;
 	uint32_t ids[DRM_OBJECT_MAX_PROPERTY];
 	uint64_t values[DRM_OBJECT_MAX_PROPERTY];
 };
-- 
1.7.10

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel

  parent reply	other threads:[~2012-05-15 21:09 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-05-15 21:08 [PATCH 1/8] drm: add drm_property_change_is_valid Paulo Zanoni
2012-05-15 21:09 ` [PATCH] drm: WARN() when drm_connector_attach_property fails Paulo Zanoni
2012-05-15 21:09 ` [PATCH] drm: create struct drm_object_properties and use it Paulo Zanoni
2012-05-15 21:09 ` [PATCH] drm: add generic ioctls to get/set properties on any object Paulo Zanoni
2012-05-15 21:09 ` [PATCH] drm: make the connector properties code use the object properties code Paulo Zanoni
2012-05-15 21:09 ` Paulo Zanoni [this message]
2012-05-15 21:09 ` [PATCH] drm: add CRTC properties Paulo Zanoni
2012-05-15 21:27   ` Paulo Zanoni

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1337116145-15041-6-git-send-email-przanoni@gmail.com \
    --to=przanoni@gmail.com \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=paulo.r.zanoni@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.