[Intel-gfx] [RFC 06/12] drm/i915/config: Split out allocation of list nodes.

Bob Paauwe bob.j.paauwe at intel.com
Thu Feb 12 15:41:32 PST 2015


We'll reduce some duplicate code if we move the list node allocation
to its own function when we start processing future config items like
workaround or vbt information.

Signed-off-by: Bob Paauwe <bob.j.paauwe at intel.com>
---
 drivers/gpu/drm/i915/intel_config.c | 49 ++++++++++++++++++++++---------------
 1 file changed, 29 insertions(+), 20 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_config.c b/drivers/gpu/drm/i915/intel_config.c
index cf7da93..fb495ed 100644
--- a/drivers/gpu/drm/i915/intel_config.c
+++ b/drivers/gpu/drm/i915/intel_config.c
@@ -161,6 +161,21 @@ static bool node_property(struct intel_config_node *n,
 }
 
 
+static bool alloc_new_node(struct acpi_device *cl, struct list_head *list)
+{
+	struct intel_config_node *new_node;
+
+	new_node = kzalloc(sizeof(*new_node), GFP_KERNEL);
+	if (!new_node)
+		return false;
+
+	new_node->adev = cl;
+	INIT_LIST_HEAD(&new_node->node);
+	list_add_tail(&new_node->node, list);
+
+	return true;
+}
+
 /**
  * intel_config_init -
  *
@@ -232,26 +247,20 @@ void intel_config_init(struct drm_device *dev)
 
 		cname = acpi_device_bid(component);
 
-		list_for_each_entry(cl, &component->children, node) {
-			new_node = kzalloc(sizeof(*new_node), GFP_KERNEL);
-			if (!new_node)
-				goto bail;
-			new_node->adev = cl;
-			INIT_LIST_HEAD(&new_node->node);
-
-			/* Add to the appropriate list */
-			if (strcmp(cname, i915_COMPONENT_CRTC) == 0) {
-				list_add_tail(&new_node->node,
-					      &info->crtc_list);
-			} else if (strcmp(cname, i915_COMPONENT_CONNECTOR) == 0) {
-				list_add_tail(&new_node->node,
-					      &info->connector_list);
-			} else if (strcmp(cname, i915_COMPONENT_PLANE) == 0) {
-				list_add_tail(&new_node->node,
-					      &info->plane_list);
-			} else {
-				/* unknown component, ignore it */
-				kfree(new_node);
+		if (strcmp(cname, i915_COMPONENT_CRTC) == 0) {
+			list_for_each_entry(cl, &component->children, node) {
+				if (!alloc_new_node(cl, &info->crtc_list))
+					goto bail;
+			}
+		} else if (strcmp(cname, i915_COMPONENT_CONNECTOR) == 0) {
+			list_for_each_entry(cl, &component->children, node) {
+				if (!alloc_new_node(cl, &info->crtc_list))
+					goto bail;
+			}
+		} else if (strcmp(cname, i915_COMPONENT_PLANE) == 0) {
+			list_for_each_entry(cl, &component->children, node) {
+				if (!alloc_new_node(cl, &info->crtc_list))
+					goto bail;
 			}
 		}
 	}
-- 
2.1.0



More information about the Intel-gfx mailing list