Skip to content

Commit

Permalink
of: add __of_add_property() without lock operations
Browse files Browse the repository at this point in the history
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: Xiubo Li <Li.Xiubo@freescale.com>
Signed-off-by: Grant Likely <grant.likely@linaro.org>
  • Loading branch information
Xiubo Li authored and Grant Likely committed Feb 4, 2014
1 parent e3963fd commit 62664f6
Showing 1 changed file with 24 additions and 14 deletions.
38 changes: 24 additions & 14 deletions drivers/of/base.c
Original file line number Diff line number Diff line change
Expand Up @@ -1492,40 +1492,50 @@ 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;

rc = of_property_notify(OF_RECONFIG_ADD_PROPERTY, np, 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;
}

/**
Expand Down

0 comments on commit 62664f6

Please sign in to comment.