|
@@ -13,6 +13,7 @@
|
|
|
#include <linux/kernel.h>
|
|
|
#include <linux/initrd.h>
|
|
|
#include <linux/memblock.h>
|
|
|
+#include <linux/mutex.h>
|
|
|
#include <linux/of.h>
|
|
|
#include <linux/of_fdt.h>
|
|
|
#include <linux/of_reserved_mem.h>
|
|
@@ -436,6 +437,8 @@ static void *kernel_tree_alloc(u64 size, u64 align)
|
|
|
return kzalloc(size, GFP_KERNEL);
|
|
|
}
|
|
|
|
|
|
+static DEFINE_MUTEX(of_fdt_unflatten_mutex);
|
|
|
+
|
|
|
/**
|
|
|
* of_fdt_unflatten_tree - create tree of device_nodes from flat blob
|
|
|
*
|
|
@@ -447,7 +450,9 @@ static void *kernel_tree_alloc(u64 size, u64 align)
|
|
|
void of_fdt_unflatten_tree(const unsigned long *blob,
|
|
|
struct device_node **mynodes)
|
|
|
{
|
|
|
+ mutex_lock(&of_fdt_unflatten_mutex);
|
|
|
__unflatten_device_tree(blob, mynodes, &kernel_tree_alloc);
|
|
|
+ mutex_unlock(&of_fdt_unflatten_mutex);
|
|
|
}
|
|
|
EXPORT_SYMBOL_GPL(of_fdt_unflatten_tree);
|
|
|
|