powerpc/mm: Fix pte_pagesize_index() crash on 4K w/64K hash
[firefly-linux-kernel-4.4.55.git] / arch / powerpc / include / asm / pgtable-ppc64.h
index 3bb7488bd24b19aa76dce072b0d3b1710beb46d3..7ee2300ee392ae3f31bc43a12420ab06a7493396 100644 (file)
 #define pte_iterate_hashed_end() } while(0)
 
 #ifdef CONFIG_PPC_HAS_HASH_64K
-#define pte_pagesize_index(mm, addr, pte)      get_slice_psize(mm, addr)
+/*
+ * We expect this to be called only for user addresses or kernel virtual
+ * addresses other than the linear mapping.
+ */
+#define pte_pagesize_index(mm, addr, pte)                      \
+       ({                                                      \
+               unsigned int psize;                             \
+               if (is_kernel_addr(addr))                       \
+                       psize = MMU_PAGE_4K;                    \
+               else                                            \
+                       psize = get_slice_psize(mm, addr);      \
+               psize;                                          \
+       })
 #else
 #define pte_pagesize_index(mm, addr, pte)      MMU_PAGE_4K
 #endif