Index: kernel/arch/ia32/src/mm/page.c
===================================================================
--- kernel/arch/ia32/src/mm/page.c	(revision da1bafb8cf9a3b3be8ef21bc114daaa476a85190)
+++ kernel/arch/ia32/src/mm/page.c	(revision 0ac99db3cfe5485b8b7db65da7c3aaa474443d22)
@@ -61,4 +61,5 @@
 		 * PA2KA(identity) mapping for all frames until last_frame.
 		 */
+		page_table_lock(AS_KERNEL, true);
 		for (cur = 0; cur < last_frame; cur += FRAME_SIZE) {
 			flags = PAGE_CACHEABLE | PAGE_WRITE;
@@ -67,4 +68,5 @@
 			page_mapping_insert(AS_KERNEL, PA2KA(cur), cur, flags);
 		}
+		page_table_unlock(AS_KERNEL, true);
 		
 		exc_register(14, "page_fault", (iroutine) page_fault);
@@ -84,8 +86,10 @@
 	uintptr_t virtaddr = PA2KA(last_frame);
 	pfn_t i;
+	page_table_lock(AS_KERNEL, true);
 	for (i = 0; i < ADDR2PFN(ALIGN_UP(size, PAGE_SIZE)); i++) {
 		uintptr_t addr = PFN2ADDR(i);
 		page_mapping_insert(AS_KERNEL, virtaddr + addr, physaddr + addr, PAGE_NOT_CACHEABLE | PAGE_WRITE);
 	}
+	page_table_unlock(AS_KERNEL, true);
 	
 	last_frame = ALIGN_UP(last_frame + size, FRAME_SIZE);
Index: kernel/arch/ia32/src/smp/smp.c
===================================================================
--- kernel/arch/ia32/src/smp/smp.c	(revision da1bafb8cf9a3b3be8ef21bc114daaa476a85190)
+++ kernel/arch/ia32/src/smp/smp.c	(revision 0ac99db3cfe5485b8b7db65da7c3aaa474443d22)
@@ -83,9 +83,11 @@
 		panic("Cannot allocate address for io_apic.");
 
-	if (config.cpu_count > 1) {		
+	if (config.cpu_count > 1) {
+		page_table_lock(AS_KERNEL, true);
 		page_mapping_insert(AS_KERNEL, l_apic_address,
 		    (uintptr_t) l_apic, PAGE_NOT_CACHEABLE | PAGE_WRITE);
 		page_mapping_insert(AS_KERNEL, io_apic_address,
 		    (uintptr_t) io_apic, PAGE_NOT_CACHEABLE | PAGE_WRITE);
+		page_table_unlock(AS_KERNEL, true);
 				  
 		l_apic = (uint32_t *) l_apic_address;
