diff options
author | David Gibson <david@gibson.dropbear.id.au> | 2008-10-12 13:54:24 -0400 |
---|---|---|
committer | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2008-10-13 19:35:27 -0400 |
commit | f5ea64dcbad89875d130596df14c9b25d994a737 (patch) | |
tree | 03bde08104ea5c29edcaafc11576eb5594a7426c /arch/powerpc/mm/gup.c | |
parent | cd301c7ba4bbb5a0ee6ebf13eb4a304f29b13847 (diff) |
powerpc: Get USE_STRICT_MM_TYPECHECKS working again
The typesafe version of the powerpc pagetable handling (with
USE_STRICT_MM_TYPECHECKS defined) has bitrotted again. This patch
makes a bunch of small fixes to get it back to building status.
It's still not enabled by default as gcc still generates worse
code with it for some reason.
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Diffstat (limited to 'arch/powerpc/mm/gup.c')
-rw-r--r-- | arch/powerpc/mm/gup.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/arch/powerpc/mm/gup.c b/arch/powerpc/mm/gup.c index 9fdf4d6335e4..28a114db3ba0 100644 --- a/arch/powerpc/mm/gup.c +++ b/arch/powerpc/mm/gup.c | |||
@@ -41,7 +41,7 @@ static noinline int gup_pte_range(pmd_t pmd, unsigned long addr, | |||
41 | page = pte_page(pte); | 41 | page = pte_page(pte); |
42 | if (!page_cache_get_speculative(page)) | 42 | if (!page_cache_get_speculative(page)) |
43 | return 0; | 43 | return 0; |
44 | if (unlikely(pte != *ptep)) { | 44 | if (unlikely(pte_val(pte) != pte_val(*ptep))) { |
45 | put_page(page); | 45 | put_page(page); |
46 | return 0; | 46 | return 0; |
47 | } | 47 | } |
@@ -92,7 +92,7 @@ static noinline int gup_huge_pte(pte_t *ptep, struct hstate *hstate, | |||
92 | *nr -= refs; | 92 | *nr -= refs; |
93 | return 0; | 93 | return 0; |
94 | } | 94 | } |
95 | if (unlikely(pte != *ptep)) { | 95 | if (unlikely(pte_val(pte) != pte_val(*ptep))) { |
96 | /* Could be optimized better */ | 96 | /* Could be optimized better */ |
97 | while (*nr) { | 97 | while (*nr) { |
98 | put_page(page); | 98 | put_page(page); |
@@ -237,7 +237,8 @@ int get_user_pages_fast(unsigned long start, int nr_pages, int write, | |||
237 | pgd_t pgd = *pgdp; | 237 | pgd_t pgd = *pgdp; |
238 | 238 | ||
239 | VM_BUG_ON(shift != mmu_psize_defs[get_slice_psize(mm, addr)].shift); | 239 | VM_BUG_ON(shift != mmu_psize_defs[get_slice_psize(mm, addr)].shift); |
240 | pr_debug(" %016lx: normal pgd %p\n", addr, (void *)pgd); | 240 | pr_debug(" %016lx: normal pgd %p\n", addr, |
241 | (void *)pgd_val(pgd)); | ||
241 | next = pgd_addr_end(addr, end); | 242 | next = pgd_addr_end(addr, end); |
242 | if (pgd_none(pgd)) | 243 | if (pgd_none(pgd)) |
243 | goto slow; | 244 | goto slow; |