Index: arch/ia32/include/pm.h
===================================================================
--- arch/ia32/include/pm.h	(revision ab08b4244b9dfd556f4d25b75dd22cb1192d66b9)
+++ arch/ia32/include/pm.h	(revision 6401f798390c8c31e0c845e43f1234b628831f35)
@@ -130,4 +130,6 @@
 
 extern struct ptr_16_32 gdtr;
+extern struct ptr_16_32 bsp_bootstrap_gdtr;
+extern struct ptr_16_32 ap_bootstrap_gdtr;
 extern struct tss *tss_p;
 
Index: arch/ia32/src/pm.c
===================================================================
--- arch/ia32/src/pm.c	(revision ab08b4244b9dfd556f4d25b75dd22cb1192d66b9)
+++ arch/ia32/src/pm.c	(revision 6401f798390c8c31e0c845e43f1234b628831f35)
@@ -173,5 +173,6 @@
 	 * Update addresses in GDT and IDT to their virtual counterparts.
 	 */
-	gdtr.base = (__address) gdt;
+	if (config.cpu_active == 1)
+		gdtr.base = (__address) gdt;
 	idtr.base = (__address) idt;
 	__asm__ volatile ("lgdt %0\n" : : "m" (gdtr));
Index: arch/ia32/src/smp/smp.c
===================================================================
--- arch/ia32/src/smp/smp.c	(revision ab08b4244b9dfd556f4d25b75dd22cb1192d66b9)
+++ arch/ia32/src/smp/smp.c	(revision 6401f798390c8c31e0c845e43f1234b628831f35)
@@ -86,5 +86,5 @@
 	__address src, dst;
 	int i;
-
+	
 	ASSERT(ops != NULL);
 
@@ -142,5 +142,6 @@
 		memcpy(gdt_new, gdt, GDT_ITEMS*sizeof(struct descriptor));
 		memsetb((__address)(&gdt_new[TSS_DES]), sizeof(struct descriptor), 0);
-		gdtr.base = KA2PA((__address) gdt_new);
+		ap_bootstrap_gdtr.base = KA2PA((__address) gdt_new);
+		gdtr.base = (__address) gdt_new;
 
 		if (l_apic_send_init_ipi(ops->cpu_apic_id(i))) {
