[PATCH] ppc64: Fix a device-tree bug on Apple's

Apple's Open Firmware has a funny bug when creating the /cpus nodes
where it leaves a dangling '\0' character in the CPU name which ends up
appearing in the full path of the node. This is bogus and
confuses /proc/device-tree badly.

This patch strips those bogus zero's from the node full path when
reading the device-tree from Open Firmware. The "name" property is not
modified and still contains the spurrious 0 (it basically contains 0
tailing 0 instead of one) but that shouldn't be a problem.

An equivalent patch for ppc32 will follow shortly

Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>

authored by

Benjamin Herrenschmidt and committed by
Linus Torvalds
44e4665c 21e3024c

+9 -1
+9 -1
arch/ppc64/kernel/prom_init.c
··· 1566 1566 { 1567 1567 int l, align; 1568 1568 phandle child; 1569 - char *namep, *prev_name, *sstart; 1569 + char *namep, *prev_name, *sstart, *p, *ep; 1570 1570 unsigned long soff; 1571 1571 unsigned char *valp; 1572 1572 unsigned long offset = reloc_offset(); ··· 1588 1588 call_prom("package-to-path", 3, 1, node, namep, l); 1589 1589 } 1590 1590 namep[l] = '\0'; 1591 + /* Fixup an Apple bug where they have bogus \0 chars in the 1592 + * middle of the path in some properties 1593 + */ 1594 + for (p = namep, ep = namep + l; p < ep; p++) 1595 + if (*p == '\0') { 1596 + memmove(p, p+1, ep - p); 1597 + ep--; l--; 1598 + } 1591 1599 *mem_start = _ALIGN(((unsigned long) namep) + strlen(namep) + 1, 4); 1592 1600 } 1593 1601