aboutsummaryrefslogtreecommitdiffstats
path: root/xen/common
diff options
context:
space:
mode:
Diffstat (limited to 'xen/common')
-rw-r--r--xen/common/device_tree.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/xen/common/device_tree.c b/xen/common/device_tree.c
index 2c2dc5227f..61134fe404 100644
--- a/xen/common/device_tree.c
+++ b/xen/common/device_tree.c
@@ -1563,8 +1563,17 @@ static unsigned long __init unflatten_dt_node(const void *fdt,
pp->name = "name";
pp->length = sz;
pp->value = pp + 1;
+ /*
+ * The device tree creation code assume that the property
+ * "name" is not a fake.
+ * To avoid a big divergence with Linux code, only remove
+ * property link. In this case we will lose a bit of memory
+ */
+#if 0
*prev_pp = pp;
prev_pp = &pp->next;
+#endif
+ np->name = pp->value;
memcpy(pp->value, ps, sz - 1);
((char *)pp->value)[sz - 1] = 0;
dt_dprintk("fixed up name for %s -> %s\n", pathp,
@@ -1574,7 +1583,7 @@ static unsigned long __init unflatten_dt_node(const void *fdt,
if ( allnextpp )
{
*prev_pp = NULL;
- np->name = dt_get_property(np, "name", NULL);
+ np->name = (np->name) ? : dt_get_property(np, "name", NULL);
np->type = dt_get_property(np, "device_type", NULL);
if ( !np->name )