Patchwork Re[2]: PS3 platform is broken on Linux 3.7.0

login
register
mail settings
Submitter Phileas Fogg
Date Feb. 10, 2013, 11:45 a.m.
Message ID <1360496719.267074236@f380.i.mail.ru>
Download mbox | patch
Permalink /patch/219489/
State Not Applicable
Headers show

Comments

Phileas Fogg - Feb. 10, 2013, 11:45 a.m.
>On Fri, 2012-12-14 at 16:35 +0400, Phileas Fogg wrote:
>> Hi,
>> 
>> I wanted to bring to your attention the fact that the PS3 platform is broken on Linux 3.7.0.
>> 
>> i'm not able to boot Linux 3.7.0 on my PS3 slim. Linux 3.6.10 boots just fine but not 3.7.0
>> When i try to boot Linux 3.7.0 then my PS3  shuts down.
>> 
>> So i cloned the Linux powerpc GIT repository and tried to find out which commits broke the PS3 platform.
>> After some time I tracked it down to 2 commits:
>
>Aneesh, do you have any idea what might be going on there ? Can you look
>at the PS3 hash code ? It's a bit different from the rest, you might
>have missed an update or two...
>
>Michael, same deal with PACA...
>
>Cheers,
>Ben.


I debugged the issue with the panic on PACA access on PS3 arch and found out that it panics in

arch/powerpc/kernel/setup_64.c -> early_setup -> udbg_early_init -> register_early_udbg_console -> console_lock -> down -> raw_spin_unlock_irqrestore

It panics only if i enable lock debugging in kernel.

I suggest the following patch to fix the issue:

Patch

--- arch/powerpc/kernel/setup_64.c.old	2013-02-10 13:39:45.147131547 +0100
+++ arch/powerpc/kernel/setup_64.c	2013-02-10 13:40:51.697135419 +0100
@@ -186,6 +186,9 @@ 
 	initialise_paca(&boot_paca, 0);
 	setup_paca(&boot_paca);
 
+	/* Allow percpu accesses to "work" until we setup percpu data */
+	get_paca()->data_offset = 0;
+
 	/* Initialize lockdep early or else spinlocks will blow */
 	lockdep_init();
 
@@ -208,8 +211,6 @@ 
 
 	/* Fix up paca fields required for the boot cpu */
 	get_paca()->cpu_start = 1;
-	/* Allow percpu accesses to "work" until we setup percpu data */
-	get_paca()->data_offset = 0;
 
 	/* Probe the machine type */
 	probe_machine();