Index: kernel/genarch/include/mm/page_pt.h
===================================================================
--- kernel/genarch/include/mm/page_pt.h	(revision c263c77c4712f982349c184bbee4df2163f68baa)
+++ kernel/genarch/include/mm/page_pt.h	(revision d8de5d3d749b49ab697a28eee1fdad8386e9a50e)
@@ -129,5 +129,5 @@
 
 extern void page_mapping_insert_pt(as_t *, uintptr_t, uintptr_t, unsigned int);
-extern pte_t *page_mapping_find_pt(as_t *, uintptr_t);
+extern pte_t *page_mapping_find_pt(as_t *, uintptr_t, bool);
 
 #endif
Index: kernel/genarch/src/mm/page_ht.c
===================================================================
--- kernel/genarch/src/mm/page_ht.c	(revision c263c77c4712f982349c184bbee4df2163f68baa)
+++ kernel/genarch/src/mm/page_ht.c	(revision d8de5d3d749b49ab697a28eee1fdad8386e9a50e)
@@ -58,5 +58,5 @@
 static void ht_mapping_insert(as_t *, uintptr_t, uintptr_t, unsigned int);
 static void ht_mapping_remove(as_t *, uintptr_t);
-static pte_t *ht_mapping_find(as_t *, uintptr_t);
+static pte_t *ht_mapping_find(as_t *, uintptr_t, bool);
 
 /**
@@ -214,5 +214,5 @@
  * this call visible.
  *
- * @param as   Address space to wich page belongs.
+ * @param as   Address space to which page belongs.
  * @param page Virtual address of the page to be demapped.
  *
@@ -237,13 +237,12 @@
 /** Find mapping for virtual page in page hash table.
  *
- * Find mapping for virtual page.
- *
- * @param as   Address space to wich page belongs.
- * @param page Virtual page.
+ * @param as     Address space to which page belongs.
+ * @param page   Virtual page.
+ * @param nolock True if the page tables need not be locked.
  *
  * @return NULL if there is no such mapping; requested mapping otherwise.
  *
  */
-pte_t *ht_mapping_find(as_t *as, uintptr_t page)
+pte_t *ht_mapping_find(as_t *as, uintptr_t page, bool nolock)
 {
 	sysarg_t key[2] = {
@@ -252,5 +251,5 @@
 	};
 
-	ASSERT(page_table_locked(as));
+	ASSERT(nolock || page_table_locked(as));
 	
 	link_t *cur = hash_table_find(&page_ht, key);
Index: kernel/genarch/src/mm/page_pt.c
===================================================================
--- kernel/genarch/src/mm/page_pt.c	(revision c263c77c4712f982349c184bbee4df2163f68baa)
+++ kernel/genarch/src/mm/page_pt.c	(revision d8de5d3d749b49ab697a28eee1fdad8386e9a50e)
@@ -48,5 +48,5 @@
 static void pt_mapping_insert(as_t *, uintptr_t, uintptr_t, unsigned int);
 static void pt_mapping_remove(as_t *, uintptr_t);
-static pte_t *pt_mapping_find(as_t *, uintptr_t);
+static pte_t *pt_mapping_find(as_t *, uintptr_t, bool);
 
 page_mapping_operations_t pt_mapping_operations = {
@@ -238,8 +238,7 @@
 /** Find mapping for virtual page in hierarchical page tables.
  *
- * Find mapping for virtual page.
- *
- * @param as   Address space to which page belongs.
- * @param page Virtual page.
+ * @param as     Address space to which page belongs.
+ * @param page   Virtual page.
+ * @param nolock True if the page tables need not be locked.
  *
  * @return NULL if there is no such mapping; entry from PTL3 describing
@@ -247,7 +246,7 @@
  *
  */
-pte_t *pt_mapping_find(as_t *as, uintptr_t page)
+pte_t *pt_mapping_find(as_t *as, uintptr_t page, bool nolock)
 {
-	ASSERT(page_table_locked(as));
+	ASSERT(nolock || page_table_locked(as));
 
 	pte_t *ptl0 = (pte_t *) PA2KA((uintptr_t) as->genarch.page_table);
