|
@@ -344,7 +344,8 @@ static inline void set_pte(pte_t *ptep, pte_t pte)
|
|
|
#define pte_special(pte) ((pte).pte_low & _PAGE_SPECIAL)
|
|
|
|
|
|
#ifdef CONFIG_X2TLB
|
|
|
-#define pte_write(pte) ((pte).pte_high & _PAGE_EXT_USER_WRITE)
|
|
|
+#define pte_write(pte) \
|
|
|
+ ((pte).pte_high & (_PAGE_EXT_USER_WRITE | _PAGE_EXT_KERN_WRITE))
|
|
|
#else
|
|
|
#define pte_write(pte) ((pte).pte_low & _PAGE_RW)
|
|
|
#endif
|
|
@@ -358,7 +359,7 @@ static inline pte_t pte_##fn(pte_t pte) { pte.pte_##h op; return pte; }
|
|
|
* individually toggled (and user permissions are entirely decoupled from
|
|
|
* kernel permissions), we attempt to couple them a bit more sanely here.
|
|
|
*/
|
|
|
-PTE_BIT_FUNC(high, wrprotect, &= ~_PAGE_EXT_USER_WRITE);
|
|
|
+PTE_BIT_FUNC(high, wrprotect, &= ~(_PAGE_EXT_USER_WRITE | _PAGE_EXT_KERN_WRITE));
|
|
|
PTE_BIT_FUNC(high, mkwrite, |= _PAGE_EXT_USER_WRITE | _PAGE_EXT_KERN_WRITE);
|
|
|
PTE_BIT_FUNC(high, mkhuge, |= _PAGE_SZHUGE);
|
|
|
#else
|