Index: kernel/genarch/src/mm/as_ht.c
===================================================================
--- kernel/genarch/src/mm/as_ht.c	(revision c8e99bb315a5bcdd7baf9ad996e0c913004c1016)
+++ kernel/genarch/src/mm/as_ht.c	(revision ada559c5e94ba58f9ea3b263de2877127eba8873)
@@ -51,4 +51,5 @@
 static void ht_lock(as_t *, bool);
 static void ht_unlock(as_t *, bool);
+static bool ht_locked(as_t *);
 
 as_operations_t as_ht_operations = {
@@ -57,4 +58,5 @@
 	.page_table_lock = ht_lock,
 	.page_table_unlock = ht_unlock,
+	.page_table_locked = ht_locked,
 };
 
@@ -126,4 +128,16 @@
 }
 
+/** Test whether page tables are locked.
+ *
+ * @param as		Address space where the page tables belong.
+ *
+ * @return		True if the page tables belonging to the address soace
+ *			are locked, otherwise false.
+ */
+bool ht_locked(as_t *as)
+{
+	return (mutex_locked(&page_ht_lock) && mutex_locked(&as->lock));
+}
+
 /** @}
  */
Index: kernel/genarch/src/mm/as_pt.c
===================================================================
--- kernel/genarch/src/mm/as_pt.c	(revision c8e99bb315a5bcdd7baf9ad996e0c913004c1016)
+++ kernel/genarch/src/mm/as_pt.c	(revision ada559c5e94ba58f9ea3b263de2877127eba8873)
@@ -52,4 +52,5 @@
 static void pt_lock(as_t *, bool);
 static void pt_unlock(as_t *, bool);
+static bool pt_locked(as_t *);
 
 as_operations_t as_pt_operations = {
@@ -57,5 +58,6 @@
 	.page_table_destroy = ptl0_destroy,
 	.page_table_lock = pt_lock,
-	.page_table_unlock = pt_unlock
+	.page_table_unlock = pt_unlock,
+	.page_table_locked = pt_locked,
 };
 
@@ -146,4 +148,16 @@
 }
 
+/** Test whether page tables are locked.
+ *
+ * @param as		Address space where the page tables belong.
+ *
+ * @return		True if the page tables belonging to the address soace
+ *			are locked, otherwise false.
+ */
+bool pt_locked(as_t *as)
+{
+	return mutex_locked(&as->lock);
+}
+
 /** @}
  */
Index: kernel/generic/include/mm/as.h
===================================================================
--- kernel/generic/include/mm/as.h	(revision c8e99bb315a5bcdd7baf9ad996e0c913004c1016)
+++ kernel/generic/include/mm/as.h	(revision ada559c5e94ba58f9ea3b263de2877127eba8873)
@@ -147,4 +147,5 @@
 	void (* page_table_lock)(as_t *, bool);
 	void (* page_table_unlock)(as_t *, bool);
+	bool (* page_table_locked)(as_t *);
 } as_operations_t;
 
Index: kernel/generic/include/mm/page.h
===================================================================
--- kernel/generic/include/mm/page.h	(revision c8e99bb315a5bcdd7baf9ad996e0c913004c1016)
+++ kernel/generic/include/mm/page.h	(revision ada559c5e94ba58f9ea3b263de2877127eba8873)
@@ -52,4 +52,5 @@
 extern void page_table_lock(as_t *, bool);
 extern void page_table_unlock(as_t *, bool);
+extern bool page_table_locked(as_t *);
 extern void page_mapping_insert(as_t *, uintptr_t, uintptr_t, unsigned int);
 extern void page_mapping_remove(as_t *, uintptr_t);
Index: kernel/generic/src/mm/as.c
===================================================================
--- kernel/generic/src/mm/as.c	(revision c8e99bb315a5bcdd7baf9ad996e0c913004c1016)
+++ kernel/generic/src/mm/as.c	(revision ada559c5e94ba58f9ea3b263de2877127eba8873)
@@ -1293,4 +1293,19 @@
 }
 
+/** Test whether page tables are locked.
+ *
+ * @param as		Address space where the page tables belong.
+ *
+ * @return		True if the page tables belonging to the address soace
+ *			are locked, otherwise false.
+ */
+bool page_table_locked(as_t *as)
+{
+	ASSERT(as_operations);
+	ASSERT(as_operations->page_table_locked);
+
+	return as_operations->page_table_locked(as);
+}
+
 
 /** Find address space area and lock it.
