diff options
author | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2005-06-01 00:54:25 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-06-01 10:54:13 -0400 |
commit | 44e4665cc9d856d15f04a012c78e4ab48f71290b (patch) | |
tree | 70d440628c5a426f6de14b65a230e076584fe7fe /arch | |
parent | 21e3024cbddb712f6a078bf4132d7682d3c4e35e (diff) |
[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>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/ppc64/kernel/prom_init.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/arch/ppc64/kernel/prom_init.c b/arch/ppc64/kernel/prom_init.c index bc53967a8643..3de950de3671 100644 --- a/arch/ppc64/kernel/prom_init.c +++ b/arch/ppc64/kernel/prom_init.c | |||
@@ -1566,7 +1566,7 @@ static void __init scan_dt_build_struct(phandle node, unsigned long *mem_start, | |||
1566 | { | 1566 | { |
1567 | int l, align; | 1567 | int l, align; |
1568 | phandle child; | 1568 | phandle child; |
1569 | char *namep, *prev_name, *sstart; | 1569 | char *namep, *prev_name, *sstart, *p, *ep; |
1570 | unsigned long soff; | 1570 | unsigned long soff; |
1571 | unsigned char *valp; | 1571 | unsigned char *valp; |
1572 | unsigned long offset = reloc_offset(); | 1572 | unsigned long offset = reloc_offset(); |
@@ -1588,6 +1588,14 @@ static void __init scan_dt_build_struct(phandle node, unsigned long *mem_start, | |||
1588 | call_prom("package-to-path", 3, 1, node, namep, l); | 1588 | call_prom("package-to-path", 3, 1, node, namep, l); |
1589 | } | 1589 | } |
1590 | namep[l] = '\0'; | 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 | *mem_start = _ALIGN(((unsigned long) namep) + strlen(namep) + 1, 4); | 1599 | *mem_start = _ALIGN(((unsigned long) namep) + strlen(namep) + 1, 4); |
1592 | } | 1600 | } |
1593 | 1601 | ||