All of lore.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.