Messages in this thread Patch in this message | | | Subject | Re: [PATCH] powerpc: Fix alignment of secondary cpu spin vars | From | Benjamin Herrenschmidt <> | Date | Wed, 08 Jan 2014 15:18:26 +1100 |
| |
On Wed, 2014-01-08 at 15:09 +1100, Michael Ellerman wrote: > > Of course, main worry is that this is just hiding some latent NULL > deref in > > the kernel now... :-/ > > Wow, that would have to come close to winning the > grossest-hack-in-arch-powerpc > award :) > > Have you tried changing the value at 8 to point to a reserved page? > > Some other possibilities: > > * Change the #define so FIXUP_ENDIAN is empty for PASEMI, that would > mean > you'd only be able to boot pasemi_defconfig. > * Move the hack into FIXUP_ENDIAN
We actually found the root cause on irc the other day, I was waiting for Olof to send a fix :-)
Olof: Can you try this totally untested patch ?
--- a/arch/powerpc/kernel/prom_init.c +++ b/arch/powerpc/kernel/prom_init.c @@ -1986,8 +1986,6 @@ static void __init prom_init_stdout(void) /* Get the full OF pathname of the stdout device */ memset(path, 0, 256); call_prom("instance-to-path", 3, 1, prom.stdout, path, 255); - stdout_node = call_prom("instance-to-package", 1, 1, prom.stdout); - val = cpu_to_be32(stdout_node); prom_setprop(prom.chosen, "/chosen", "linux,stdout-package", &val, sizeof(val)); prom_printf("OF stdout device is: %s\n", of_stdout_device); @@ -1995,10 +1993,14 @@ static void __init prom_init_stdout(void) path, strlen(path) + 1); /* If it's a display, note it */ - memset(type, 0, sizeof(type)); - prom_getprop(stdout_node, "device_type", type, sizeof(type)); - if (strcmp(type, "display") == 0) - prom_setprop(stdout_node, path, "linux,boot-display", NULL, 0); + stdout_node = call_prom("instance-to-package", 1, 1, prom.stdout); + if (stdout_node != PROM_ERROR) { + val = cpu_to_be32(stdout_node); + memset(type, 0, sizeof(type)); + prom_getprop(stdout_node, "device_type", type, sizeof(type)); + if (strcmp(type, "display") == 0) + prom_setprop(stdout_node, path, "linux,boot-display", NU + } }
| |