Index: arch/amd64/include/interrupt.h
===================================================================
--- arch/amd64/include/interrupt.h	(revision 874878ab8f4787b913b24462b16f625fbc977008)
+++ arch/amd64/include/interrupt.h	(revision bfb87dfa5a2db236f9520a16f8ba1d59d1d9c11c)
@@ -72,5 +72,4 @@
 extern void syscall(int n, void *stack);
 extern void tlb_shootdown_ipi(int n, void *stack);
-extern void wakeup_ipi(int n, void *stack);
 
 extern void trap_virtual_enable_irqs(__u16 irqmask);
Index: arch/amd64/include/mm/page.h
===================================================================
--- arch/amd64/include/mm/page.h	(revision 874878ab8f4787b913b24462b16f625fbc977008)
+++ arch/amd64/include/mm/page.h	(revision bfb87dfa5a2db236f9520a16f8ba1d59d1d9c11c)
@@ -102,5 +102,6 @@
 		1<<PAGE_READ_SHIFT |
 		p->writeable<<PAGE_WRITE_SHIFT |
-		(!p->no_execute)<<PAGE_EXEC_SHIFT
+		(!p->no_execute)<<PAGE_EXEC_SHIFT |
+		p->global<<PAGE_GLOBAL_SHIFT
 	);
 }
@@ -123,4 +124,5 @@
 	p->writeable = (flags & PAGE_WRITE) != 0;
 	p->no_execute = (flags & PAGE_EXEC) == 0;
+	p->global = (flags & PAGE_GLOBAL) != 0;
 }
 
Index: arch/amd64/src/amd64.c
===================================================================
--- arch/amd64/src/amd64.c	(revision 874878ab8f4787b913b24462b16f625fbc977008)
+++ arch/amd64/src/amd64.c	(revision bfb87dfa5a2db236f9520a16f8ba1d59d1d9c11c)
@@ -122,5 +122,4 @@
 		exc_register(VECTOR_TLB_SHOOTDOWN_IPI, "tlb_shootdown",
 			     tlb_shootdown_ipi);
-		exc_register(VECTOR_WAKEUP_IPI, "wakeup_ipi", wakeup_ipi);
 		#endif /* CONFIG_SMP */
 	}
Index: arch/amd64/src/interrupt.c
===================================================================
--- arch/amd64/src/interrupt.c	(revision 874878ab8f4787b913b24462b16f625fbc977008)
+++ arch/amd64/src/interrupt.c	(revision bfb87dfa5a2db236f9520a16f8ba1d59d1d9c11c)
@@ -142,9 +142,4 @@
 }
 
-void wakeup_ipi(int n, void *stack)
-{
-	trap_virtual_eoi();
-}
-
 void trap_virtual_enable_irqs(__u16 irqmask)
 {
Index: arch/amd64/src/mm/page.c
===================================================================
--- arch/amd64/src/mm/page.c	(revision 874878ab8f4787b913b24462b16f625fbc977008)
+++ arch/amd64/src/mm/page.c	(revision bfb87dfa5a2db236f9520a16f8ba1d59d1d9c11c)
@@ -42,4 +42,5 @@
 {
 	__address cur;
+	int flags;
 
 	if (config.cpu_active == 1) {
@@ -50,5 +51,8 @@
 		 */
 		for (cur = 0; cur < last_frame; cur += FRAME_SIZE) {
-			page_mapping_insert(AS_KERNEL, PA2KA(cur), cur, PAGE_CACHEABLE | PAGE_EXEC);
+			flags = PAGE_CACHEABLE | PAGE_EXEC;
+			if ((PA2KA(cur) >= config.base) && (PA2KA(cur) < config.base + config.kernel_size))
+				flags |= PAGE_GLOBAL;
+			page_mapping_insert(AS_KERNEL, PA2KA(cur), cur, flags);
 		}
 		exc_register(14, "page_fault", (iroutine)page_fault);
Index: arch/ia32/include/interrupt.h
===================================================================
--- arch/ia32/include/interrupt.h	(revision 874878ab8f4787b913b24462b16f625fbc977008)
+++ arch/ia32/include/interrupt.h	(revision bfb87dfa5a2db236f9520a16f8ba1d59d1d9c11c)
@@ -60,5 +60,4 @@
 #define VECTOR_SYSCALL			(IVT_FREEBASE+0)
 #define VECTOR_TLB_SHOOTDOWN_IPI	(IVT_FREEBASE+1)
-#define VECTOR_WAKEUP_IPI		(IVT_FREEBASE+2)
 
 extern void (* disable_irqs_function)(__u16 irqmask);
@@ -73,5 +72,4 @@
 extern void syscall(int n, void *stack);
 extern void tlb_shootdown_ipi(int n, void *stack);
-extern void wakeup_ipi(int n, void *stack);
 
 extern void trap_virtual_enable_irqs(__u16 irqmask);
Index: arch/ia32/include/mm/page.h
===================================================================
--- arch/ia32/include/mm/page.h	(revision 874878ab8f4787b913b24462b16f625fbc977008)
+++ arch/ia32/include/mm/page.h	(revision bfb87dfa5a2db236f9520a16f8ba1d59d1d9c11c)
@@ -86,5 +86,6 @@
 	unsigned accessed : 1;
 	unsigned dirty : 1;
-	unsigned : 2;
+	unsigned pat : 1;
+	unsigned global : 1;
 	unsigned avl : 3;
 	unsigned frame_address : 20;
@@ -101,5 +102,6 @@
 		1<<PAGE_READ_SHIFT |
 		p->writeable<<PAGE_WRITE_SHIFT |
-		1<<PAGE_EXEC_SHIFT
+		1<<PAGE_EXEC_SHIFT |
+		p->global<<PAGE_GLOBAL_SHIFT
 	);
 }
@@ -113,4 +115,5 @@
 	p->uaccessible = (flags & PAGE_USER) != 0;
 	p->writeable = (flags & PAGE_WRITE) != 0;
+	p->global = (flags & PAGE_GLOBAL) != 0;
 }
 
Index: arch/ia32/src/ia32.c
===================================================================
--- arch/ia32/src/ia32.c	(revision 874878ab8f4787b913b24462b16f625fbc977008)
+++ arch/ia32/src/ia32.c	(revision bfb87dfa5a2db236f9520a16f8ba1d59d1d9c11c)
@@ -66,5 +66,4 @@
 		exc_register(VECTOR_TLB_SHOOTDOWN_IPI, "tlb_shootdown",
 			     tlb_shootdown_ipi);
-		exc_register(VECTOR_WAKEUP_IPI, "wakeup_ipi", wakeup_ipi);
 		#endif /* CONFIG_SMP */
 	}
Index: arch/ia32/src/interrupt.c
===================================================================
--- arch/ia32/src/interrupt.c	(revision 874878ab8f4787b913b24462b16f625fbc977008)
+++ arch/ia32/src/interrupt.c	(revision bfb87dfa5a2db236f9520a16f8ba1d59d1d9c11c)
@@ -128,9 +128,4 @@
 }
 
-void wakeup_ipi(int n, void *stack)
-{
-	trap_virtual_eoi();
-}
-
 void trap_virtual_enable_irqs(__u16 irqmask)
 {
Index: arch/ia32/src/mm/page.c
===================================================================
--- arch/ia32/src/mm/page.c	(revision 874878ab8f4787b913b24462b16f625fbc977008)
+++ arch/ia32/src/mm/page.c	(revision bfb87dfa5a2db236f9520a16f8ba1d59d1d9c11c)
@@ -46,4 +46,5 @@
 {
 	__address cur;
+	int flags;
 
 	if (config.cpu_active == 1) {
@@ -53,6 +54,10 @@
 		 * PA2KA(identity) mapping for all frames until last_frame.
 		 */
-		for (cur = 0; cur < last_frame; cur += FRAME_SIZE)
-			page_mapping_insert(AS_KERNEL, PA2KA(cur), cur, PAGE_CACHEABLE);
+		for (cur = 0; cur < last_frame; cur += FRAME_SIZE) {
+			flags = PAGE_CACHEABLE;
+			if ((PA2KA(cur) >= config.base) && (PA2KA(cur) < config.base + config.kernel_size))
+				flags |= PAGE_GLOBAL;
+			page_mapping_insert(AS_KERNEL, PA2KA(cur), cur, flags);
+		}
 
 		exc_register(14, "page_fault", page_fault);
Index: arch/mips32/include/mm/page.h
===================================================================
--- arch/mips32/include/mm/page.h	(revision 874878ab8f4787b913b24462b16f625fbc977008)
+++ arch/mips32/include/mm/page.h	(revision bfb87dfa5a2db236f9520a16f8ba1d59d1d9c11c)
@@ -100,5 +100,6 @@
 		(1<<PAGE_READ_SHIFT) |
 		((p->w)<<PAGE_WRITE_SHIFT) |
-		(1<<PAGE_EXEC_SHIFT)
+		(1<<PAGE_EXEC_SHIFT) |
+		p->lo.g<<PAGE_GLOBAL_SHIFT
 	);
 		
@@ -111,4 +112,5 @@
 	p->lo.c = (flags & PAGE_CACHEABLE) != 0 ? PAGE_CACHEABLE_EXC_WRITE : PAGE_UNCACHED;
 	p->lo.v = !(flags & PAGE_NOT_PRESENT);
+	p->lo.g = (flags & PAGE_GLOBAL) != 0;
 	p->w = (flags & PAGE_WRITE) != 0;
 }
Index: contrib/conf/msim.conf
===================================================================
--- contrib/conf/msim.conf	(revision 874878ab8f4787b913b24462b16f625fbc977008)
+++ contrib/conf/msim.conf	(revision bfb87dfa5a2db236f9520a16f8ba1d59d1d9c11c)
@@ -6,7 +6,7 @@
 
 add rwm	firstmem        0x0             1M	load "/dev/zero"
-add rwm mainmem		0x00100000	16M	load "kernel.bin"
-add rom startmem	0x1fc00000	1k	load "load.bin" 
-add rwm init            0x20000000      1M      load "init
+add rwm mainmem		0x00100000	16M	load "kernel/kernel.bin"
+add rom startmem	0x1fc00000	1k	load "kernel/load.bin" 
+add rwm init            0x20000000      1M      load "uspace/init/init"
 
 add dprinter printer 0x10000000
