2005-09-28 21:48:49

by Zachary Amsden

[permalink] [raw]
Subject: [PATCH 3/3] Gdt hotplug

As suggested by Andi Kleen, don't allocate a GDT page if there is already one
present. Needed for CPU hotplug.

Signed-off-by: Zachary Amsden <[email protected]>
Index: linux-2.6.14-rc1/arch/i386/kernel/smpboot.c
===================================================================
--- linux-2.6.14-rc1.orig/arch/i386/kernel/smpboot.c 2005-09-20 20:38:22.000000000 -0700
+++ linux-2.6.14-rc1/arch/i386/kernel/smpboot.c 2005-09-28 12:54:08.000000000 -0700
@@ -898,7 +898,8 @@ static int __devinit do_boot_cpu(int api
* This grunge runs the startup process for
* the targeted processor.
*/
- cpu_gdt_descr[cpu].address = __get_free_page(GFP_KERNEL|__GFP_ZERO);
+ if (!cpu_gdt_descr[cpu].address)
+ cpu_gdt_descr[cpu].address = __get_free_page(GFP_KERNEL|__GFP_ZERO);

atomic_set(&init_deasserted, 0);


2005-09-28 22:15:50

by Andi Kleen

[permalink] [raw]
Subject: Re: [PATCH 3/3] Gdt hotplug

On Wednesday 28 September 2005 23:44, Zachary Amsden wrote:
> As suggested by Andi Kleen, don't allocate a GDT page if there is already
> one present. Needed for CPU hotplug.

Did I really suggest that? I think I suggested checking the return
value of gfp. Also get_zeroed_page() is slightly cleaner than GFP_ZERO.

-Andi

>
> Signed-off-by: Zachary Amsden <[email protected]>
> Index: linux-2.6.14-rc1/arch/i386/kernel/smpboot.c
> ===================================================================
> --- linux-2.6.14-rc1.orig/arch/i386/kernel/smpboot.c 2005-09-20
> 20:38:22.000000000 -0700 +++
> linux-2.6.14-rc1/arch/i386/kernel/smpboot.c 2005-09-28 12:54:08.000000000
> -0700 @@ -898,7 +898,8 @@ static int __devinit do_boot_cpu(int api
> * This grunge runs the startup process for
> * the targeted processor.
> */
> - cpu_gdt_descr[cpu].address = __get_free_page(GFP_KERNEL|__GFP_ZERO);
> + if (!cpu_gdt_descr[cpu].address)
> + cpu_gdt_descr[cpu].address = __get_free_page(GFP_KERNEL|__GFP_ZERO);
>
> atomic_set(&init_deasserted, 0);

2005-09-28 22:20:35

by Chris Wright

[permalink] [raw]
Subject: Re: [PATCH 3/3] Gdt hotplug

* Andi Kleen ([email protected]) wrote:
> On Wednesday 28 September 2005 23:44, Zachary Amsden wrote:
> > As suggested by Andi Kleen, don't allocate a GDT page if there is already
> > one present. Needed for CPU hotplug.
>
> Did I really suggest that? I think I suggested checking the return
> value of gfp. Also get_zeroed_page() is slightly cleaner than GFP_ZERO.

Yes, my recollection is you were talking about failed allocation.

thanks,
-chris

2005-09-28 23:05:19

by Zachary Amsden

[permalink] [raw]
Subject: Re: [PATCH 3/3] Gdt hotplug

As suggested by Andi Kleen, don't allocate a GDT page if there is already one
present. Needed for CPU hotplug.

Signed-off-by: Zachary Amsden <[email protected]>
Index: linux-2.6.14-rc2/arch/i386/kernel/smpboot.c
===================================================================
--- linux-2.6.14-rc2.orig/arch/i386/kernel/smpboot.c 2005-09-28 15:49:26.000000000 -0700
+++ linux-2.6.14-rc2/arch/i386/kernel/smpboot.c 2005-09-28 16:00:55.000000000 -0700
@@ -874,6 +874,12 @@ static int __devinit do_boot_cpu(int api
unsigned long start_eip;
unsigned short nmi_high = 0, nmi_low = 0;

+ if (!cpu_gdt_descr[cpu].address &&
+ !(cpu_gdt_descr[cpu].address = get_zeroed_page(GFP_KERNEL))) {
+ printk("Failed to allocate GDT for CPU %d\n", cpu);
+ return 1;
+ }
+
++cpucount;

/*
@@ -898,8 +904,6 @@ static int __devinit do_boot_cpu(int api
* This grunge runs the startup process for
* the targeted processor.
*/
- cpu_gdt_descr[cpu].address = __get_free_page(GFP_KERNEL|__GFP_ZERO);
-
atomic_set(&init_deasserted, 0);

Dprintk("Setting warm reset code and vector.\n");


Attachments:
gdt-hotplug (1.07 kB)