Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 62664f67 authored by Xiubo Li's avatar Xiubo Li Committed by Grant Likely
Browse files

of: add __of_add_property() without lock operations



There two places will use the same code for adding one new property to
the DT node. Adding __of_add_property() and prepare for fixing
of_update_property()'s bug.

Signed-off-by: default avatarXiubo Li <Li.Xiubo@freescale.com>
Signed-off-by: default avatarGrant Likely <grant.likely@linaro.org>
parent e3963fd6
Loading
Loading
Loading
Loading
+24 −14
Original line number Diff line number Diff line
@@ -1492,12 +1492,32 @@ static int of_property_notify(int action, struct device_node *np,
}
#endif

/**
 * __of_add_property - Add a property to a node without lock operations
 */
static int __of_add_property(struct device_node *np, struct property *prop)
{
	struct property **next;

	prop->next = NULL;
	next = &np->properties;
	while (*next) {
		if (strcmp(prop->name, (*next)->name) == 0)
			/* duplicate ! don't insert it */
			return -EEXIST;

		next = &(*next)->next;
	}
	*next = prop;

	return 0;
}

/**
 * of_add_property - Add a property to a node
 */
int of_add_property(struct device_node *np, struct property *prop)
{
	struct property **next;
	unsigned long flags;
	int rc;

@@ -1505,27 +1525,17 @@ int of_add_property(struct device_node *np, struct property *prop)
	if (rc)
		return rc;

	prop->next = NULL;
	raw_spin_lock_irqsave(&devtree_lock, flags);
	next = &np->properties;
	while (*next) {
		if (strcmp(prop->name, (*next)->name) == 0) {
			/* duplicate ! don't insert it */
			raw_spin_unlock_irqrestore(&devtree_lock, flags);
			return -1;
		}
		next = &(*next)->next;
	}
	*next = prop;
	rc = __of_add_property(np, prop);
	raw_spin_unlock_irqrestore(&devtree_lock, flags);

#ifdef CONFIG_PROC_DEVICETREE
	/* try to add to proc as well if it was initialized */
	if (np->pde)
	if (!rc && np->pde)
		proc_device_tree_add_prop(np->pde, prop);
#endif /* CONFIG_PROC_DEVICETREE */

	return 0;
	return rc;
}

/**