User: Password:
Subscribe / Log in / New account

[62/93] sh: Couple kernel and user write page perm bits for CONFIG_X2TLB

From:  Greg KH <>
Subject:  [62/93] sh: Couple kernel and user write page perm bits for CONFIG_X2TLB
Date:  Fri, 19 Feb 2010 08:29:55 -0800
Cc:,,,, Matt Fleming <>, Paul Mundt <>
Archive-link:  Article, Thread

2.6.32-stable review patch.  If anyone has any objections, please let us know.


From: Matt Fleming <>

commit fcb4ebd678858850e8b029909064175cb627868d upstream.

pte_write() should check whether the permissions include either the user
or kernel write permission bits. Likewise, pte_wrprotect() needs to
remove both the kernel and user write bits.

Without this patch handle_tlbmiss() doesn't handle faulting in pages
from the P3 area (our vmalloc space) because of a write. Mappings of the
P3 space have the _PAGE_EXT_KERN_WRITE bit but not _PAGE_EXT_USER_WRITE.

Signed-off-by: Matt Fleming <>
Signed-off-by: Paul Mundt <>
Signed-off-by: Greg Kroah-Hartman <>

 arch/sh/include/asm/pgtable_32.h |    5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

--- a/arch/sh/include/asm/pgtable_32.h
+++ b/arch/sh/include/asm/pgtable_32.h
@@ -344,7 +344,8 @@ static inline void set_pte(pte_t *ptep,
 #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))
 #define pte_write(pte)		((pte).pte_low & _PAGE_RW)
@@ -358,7 +359,7 @@ static inline pte_t pte_##fn(pte_t 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, mkhuge, |= _PAGE_SZHUGE);

(Log in to post comments)

Copyright © 2010, Eklektix, Inc.
Comments and public postings are copyrighted by their creators.
Linux is a registered trademark of Linus Torvalds