Index: kernel/arch/abs32le/include/arch/mm/page.h
===================================================================
--- kernel/arch/abs32le/include/arch/mm/page.h	(revision e98f1c3ecac2f8a34dd84930fa2b4ffe371c67ac)
+++ kernel/arch/abs32le/include/arch/mm/page.h	(revision dc05a9a597536a77b10988235cdf855c96b15084)
@@ -115,5 +115,5 @@
 /* Macros for querying the last level entries. */
 #define PTE_VALID_ARCH(p) \
-	(*((uint32_t *) (p)) != 0)
+	((p)->soft_valid != 0)
 #define PTE_PRESENT_ARCH(p) \
 	((p)->present != 0)
Index: kernel/arch/amd64/include/arch/mm/page.h
===================================================================
--- kernel/arch/amd64/include/arch/mm/page.h	(revision e98f1c3ecac2f8a34dd84930fa2b4ffe371c67ac)
+++ kernel/arch/amd64/include/arch/mm/page.h	(revision dc05a9a597536a77b10988235cdf855c96b15084)
@@ -131,5 +131,5 @@
 /* Macros for querying the last-level PTE entries. */
 #define PTE_VALID_ARCH(p) \
-	(*((uint64_t *) (p)) != 0)
+	((p)->soft_valid != 0)
 #define PTE_PRESENT_ARCH(p) \
 	((p)->present != 0)
Index: kernel/arch/arm32/include/arch/mm/page_armv4.h
===================================================================
--- kernel/arch/arm32/include/arch/mm/page_armv4.h	(revision e98f1c3ecac2f8a34dd84930fa2b4ffe371c67ac)
+++ kernel/arch/arm32/include/arch/mm/page_armv4.h	(revision dc05a9a597536a77b10988235cdf855c96b15084)
@@ -44,5 +44,5 @@
 /* Macros for querying the last-level PTE entries. */
 #define PTE_VALID_ARCH(pte) \
-	(*((uint32_t *) (pte)) != 0)
+	(((pte_t *) (pte))->l0.should_be_zero != 0 || PTE_PRESENT_ARCH(pte))
 #define PTE_PRESENT_ARCH(pte) \
 	(((pte_t *) (pte))->l0.descriptor_type != 0)
Index: kernel/arch/arm32/include/arch/mm/page_armv6.h
===================================================================
--- kernel/arch/arm32/include/arch/mm/page_armv6.h	(revision e98f1c3ecac2f8a34dd84930fa2b4ffe371c67ac)
+++ kernel/arch/arm32/include/arch/mm/page_armv6.h	(revision dc05a9a597536a77b10988235cdf855c96b15084)
@@ -44,5 +44,5 @@
 /* Macros for querying the last-level PTE entries. */
 #define PTE_VALID_ARCH(pte) \
-	(*((uint32_t *) (pte)) != 0)
+	(((pte_t *) (pte))->l0.should_be_zero_0 != 0 || PTE_PRESENT_ARCH(pte))
 #define PTE_PRESENT_ARCH(pte) \
 	(((pte_t *) (pte))->l0.descriptor_type != 0)
Index: kernel/arch/ia32/include/arch/mm/page.h
===================================================================
--- kernel/arch/ia32/include/arch/mm/page.h	(revision e98f1c3ecac2f8a34dd84930fa2b4ffe371c67ac)
+++ kernel/arch/ia32/include/arch/mm/page.h	(revision dc05a9a597536a77b10988235cdf855c96b15084)
@@ -132,5 +132,5 @@
 /* Macros for querying the last level entries. */
 #define PTE_VALID_ARCH(p) \
-	(*((uint32_t *) (p)) != 0)
+	((p)->soft_valid != 0)
 #define PTE_PRESENT_ARCH(p) \
 	((p)->present != 0)
Index: kernel/arch/mips32/include/arch/mm/page.h
===================================================================
--- kernel/arch/mips32/include/arch/mm/page.h	(revision e98f1c3ecac2f8a34dd84930fa2b4ffe371c67ac)
+++ kernel/arch/mips32/include/arch/mm/page.h	(revision dc05a9a597536a77b10988235cdf855c96b15084)
@@ -137,9 +137,9 @@
 
 /* Last-level info macros. */
-#define PTE_VALID_ARCH(pte)			(*((uint32_t *) (pte)) != 0)
-#define PTE_PRESENT_ARCH(pte)			((pte)->p != 0)
-#define PTE_GET_FRAME_ARCH(pte)			((pte)->pfn << 12)
-#define PTE_WRITABLE_ARCH(pte)			((pte)->w != 0)
-#define PTE_EXECUTABLE_ARCH(pte)		1
+#define PTE_VALID_ARCH(pte)		((pte)->soft_valid != 0)
+#define PTE_PRESENT_ARCH(pte)		((pte)->p != 0)
+#define PTE_GET_FRAME_ARCH(pte)		((pte)->pfn << 12)
+#define PTE_WRITABLE_ARCH(pte)		((pte)->w != 0)
+#define PTE_EXECUTABLE_ARCH(pte)	1
 
 #ifndef __ASM__
Index: kernel/arch/ppc32/include/arch/mm/page.h
===================================================================
--- kernel/arch/ppc32/include/arch/mm/page.h	(revision e98f1c3ecac2f8a34dd84930fa2b4ffe371c67ac)
+++ kernel/arch/ppc32/include/arch/mm/page.h	(revision dc05a9a597536a77b10988235cdf855c96b15084)
@@ -140,5 +140,5 @@
 
 /* Macros for querying the last-level PTEs. */
-#define PTE_VALID_ARCH(pte)       (*((uint32_t *) (pte)) != 0)
+#define PTE_VALID_ARCH(pte)       ((pte)->valid != 0)
 #define PTE_PRESENT_ARCH(pte)     ((pte)->present != 0)
 #define PTE_GET_FRAME_ARCH(pte)   ((pte)->pfn << 12)
Index: kernel/arch/sparc32/include/arch/mm/page.h
===================================================================
--- kernel/arch/sparc32/include/arch/mm/page.h	(revision e98f1c3ecac2f8a34dd84930fa2b4ffe371c67ac)
+++ kernel/arch/sparc32/include/arch/mm/page.h	(revision dc05a9a597536a77b10988235cdf855c96b15084)
@@ -129,5 +129,5 @@
 /* Macros for querying the last level entries. */
 #define PTE_VALID_ARCH(p) \
-	(*((uint32_t *) (p)) != 0)
+	((p)->et != PTE_ET_INVALID)
 #define PTE_PRESENT_ARCH(p) \
 	((p)->et != 0)
Index: kernel/genarch/include/genarch/mm/page_ht.h
===================================================================
--- kernel/genarch/include/genarch/mm/page_ht.h	(revision e98f1c3ecac2f8a34dd84930fa2b4ffe371c67ac)
+++ kernel/genarch/include/genarch/mm/page_ht.h	(revision dc05a9a597536a77b10988235cdf855c96b15084)
@@ -55,5 +55,5 @@
 
 /* Macros for querying page hash table PTEs. */
-#define PTE_VALID(pte)       ((pte) != NULL)
+#define PTE_VALID(pte)       ((void *) (pte) != NULL)
 #define PTE_PRESENT(pte)     ((pte)->p != 0)
 #define PTE_GET_FRAME(pte)   ((pte)->frame)
