public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [BUGFIX/x86] Fix initialization of wakeup_cpu.
@ 2009-02-10 20:28 Alok Kataria
  2009-02-10 21:03 ` Yinghai Lu
  0 siblings, 1 reply; 9+ messages in thread
From: Alok Kataria @ 2009-02-10 20:28 UTC (permalink / raw)
  To: Ingo Molnar; +Cc: the arch/x86 maintainers, LKML

Was originally reported in the..
"Re: [PARAVIRT/x86] BUGFIX: Put a missing paravirt_release_pmd in pgd_dtor" thread

--
With the patches for refactoring of wake_cpu macros, the 32bit code
in tip doesn't execute generic_apic_probe if CONFIG_X86_32_NON_STANDARD
is not set.

Even on a x86 STANDARD cpu we need to execute the generic_apic_probe
function, as we rely on this function to execute the update_genapic
quirk which initilizes apic->wakeup_cpu. 

Failing to do so results in we making a call to a null function in do_boot_cpu.

The stack trace without the patch goes like this.

Booting processor 1 APIC 0x1 ip 0x6000
BUG: unable to handle kernel NULL pointer dereference at (null)
IP: [<(null)>] (null)
*pdpt = 0000000000839001 *pde = 0000000000c97067 *pte = 0000000000000163 
Oops: 0000 [#1] SMP 
last sysfs file: 
Modules linked in:

Pid: 1, comm: swapper Not tainted (2.6.29-rc4-tip #18) VMware Virtual Platform
EIP: 0062:[<00000000>] EFLAGS: 00010293 CPU: 0
EIP is at 0x0
EAX: 00000001 EBX: 00006000 ECX: c077ed00 EDX: 00006000
ESI: 00000001 EDI: 00000001 EBP: ef04cf40 ESP: ef04cf1c
 DS: 007b ES: 007b FS: 00d8 GS: 0000 SS: 006a
Process swapper (pid: 1, ti=ef04c000 task=ef050000 task.ti=ef04c000)
Stack:
 c0644e52 00000000 ef04cf24 ef04cf24 c064468d c0886dc0 00000000 c0702aea
 ef055480 00000001 00000101 dead4ead ffffffff ffffffff c08af530 00000000
 c0709715 ef04cf60 ef04cf60 00000001 00000000 00000000 dead4ead ffffffff
Call Trace:
 [<c0644e52>] ? native_cpu_up+0x2de/0x45b
 [<c064468d>] ? do_fork_idle+0x0/0x19
 [<c0645c5e>] ? _cpu_up+0x88/0xe8
 [<c0645d20>] ? cpu_up+0x42/0x4e
 [<c07e7462>] ? kernel_init+0x99/0x14b
 [<c07e73c9>] ? kernel_init+0x0/0x14b
 [<c040375f>] ? kernel_thread_helper+0x7/0x10
Code:  Bad EIP value.
EIP: [<00000000>] 0x0 SS:ESP 006a:ef04cf1c

I think we should call generic_apic_probe unconditionally now.

Signed-off-by: Alok N Kataria <akataria@vmware.com>

Index: linux-tip-master/arch/x86/kernel/setup.c
===================================================================
--- linux-tip-master.orig/arch/x86/kernel/setup.c	2009-02-10 11:37:31.000000000 -0800
+++ linux-tip-master/arch/x86/kernel/setup.c	2009-02-10 11:50:37.000000000 -0800
@@ -936,9 +936,7 @@
 	map_vsyscall();
 #endif
 
-#if defined(CONFIG_X86_32_NON_STANDARD) || defined(CONFIG_X86_BIGSMP)
 	generic_apic_probe();
-#endif
 
 	early_quirks();
 



^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [BUGFIX/x86] Fix initialization of wakeup_cpu.
  2009-02-10 20:28 [BUGFIX/x86] Fix initialization of wakeup_cpu Alok Kataria
@ 2009-02-10 21:03 ` Yinghai Lu
  2009-02-10 22:00   ` Alok Kataria
  0 siblings, 1 reply; 9+ messages in thread
From: Yinghai Lu @ 2009-02-10 21:03 UTC (permalink / raw)
  To: akataria; +Cc: Ingo Molnar, the arch/x86 maintainers, LKML

On Tue, Feb 10, 2009 at 12:28 PM, Alok Kataria <akataria@vmware.com> wrote:
> Was originally reported in the..
> "Re: [PARAVIRT/x86] BUGFIX: Put a missing paravirt_release_pmd in pgd_dtor" thread
>
> --
> With the patches for refactoring of wake_cpu macros, the 32bit code
> in tip doesn't execute generic_apic_probe if CONFIG_X86_32_NON_STANDARD
> is not set.
>
> Even on a x86 STANDARD cpu we need to execute the generic_apic_probe
> function, as we rely on this function to execute the update_genapic
> quirk which initilizes apic->wakeup_cpu.
>
> Failing to do so results in we making a call to a null function in do_boot_cpu.
>
> The stack trace without the patch goes like this.
>
> Booting processor 1 APIC 0x1 ip 0x6000
> BUG: unable to handle kernel NULL pointer dereference at (null)
> IP: [<(null)>] (null)
> *pdpt = 0000000000839001 *pde = 0000000000c97067 *pte = 0000000000000163
> Oops: 0000 [#1] SMP
> last sysfs file:
> Modules linked in:
>
> Pid: 1, comm: swapper Not tainted (2.6.29-rc4-tip #18) VMware Virtual Platform
> EIP: 0062:[<00000000>] EFLAGS: 00010293 CPU: 0
> EIP is at 0x0
> EAX: 00000001 EBX: 00006000 ECX: c077ed00 EDX: 00006000
> ESI: 00000001 EDI: 00000001 EBP: ef04cf40 ESP: ef04cf1c
>  DS: 007b ES: 007b FS: 00d8 GS: 0000 SS: 006a
> Process swapper (pid: 1, ti=ef04c000 task=ef050000 task.ti=ef04c000)
> Stack:
>  c0644e52 00000000 ef04cf24 ef04cf24 c064468d c0886dc0 00000000 c0702aea
>  ef055480 00000001 00000101 dead4ead ffffffff ffffffff c08af530 00000000
>  c0709715 ef04cf60 ef04cf60 00000001 00000000 00000000 dead4ead ffffffff
> Call Trace:
>  [<c0644e52>] ? native_cpu_up+0x2de/0x45b
>  [<c064468d>] ? do_fork_idle+0x0/0x19
>  [<c0645c5e>] ? _cpu_up+0x88/0xe8
>  [<c0645d20>] ? cpu_up+0x42/0x4e
>  [<c07e7462>] ? kernel_init+0x99/0x14b
>  [<c07e73c9>] ? kernel_init+0x0/0x14b
>  [<c040375f>] ? kernel_thread_helper+0x7/0x10
> Code:  Bad EIP value.
> EIP: [<00000000>] 0x0 SS:ESP 006a:ef04cf1c
>
> I think we should call generic_apic_probe unconditionally now.
>
> Signed-off-by: Alok N Kataria <akataria@vmware.com>
>
> Index: linux-tip-master/arch/x86/kernel/setup.c
> ===================================================================
> --- linux-tip-master.orig/arch/x86/kernel/setup.c       2009-02-10 11:37:31.000000000 -0800
> +++ linux-tip-master/arch/x86/kernel/setup.c    2009-02-10 11:50:37.000000000 -0800
> @@ -936,9 +936,7 @@
>        map_vsyscall();
>  #endif
>
> -#if defined(CONFIG_X86_32_NON_STANDARD) || defined(CONFIG_X86_BIGSMP)
>        generic_apic_probe();
> -#endif
>
>        early_quirks();
>

1. only es7000 and numaq has update_genapic() ==> they need
X86_32_NON_STANDARD..
2. also will break 64 bit....

YH

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [BUGFIX/x86] Fix initialization of wakeup_cpu.
  2009-02-10 21:03 ` Yinghai Lu
@ 2009-02-10 22:00   ` Alok Kataria
  2009-02-11  0:31     ` Yinghai Lu
  0 siblings, 1 reply; 9+ messages in thread
From: Alok Kataria @ 2009-02-10 22:00 UTC (permalink / raw)
  To: Yinghai Lu; +Cc: Ingo Molnar, the arch/x86 maintainers, LKML

On Tue, 2009-02-10 at 13:03 -0800, Yinghai Lu wrote:
> On Tue, Feb 10, 2009 at 12:28 PM, Alok Kataria <akataria@vmware.com> wrote:
> > Was originally reported in the..
> > "Re: [PARAVIRT/x86] BUGFIX: Put a missing paravirt_release_pmd in pgd_dtor" thread
> >
> > --
> > With the patches for refactoring of wake_cpu macros, the 32bit code
> > in tip doesn't execute generic_apic_probe if CONFIG_X86_32_NON_STANDARD
> > is not set.
> >
> > Even on a x86 STANDARD cpu we need to execute the generic_apic_probe
> > function, as we rely on this function to execute the update_genapic
> > quirk which initilizes apic->wakeup_cpu.
> >
> > Failing to do so results in we making a call to a null function in do_boot_cpu.
> >
> > The stack trace without the patch goes like this.
> >
> > Booting processor 1 APIC 0x1 ip 0x6000
> > BUG: unable to handle kernel NULL pointer dereference at (null)
> > IP: [<(null)>] (null)
> > *pdpt = 0000000000839001 *pde = 0000000000c97067 *pte = 0000000000000163
> > Oops: 0000 [#1] SMP
> > last sysfs file:
> > Modules linked in:
> >
> > Pid: 1, comm: swapper Not tainted (2.6.29-rc4-tip #18) VMware Virtual Platform
> > EIP: 0062:[<00000000>] EFLAGS: 00010293 CPU: 0
> > EIP is at 0x0
> > EAX: 00000001 EBX: 00006000 ECX: c077ed00 EDX: 00006000
> > ESI: 00000001 EDI: 00000001 EBP: ef04cf40 ESP: ef04cf1c
> >  DS: 007b ES: 007b FS: 00d8 GS: 0000 SS: 006a
> > Process swapper (pid: 1, ti=ef04c000 task=ef050000 task.ti=ef04c000)
> > Stack:
> >  c0644e52 00000000 ef04cf24 ef04cf24 c064468d c0886dc0 00000000 c0702aea
> >  ef055480 00000001 00000101 dead4ead ffffffff ffffffff c08af530 00000000
> >  c0709715 ef04cf60 ef04cf60 00000001 00000000 00000000 dead4ead ffffffff
> > Call Trace:
> >  [<c0644e52>] ? native_cpu_up+0x2de/0x45b
> >  [<c064468d>] ? do_fork_idle+0x0/0x19
> >  [<c0645c5e>] ? _cpu_up+0x88/0xe8
> >  [<c0645d20>] ? cpu_up+0x42/0x4e
> >  [<c07e7462>] ? kernel_init+0x99/0x14b
> >  [<c07e73c9>] ? kernel_init+0x0/0x14b
> >  [<c040375f>] ? kernel_thread_helper+0x7/0x10
> > Code:  Bad EIP value.
> > EIP: [<00000000>] 0x0 SS:ESP 006a:ef04cf1c
> >
> > I think we should call generic_apic_probe unconditionally now.
> >
> > Signed-off-by: Alok N Kataria <akataria@vmware.com>
> >
> > Index: linux-tip-master/arch/x86/kernel/setup.c
> > ===================================================================
> > --- linux-tip-master.orig/arch/x86/kernel/setup.c       2009-02-10 11:37:31.000000000 -0800
> > +++ linux-tip-master/arch/x86/kernel/setup.c    2009-02-10 11:50:37.000000000 -0800
> > @@ -936,9 +936,7 @@
> >        map_vsyscall();
> >  #endif
> >
> > -#if defined(CONFIG_X86_32_NON_STANDARD) || defined(CONFIG_X86_BIGSMP)
> >        generic_apic_probe();
> > -#endif
> >
> >        early_quirks();
> >
> 
> 1. only es7000 and numaq has update_genapic() ==> they need
> X86_32_NON_STANDARD..


There is one here too 

static struct x86_quirks default_x86_quirks __initdata = {
        .update_genapic         = default_update_genapic,
}

> 2. also will break 64 bit....
isn't the default_x86_quirks defined for 64 bit too ? 

--
Alok


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [BUGFIX/x86] Fix initialization of wakeup_cpu.
  2009-02-10 22:00   ` Alok Kataria
@ 2009-02-11  0:31     ` Yinghai Lu
  2009-02-11  0:45       ` Alok Kataria
  0 siblings, 1 reply; 9+ messages in thread
From: Yinghai Lu @ 2009-02-11  0:31 UTC (permalink / raw)
  To: akataria; +Cc: Ingo Molnar, the arch/x86 maintainers, LKML

Alok Kataria wrote:
> On Tue, 2009-02-10 at 13:03 -0800, Yinghai Lu wrote:
>> On Tue, Feb 10, 2009 at 12:28 PM, Alok Kataria <akataria@vmware.com> wrote:
>>> Was originally reported in the..
>>> "Re: [PARAVIRT/x86] BUGFIX: Put a missing paravirt_release_pmd in pgd_dtor" thread
>>>
>>> --
>>> With the patches for refactoring of wake_cpu macros, the 32bit code
>>> in tip doesn't execute generic_apic_probe if CONFIG_X86_32_NON_STANDARD
>>> is not set.
>>>
>>> Even on a x86 STANDARD cpu we need to execute the generic_apic_probe
>>> function, as we rely on this function to execute the update_genapic
>>> quirk which initilizes apic->wakeup_cpu.
>>>
>>> Failing to do so results in we making a call to a null function in do_boot_cpu.
>>>
>>> The stack trace without the patch goes like this.
>>>
>>> Booting processor 1 APIC 0x1 ip 0x6000
>>> BUG: unable to handle kernel NULL pointer dereference at (null)
>>> IP: [<(null)>] (null)
>>> *pdpt = 0000000000839001 *pde = 0000000000c97067 *pte = 0000000000000163
>>> Oops: 0000 [#1] SMP
>>> last sysfs file:
>>> Modules linked in:
>>>
>>> Pid: 1, comm: swapper Not tainted (2.6.29-rc4-tip #18) VMware Virtual Platform
>>> EIP: 0062:[<00000000>] EFLAGS: 00010293 CPU: 0
>>> EIP is at 0x0
>>> EAX: 00000001 EBX: 00006000 ECX: c077ed00 EDX: 00006000
>>> ESI: 00000001 EDI: 00000001 EBP: ef04cf40 ESP: ef04cf1c
>>>  DS: 007b ES: 007b FS: 00d8 GS: 0000 SS: 006a
>>> Process swapper (pid: 1, ti=ef04c000 task=ef050000 task.ti=ef04c000)
>>> Stack:
>>>  c0644e52 00000000 ef04cf24 ef04cf24 c064468d c0886dc0 00000000 c0702aea
>>>  ef055480 00000001 00000101 dead4ead ffffffff ffffffff c08af530 00000000
>>>  c0709715 ef04cf60 ef04cf60 00000001 00000000 00000000 dead4ead ffffffff
>>> Call Trace:
>>>  [<c0644e52>] ? native_cpu_up+0x2de/0x45b
>>>  [<c064468d>] ? do_fork_idle+0x0/0x19
>>>  [<c0645c5e>] ? _cpu_up+0x88/0xe8
>>>  [<c0645d20>] ? cpu_up+0x42/0x4e
>>>  [<c07e7462>] ? kernel_init+0x99/0x14b
>>>  [<c07e73c9>] ? kernel_init+0x0/0x14b
>>>  [<c040375f>] ? kernel_thread_helper+0x7/0x10
>>> Code:  Bad EIP value.
>>> EIP: [<00000000>] 0x0 SS:ESP 006a:ef04cf1c
>>>
>>> I think we should call generic_apic_probe unconditionally now.
>>>
>>> Signed-off-by: Alok N Kataria <akataria@vmware.com>
>>>
>>> Index: linux-tip-master/arch/x86/kernel/setup.c
>>> ===================================================================
>>> --- linux-tip-master.orig/arch/x86/kernel/setup.c       2009-02-10 11:37:31.000000000 -0800
>>> +++ linux-tip-master/arch/x86/kernel/setup.c    2009-02-10 11:50:37.000000000 -0800
>>> @@ -936,9 +936,7 @@
>>>        map_vsyscall();
>>>  #endif
>>>
>>> -#if defined(CONFIG_X86_32_NON_STANDARD) || defined(CONFIG_X86_BIGSMP)
>>>        generic_apic_probe();
>>> -#endif
>>>
>>>        early_quirks();
>>>
>> 1. only es7000 and numaq has update_genapic() ==> they need
>> X86_32_NON_STANDARD..
> 
> 
> There is one here too 
> 
> static struct x86_quirks default_x86_quirks __initdata = {
>         .update_genapic         = default_update_genapic,
> }
> 
>> 2. also will break 64 bit....
> isn't the default_x86_quirks defined for 64 bit too ? 
> 
64 bit doesn't have genapic_apic_probe()

need to change that to 
#ifdef CONFIG_X86_32
	genapic_apic_probe();
#endif

YH

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [BUGFIX/x86] Fix initialization of wakeup_cpu.
  2009-02-11  0:31     ` Yinghai Lu
@ 2009-02-11  0:45       ` Alok Kataria
  2009-02-11  9:46         ` Ingo Molnar
  0 siblings, 1 reply; 9+ messages in thread
From: Alok Kataria @ 2009-02-11  0:45 UTC (permalink / raw)
  To: Yinghai Lu; +Cc: Ingo Molnar, the arch/x86 maintainers, LKML

On Tue, 2009-02-10 at 16:31 -0800, Yinghai Lu wrote:
> > 
> >> 2. also will break 64 bit....
> > isn't the default_x86_quirks defined for 64 bit too ? 
> > 
> 64 bit doesn't have genapic_apic_probe()
> 
> need to change that to 
> #ifdef CONFIG_X86_32
> 	genapic_apic_probe();
> #endif
> 

Ok here it is. 
--

With refactoring of wake_cpu macros the 32bit code in tip doesn't 
execute generic_apic_probe if CONFIG_X86_32_NON_STANDARD is not set.

Even on a x86 STANDARD cpu we need to execute the generic_apic_probe
function, as we rely on this function to execute the update_genapic
quirk which initilizes apic->wakeup_cpu. 

Failing to do so results in we making a call to a null function in do_boot_cpu.

The stack trace without the patch goes like this.

Booting processor 1 APIC 0x1 ip 0x6000
BUG: unable to handle kernel NULL pointer dereference at (null)
IP: [<(null)>] (null)
*pdpt = 0000000000839001 *pde = 0000000000c97067 *pte = 0000000000000163 
Oops: 0000 [#1] SMP 
last sysfs file: 
Modules linked in:

Pid: 1, comm: swapper Not tainted (2.6.29-rc4-tip #18) VMware Virtual Platform
EIP: 0062:[<00000000>] EFLAGS: 00010293 CPU: 0
EIP is at 0x0
EAX: 00000001 EBX: 00006000 ECX: c077ed00 EDX: 00006000
ESI: 00000001 EDI: 00000001 EBP: ef04cf40 ESP: ef04cf1c
 DS: 007b ES: 007b FS: 00d8 GS: 0000 SS: 006a
Process swapper (pid: 1, ti=ef04c000 task=ef050000 task.ti=ef04c000)
Stack:
 c0644e52 00000000 ef04cf24 ef04cf24 c064468d c0886dc0 00000000 c0702aea
 ef055480 00000001 00000101 dead4ead ffffffff ffffffff c08af530 00000000
 c0709715 ef04cf60 ef04cf60 00000001 00000000 00000000 dead4ead ffffffff
Call Trace:
 [<c0644e52>] ? native_cpu_up+0x2de/0x45b
 [<c064468d>] ? do_fork_idle+0x0/0x19
 [<c0645c5e>] ? _cpu_up+0x88/0xe8
 [<c0645d20>] ? cpu_up+0x42/0x4e
 [<c07e7462>] ? kernel_init+0x99/0x14b
 [<c07e73c9>] ? kernel_init+0x0/0x14b
 [<c040375f>] ? kernel_thread_helper+0x7/0x10
Code:  Bad EIP value.
EIP: [<00000000>] 0x0 SS:ESP 006a:ef04cf1c

I think we should call generic_apic_probe unconditionally for 32 bit now.

Signed-off-by: Alok N Kataria <akataria@vmware.com>
Cc: Yinghai Lu <yinghai@kernel.org>

Index: linux-tip-master/arch/x86/kernel/setup.c
===================================================================
--- linux-tip-master.orig/arch/x86/kernel/setup.c	2009-02-10 12:05:18.000000000 -0800
+++ linux-tip-master/arch/x86/kernel/setup.c	2009-02-10 16:37:59.000000000 -0800
@@ -936,7 +936,7 @@
 	map_vsyscall();
 #endif
 
-#if defined(CONFIG_X86_32_NON_STANDARD) || defined(CONFIG_X86_BIGSMP)
+#ifdef CONFIG_X86_32
 	generic_apic_probe();
 #endif
 



^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [BUGFIX/x86] Fix initialization of wakeup_cpu.
  2009-02-11  0:45       ` Alok Kataria
@ 2009-02-11  9:46         ` Ingo Molnar
  2009-02-11  9:48           ` Ingo Molnar
  0 siblings, 1 reply; 9+ messages in thread
From: Ingo Molnar @ 2009-02-11  9:46 UTC (permalink / raw)
  To: Alok Kataria; +Cc: Yinghai Lu, the arch/x86 maintainers, LKML


* Alok Kataria <akataria@vmware.com> wrote:

> On Tue, 2009-02-10 at 16:31 -0800, Yinghai Lu wrote:
> > > 
> > >> 2. also will break 64 bit....
> > > isn't the default_x86_quirks defined for 64 bit too ? 
> > > 
> > 64 bit doesn't have genapic_apic_probe()
> > 
> > need to change that to 
> > #ifdef CONFIG_X86_32
> > 	genapic_apic_probe();
> > #endif
> > 
> 
> Ok here it is. 
> --
> 
> With refactoring of wake_cpu macros the 32bit code in tip doesn't 
> execute generic_apic_probe if CONFIG_X86_32_NON_STANDARD is not set.
> 
> Even on a x86 STANDARD cpu we need to execute the generic_apic_probe
> function, as we rely on this function to execute the update_genapic
> quirk which initilizes apic->wakeup_cpu. 
> 
> Failing to do so results in we making a call to a null function in do_boot_cpu.
> 
> The stack trace without the patch goes like this.
> 
> Booting processor 1 APIC 0x1 ip 0x6000
> BUG: unable to handle kernel NULL pointer dereference at (null)
> IP: [<(null)>] (null)
> *pdpt = 0000000000839001 *pde = 0000000000c97067 *pte = 0000000000000163 
> Oops: 0000 [#1] SMP 
> last sysfs file: 
> Modules linked in:
> 
> Pid: 1, comm: swapper Not tainted (2.6.29-rc4-tip #18) VMware Virtual Platform
> EIP: 0062:[<00000000>] EFLAGS: 00010293 CPU: 0
> EIP is at 0x0
> EAX: 00000001 EBX: 00006000 ECX: c077ed00 EDX: 00006000
> ESI: 00000001 EDI: 00000001 EBP: ef04cf40 ESP: ef04cf1c
>  DS: 007b ES: 007b FS: 00d8 GS: 0000 SS: 006a
> Process swapper (pid: 1, ti=ef04c000 task=ef050000 task.ti=ef04c000)
> Stack:
>  c0644e52 00000000 ef04cf24 ef04cf24 c064468d c0886dc0 00000000 c0702aea
>  ef055480 00000001 00000101 dead4ead ffffffff ffffffff c08af530 00000000
>  c0709715 ef04cf60 ef04cf60 00000001 00000000 00000000 dead4ead ffffffff
> Call Trace:
>  [<c0644e52>] ? native_cpu_up+0x2de/0x45b
>  [<c064468d>] ? do_fork_idle+0x0/0x19
>  [<c0645c5e>] ? _cpu_up+0x88/0xe8
>  [<c0645d20>] ? cpu_up+0x42/0x4e
>  [<c07e7462>] ? kernel_init+0x99/0x14b
>  [<c07e73c9>] ? kernel_init+0x0/0x14b
>  [<c040375f>] ? kernel_thread_helper+0x7/0x10
> Code:  Bad EIP value.
> EIP: [<00000000>] 0x0 SS:ESP 006a:ef04cf1c
> 
> I think we should call generic_apic_probe unconditionally for 32 bit now.
> 
> Signed-off-by: Alok N Kataria <akataria@vmware.com>
> Cc: Yinghai Lu <yinghai@kernel.org>
> 
> Index: linux-tip-master/arch/x86/kernel/setup.c
> ===================================================================
> --- linux-tip-master.orig/arch/x86/kernel/setup.c	2009-02-10 12:05:18.000000000 -0800
> +++ linux-tip-master/arch/x86/kernel/setup.c	2009-02-10 16:37:59.000000000 -0800
> @@ -936,7 +936,7 @@
>  	map_vsyscall();
>  #endif
>  
> -#if defined(CONFIG_X86_32_NON_STANDARD) || defined(CONFIG_X86_BIGSMP)
> +#ifdef CONFIG_X86_32
>  	generic_apic_probe();
>  #endif

Please extend 64-bit with generic_apic_probe() instead. (and please also
make sure your patches build on a 64-bit defconfig)

	Ingo

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [BUGFIX/x86] Fix initialization of wakeup_cpu.
  2009-02-11  9:46         ` Ingo Molnar
@ 2009-02-11  9:48           ` Ingo Molnar
  2009-02-11 10:25             ` Ingo Molnar
  0 siblings, 1 reply; 9+ messages in thread
From: Ingo Molnar @ 2009-02-11  9:48 UTC (permalink / raw)
  To: Alok Kataria; +Cc: Yinghai Lu, the arch/x86 maintainers, LKML


* Ingo Molnar <mingo@elte.hu> wrote:

> 
> * Alok Kataria <akataria@vmware.com> wrote:
> 
> > On Tue, 2009-02-10 at 16:31 -0800, Yinghai Lu wrote:
> > > > 
> > > >> 2. also will break 64 bit....
> > > > isn't the default_x86_quirks defined for 64 bit too ? 
> > > > 
> > > 64 bit doesn't have genapic_apic_probe()
> > > 
> > > need to change that to 
> > > #ifdef CONFIG_X86_32
> > > 	genapic_apic_probe();
> > > #endif
> > > 
> > 
> > Ok here it is. 
> > --
> > 
> > With refactoring of wake_cpu macros the 32bit code in tip doesn't 
> > execute generic_apic_probe if CONFIG_X86_32_NON_STANDARD is not set.
> > 
> > Even on a x86 STANDARD cpu we need to execute the generic_apic_probe
> > function, as we rely on this function to execute the update_genapic
> > quirk which initilizes apic->wakeup_cpu. 
> > 
> > Failing to do so results in we making a call to a null function in do_boot_cpu.
> > 
> > The stack trace without the patch goes like this.
> > 
> > Booting processor 1 APIC 0x1 ip 0x6000
> > BUG: unable to handle kernel NULL pointer dereference at (null)
> > IP: [<(null)>] (null)
> > *pdpt = 0000000000839001 *pde = 0000000000c97067 *pte = 0000000000000163 
> > Oops: 0000 [#1] SMP 
> > last sysfs file: 
> > Modules linked in:
> > 
> > Pid: 1, comm: swapper Not tainted (2.6.29-rc4-tip #18) VMware Virtual Platform
> > EIP: 0062:[<00000000>] EFLAGS: 00010293 CPU: 0
> > EIP is at 0x0
> > EAX: 00000001 EBX: 00006000 ECX: c077ed00 EDX: 00006000
> > ESI: 00000001 EDI: 00000001 EBP: ef04cf40 ESP: ef04cf1c
> >  DS: 007b ES: 007b FS: 00d8 GS: 0000 SS: 006a
> > Process swapper (pid: 1, ti=ef04c000 task=ef050000 task.ti=ef04c000)
> > Stack:
> >  c0644e52 00000000 ef04cf24 ef04cf24 c064468d c0886dc0 00000000 c0702aea
> >  ef055480 00000001 00000101 dead4ead ffffffff ffffffff c08af530 00000000
> >  c0709715 ef04cf60 ef04cf60 00000001 00000000 00000000 dead4ead ffffffff
> > Call Trace:
> >  [<c0644e52>] ? native_cpu_up+0x2de/0x45b
> >  [<c064468d>] ? do_fork_idle+0x0/0x19
> >  [<c0645c5e>] ? _cpu_up+0x88/0xe8
> >  [<c0645d20>] ? cpu_up+0x42/0x4e
> >  [<c07e7462>] ? kernel_init+0x99/0x14b
> >  [<c07e73c9>] ? kernel_init+0x0/0x14b
> >  [<c040375f>] ? kernel_thread_helper+0x7/0x10
> > Code:  Bad EIP value.
> > EIP: [<00000000>] 0x0 SS:ESP 006a:ef04cf1c
> > 
> > I think we should call generic_apic_probe unconditionally for 32 bit now.
> > 
> > Signed-off-by: Alok N Kataria <akataria@vmware.com>
> > Cc: Yinghai Lu <yinghai@kernel.org>
> > 
> > Index: linux-tip-master/arch/x86/kernel/setup.c
> > ===================================================================
> > --- linux-tip-master.orig/arch/x86/kernel/setup.c	2009-02-10 12:05:18.000000000 -0800
> > +++ linux-tip-master/arch/x86/kernel/setup.c	2009-02-10 16:37:59.000000000 -0800
> > @@ -936,7 +936,7 @@
> >  	map_vsyscall();
> >  #endif
> >  
> > -#if defined(CONFIG_X86_32_NON_STANDARD) || defined(CONFIG_X86_BIGSMP)
> > +#ifdef CONFIG_X86_32
> >  	generic_apic_probe();
> >  #endif
> 
> Please extend 64-bit with generic_apic_probe() instead. (and please also
> make sure your patches build on a 64-bit defconfig)

I've applied your patch as an interim measure so far, to fix the crash,
so please do the cleaner patch ontop of your first patch. Thanks,

	Ingo

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [BUGFIX/x86] Fix initialization of wakeup_cpu.
  2009-02-11  9:48           ` Ingo Molnar
@ 2009-02-11 10:25             ` Ingo Molnar
  2009-02-11 10:29               ` [PATCH] x86, apic: make generic_apic_probe() generally available Ingo Molnar
  0 siblings, 1 reply; 9+ messages in thread
From: Ingo Molnar @ 2009-02-11 10:25 UTC (permalink / raw)
  To: Alok Kataria; +Cc: Yinghai Lu, the arch/x86 maintainers, LKML


* Ingo Molnar <mingo@elte.hu> wrote:

> 
> * Ingo Molnar <mingo@elte.hu> wrote:
> 
> > 
> > * Alok Kataria <akataria@vmware.com> wrote:
> > 
> > > On Tue, 2009-02-10 at 16:31 -0800, Yinghai Lu wrote:
> > > > > 
> > > > >> 2. also will break 64 bit....
> > > > > isn't the default_x86_quirks defined for 64 bit too ? 
> > > > > 
> > > > 64 bit doesn't have genapic_apic_probe()
> > > > 
> > > > need to change that to 
> > > > #ifdef CONFIG_X86_32
> > > > 	genapic_apic_probe();
> > > > #endif
> > > > 
> > > 
> > > Ok here it is. 
> > > --
> > > 
> > > With refactoring of wake_cpu macros the 32bit code in tip doesn't 
> > > execute generic_apic_probe if CONFIG_X86_32_NON_STANDARD is not set.
> > > 
> > > Even on a x86 STANDARD cpu we need to execute the generic_apic_probe
> > > function, as we rely on this function to execute the update_genapic
> > > quirk which initilizes apic->wakeup_cpu. 
> > > 
> > > Failing to do so results in we making a call to a null function in do_boot_cpu.
> > > 
> > > The stack trace without the patch goes like this.
> > > 
> > > Booting processor 1 APIC 0x1 ip 0x6000
> > > BUG: unable to handle kernel NULL pointer dereference at (null)
> > > IP: [<(null)>] (null)
> > > *pdpt = 0000000000839001 *pde = 0000000000c97067 *pte = 0000000000000163 
> > > Oops: 0000 [#1] SMP 
> > > last sysfs file: 
> > > Modules linked in:
> > > 
> > > Pid: 1, comm: swapper Not tainted (2.6.29-rc4-tip #18) VMware Virtual Platform
> > > EIP: 0062:[<00000000>] EFLAGS: 00010293 CPU: 0
> > > EIP is at 0x0
> > > EAX: 00000001 EBX: 00006000 ECX: c077ed00 EDX: 00006000
> > > ESI: 00000001 EDI: 00000001 EBP: ef04cf40 ESP: ef04cf1c
> > >  DS: 007b ES: 007b FS: 00d8 GS: 0000 SS: 006a
> > > Process swapper (pid: 1, ti=ef04c000 task=ef050000 task.ti=ef04c000)
> > > Stack:
> > >  c0644e52 00000000 ef04cf24 ef04cf24 c064468d c0886dc0 00000000 c0702aea
> > >  ef055480 00000001 00000101 dead4ead ffffffff ffffffff c08af530 00000000
> > >  c0709715 ef04cf60 ef04cf60 00000001 00000000 00000000 dead4ead ffffffff
> > > Call Trace:
> > >  [<c0644e52>] ? native_cpu_up+0x2de/0x45b
> > >  [<c064468d>] ? do_fork_idle+0x0/0x19
> > >  [<c0645c5e>] ? _cpu_up+0x88/0xe8
> > >  [<c0645d20>] ? cpu_up+0x42/0x4e
> > >  [<c07e7462>] ? kernel_init+0x99/0x14b
> > >  [<c07e73c9>] ? kernel_init+0x0/0x14b
> > >  [<c040375f>] ? kernel_thread_helper+0x7/0x10
> > > Code:  Bad EIP value.
> > > EIP: [<00000000>] 0x0 SS:ESP 006a:ef04cf1c
> > > 
> > > I think we should call generic_apic_probe unconditionally for 32 bit now.
> > > 
> > > Signed-off-by: Alok N Kataria <akataria@vmware.com>
> > > Cc: Yinghai Lu <yinghai@kernel.org>
> > > 
> > > Index: linux-tip-master/arch/x86/kernel/setup.c
> > > ===================================================================
> > > --- linux-tip-master.orig/arch/x86/kernel/setup.c	2009-02-10 12:05:18.000000000 -0800
> > > +++ linux-tip-master/arch/x86/kernel/setup.c	2009-02-10 16:37:59.000000000 -0800
> > > @@ -936,7 +936,7 @@
> > >  	map_vsyscall();
> > >  #endif
> > >  
> > > -#if defined(CONFIG_X86_32_NON_STANDARD) || defined(CONFIG_X86_BIGSMP)
> > > +#ifdef CONFIG_X86_32
> > >  	generic_apic_probe();
> > >  #endif
> > 
> > Please extend 64-bit with generic_apic_probe() instead. (and please also
> > make sure your patches build on a 64-bit defconfig)
> 
> I've applied your patch as an interim measure so far, to fix the crash,
> so please do the cleaner patch ontop of your first patch. Thanks,

I removed it again. generic_apic_probe() is not always available on 32-bit either.

	Ingo

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [PATCH] x86, apic: make generic_apic_probe() generally available
  2009-02-11 10:25             ` Ingo Molnar
@ 2009-02-11 10:29               ` Ingo Molnar
  0 siblings, 0 replies; 9+ messages in thread
From: Ingo Molnar @ 2009-02-11 10:29 UTC (permalink / raw)
  To: Alok Kataria; +Cc: Yinghai Lu, the arch/x86 maintainers, linux-kernel


* Ingo Molnar <mingo@elte.hu> wrote:

> > I've applied your patch as an interim measure so far, to fix the crash, so 
> > please do the cleaner patch ontop of your first patch. Thanks,
> 
> I removed it again. generic_apic_probe() is not always available on 32-bit either.

applied the fix below instead.

	Ingo

------------------>
>From 160d8dac12932ad6eb4a359b66521e2e3282ea7d Mon Sep 17 00:00:00 2001
From: Ingo Molnar <mingo@elte.hu>
Date: Wed, 11 Feb 2009 11:27:39 +0100
Subject: [PATCH] x86, apic: make generic_apic_probe() generally available

Impact: build fix

Signed-off-by: Ingo Molnar <mingo@elte.hu>
---
 arch/x86/include/asm/apic.h |    6 ++++++
 arch/x86/kernel/setup.c     |    2 --
 2 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/arch/x86/include/asm/apic.h b/arch/x86/include/asm/apic.h
index f4835a1..fba49f6 100644
--- a/arch/x86/include/asm/apic.h
+++ b/arch/x86/include/asm/apic.h
@@ -33,7 +33,13 @@
 	} while (0)
 
 
+#if defined(CONFIG_X86_LOCAL_APIC) && defined(CONFIG_X86_32)
 extern void generic_apic_probe(void);
+#else
+static inline void generic_apic_probe(void)
+{
+}
+#endif
 
 #ifdef CONFIG_X86_LOCAL_APIC
 
diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
index 150e6d0..8fce6c7 100644
--- a/arch/x86/kernel/setup.c
+++ b/arch/x86/kernel/setup.c
@@ -936,9 +936,7 @@ void __init setup_arch(char **cmdline_p)
 	map_vsyscall();
 #endif
 
-#ifdef CONFIG_X86_32
 	generic_apic_probe();
-#endif
 
 	early_quirks();
 

^ permalink raw reply related	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2009-02-11 10:29 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-02-10 20:28 [BUGFIX/x86] Fix initialization of wakeup_cpu Alok Kataria
2009-02-10 21:03 ` Yinghai Lu
2009-02-10 22:00   ` Alok Kataria
2009-02-11  0:31     ` Yinghai Lu
2009-02-11  0:45       ` Alok Kataria
2009-02-11  9:46         ` Ingo Molnar
2009-02-11  9:48           ` Ingo Molnar
2009-02-11 10:25             ` Ingo Molnar
2009-02-11 10:29               ` [PATCH] x86, apic: make generic_apic_probe() generally available Ingo Molnar

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox