diff options
author | Eugene Surovegin <ebs@ebshome.net> | 2006-03-28 13:13:12 -0500 |
---|---|---|
committer | Paul Mackerras <paulus@samba.org> | 2006-03-28 21:44:15 -0500 |
commit | bab70a4af737f623de5b034976a311055308ab86 (patch) | |
tree | f8c0e9463de01323db2cb1a62f4eb83adb5ce7ca /include/asm-ppc | |
parent | bac30d1a78d0f11c613968fc8b351a91ed465386 (diff) |
[PATCH] lock PTE before updating it in 440/BookE page fault handler
Fix 44x and BookE page fault handler to correctly lock PTE before
trying to pte_update() it, otherwise this PTE might be swapped out
after pte_present() check but before pte_uptdate() call, resulting in
corrupted PTE. This can happen with enabled preemption and low memory
condition.
Signed-off-by: Eugene Surovegin <ebs@ebshome.net>
Signed-off-by: Paul Mackerras <paulus@samba.org>
Diffstat (limited to 'include/asm-ppc')
-rw-r--r-- | include/asm-ppc/pgtable.h | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/include/asm-ppc/pgtable.h b/include/asm-ppc/pgtable.h index e1c62da12e74..570b355162fa 100644 --- a/include/asm-ppc/pgtable.h +++ b/include/asm-ppc/pgtable.h | |||
@@ -837,7 +837,8 @@ static inline int io_remap_pfn_range(struct vm_area_struct *vma, | |||
837 | */ | 837 | */ |
838 | #define pgtable_cache_init() do { } while (0) | 838 | #define pgtable_cache_init() do { } while (0) |
839 | 839 | ||
840 | extern int get_pteptr(struct mm_struct *mm, unsigned long addr, pte_t **ptep); | 840 | extern int get_pteptr(struct mm_struct *mm, unsigned long addr, pte_t **ptep, |
841 | pmd_t **pmdp); | ||
841 | 842 | ||
842 | #include <asm-generic/pgtable.h> | 843 | #include <asm-generic/pgtable.h> |
843 | 844 | ||