|
@@ -192,14 +192,15 @@ EXPORT_SYMBOL(of_find_property);
|
|
|
struct device_node *of_find_all_nodes(struct device_node *prev)
|
|
|
{
|
|
|
struct device_node *np;
|
|
|
+ unsigned long flags;
|
|
|
|
|
|
- raw_spin_lock(&devtree_lock);
|
|
|
+ raw_spin_lock_irqsave(&devtree_lock, flags);
|
|
|
np = prev ? prev->allnext : of_allnodes;
|
|
|
for (; np != NULL; np = np->allnext)
|
|
|
if (of_node_get(np))
|
|
|
break;
|
|
|
of_node_put(prev);
|
|
|
- raw_spin_unlock(&devtree_lock);
|
|
|
+ raw_spin_unlock_irqrestore(&devtree_lock, flags);
|
|
|
return np;
|
|
|
}
|
|
|
EXPORT_SYMBOL(of_find_all_nodes);
|
|
@@ -421,8 +422,9 @@ struct device_node *of_get_next_available_child(const struct device_node *node,
|
|
|
struct device_node *prev)
|
|
|
{
|
|
|
struct device_node *next;
|
|
|
+ unsigned long flags;
|
|
|
|
|
|
- raw_spin_lock(&devtree_lock);
|
|
|
+ raw_spin_lock_irqsave(&devtree_lock, flags);
|
|
|
next = prev ? prev->sibling : node->child;
|
|
|
for (; next; next = next->sibling) {
|
|
|
if (!__of_device_is_available(next))
|
|
@@ -431,7 +433,7 @@ struct device_node *of_get_next_available_child(const struct device_node *node,
|
|
|
break;
|
|
|
}
|
|
|
of_node_put(prev);
|
|
|
- raw_spin_unlock(&devtree_lock);
|
|
|
+ raw_spin_unlock_irqrestore(&devtree_lock, flags);
|
|
|
return next;
|
|
|
}
|
|
|
EXPORT_SYMBOL(of_get_next_available_child);
|
|
@@ -735,13 +737,14 @@ EXPORT_SYMBOL_GPL(of_modalias_node);
|
|
|
struct device_node *of_find_node_by_phandle(phandle handle)
|
|
|
{
|
|
|
struct device_node *np;
|
|
|
+ unsigned long flags;
|
|
|
|
|
|
- raw_spin_lock(&devtree_lock);
|
|
|
+ raw_spin_lock_irqsave(&devtree_lock, flags);
|
|
|
for (np = of_allnodes; np; np = np->allnext)
|
|
|
if (np->phandle == handle)
|
|
|
break;
|
|
|
of_node_get(np);
|
|
|
- raw_spin_unlock(&devtree_lock);
|
|
|
+ raw_spin_unlock_irqrestore(&devtree_lock, flags);
|
|
|
return np;
|
|
|
}
|
|
|
EXPORT_SYMBOL(of_find_node_by_phandle);
|