#define pte_mkwrite_novma pte_mkwrite_novma
 
-static inline bool pte_user(pte_t pte)
-{
-       return !(pte_val(pte) & _PAGE_SH);
-}
-
-#define pte_user pte_user
-
 static inline pte_t pte_mkhuge(pte_t pte)
 {
        return __pte(pte_val(pte) | _PAGE_SPS | _PAGE_HUGE);
 
        return pte_val(pte) & _PAGE_WRITE;
 }
 #endif
-#ifndef pte_read
-static inline int pte_read(pte_t pte)          { return 1; }
-#endif
 static inline int pte_dirty(pte_t pte)         { return pte_val(pte) & _PAGE_DIRTY; }
 static inline int pte_special(pte_t pte)       { return pte_val(pte) & _PAGE_SPECIAL; }
 static inline int pte_none(pte_t pte)          { return (pte_val(pte) & ~_PTE_NONE_MASK) == 0; }
  * and PTE_64BIT, PAGE_KERNEL_X contains _PAGE_BAP_SR which is also in
  * _PAGE_USER.  Need to explicitly match _PAGE_BAP_UR bit in that case too.
  */
-#ifndef pte_user
-static inline bool pte_user(pte_t pte)
+#ifndef pte_read
+static inline bool pte_read(pte_t pte)
 {
+#ifdef _PAGE_READ
+       return (pte_val(pte) & _PAGE_READ) == _PAGE_READ;
+#else
        return (pte_val(pte) & _PAGE_USER) == _PAGE_USER;
+#endif
 }
 #endif
 
         * A read-only access is controlled by _PAGE_USER bit.
         * We have _PAGE_READ set for WRITE and EXECUTE
         */
-       if (!pte_present(pte) || !pte_user(pte) || !pte_read(pte))
+       if (!pte_present(pte) || !pte_read(pte))
                return false;
 
        if (write && !pte_write(pte))
 
        if (pte_write(pte))
                pte = pte_mkdirty(pte);
 
-       /* we don't want to let _PAGE_USER leak out */
-       if (WARN_ON(pte_user(pte)))
-               return NULL;
-
        if (iowa_is_active())
                return iowa_ioremap(addr, size, pte_pgprot(pte), caller);
        return __ioremap_caller(addr, size, pte_pgprot(pte), caller);