From e0ba118b87a883485a93d5b4bff4781a381feb36 Mon Sep 17 00:00:00 2001 From: David Gibson Date: Mon, 26 Oct 2009 19:24:31 +0000 Subject: [PATCH] --- yaml --- r: 175711 b: refs/heads/master c: f71dc176aa06359681c30ba6877ffccab6fba3a6 h: refs/heads/master i: 175709: 01ffc36f5a8b20b958b0fb833cf37b30cc7d95cf 175707: b558d103475f97696c74268c17decdc1d2f2928c 175703: bac568c6df208e7216e9223ec96e2235fa00e25e 175695: be7044320501523f54716048b6be70846bec5d72 175679: 6dc6558886ace64fdeee6c6dcc79e0823624b59b v: v3 --- [refs] | 2 +- trunk/arch/powerpc/mm/hugetlbpage.c | 6 +----- trunk/arch/powerpc/mm/tlb_hash64.c | 8 +++----- 3 files changed, 5 insertions(+), 11 deletions(-) diff --git a/[refs] b/[refs] index ecf1a1035038..60cb15c2ae08 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 8be8cf5b47f72096e42bf88cc3afff7a942a346c +refs/heads/master: f71dc176aa06359681c30ba6877ffccab6fba3a6 diff --git a/trunk/arch/powerpc/mm/hugetlbpage.c b/trunk/arch/powerpc/mm/hugetlbpage.c index 90df6ffe3a43..3d542a9732ae 100644 --- a/trunk/arch/powerpc/mm/hugetlbpage.c +++ b/trunk/arch/powerpc/mm/hugetlbpage.c @@ -445,11 +445,7 @@ void set_huge_pte_at(struct mm_struct *mm, unsigned long addr, * necessary anymore if we make hpte_need_flush() get the * page size from the slices */ - unsigned int psize = get_slice_psize(mm, addr); - unsigned int shift = mmu_psize_to_shift(psize); - unsigned long sz = ((1UL) << shift); - struct hstate *hstate = size_to_hstate(sz); - pte_update(mm, addr & hstate->mask, ptep, ~0UL, 1); + pte_update(mm, addr, ptep, ~0UL, 1); } *ptep = __pte(pte_val(pte) & ~_PAGE_HPTEFLAGS); } diff --git a/trunk/arch/powerpc/mm/tlb_hash64.c b/trunk/arch/powerpc/mm/tlb_hash64.c index 2b2f35f6985e..282d9306361f 100644 --- a/trunk/arch/powerpc/mm/tlb_hash64.c +++ b/trunk/arch/powerpc/mm/tlb_hash64.c @@ -53,11 +53,6 @@ void hpte_need_flush(struct mm_struct *mm, unsigned long addr, i = batch->index; - /* We mask the address for the base page size. Huge pages will - * have applied their own masking already - */ - addr &= PAGE_MASK; - /* Get page size (maybe move back to caller). * * NOTE: when using special 64K mappings in 4K environment like @@ -75,6 +70,9 @@ void hpte_need_flush(struct mm_struct *mm, unsigned long addr, } else psize = pte_pagesize_index(mm, addr, pte); + /* Mask the address for the correct page size */ + addr &= ~((1UL << mmu_psize_defs[psize].shift) - 1); + /* Build full vaddr */ if (!is_kernel_addr(addr)) { ssize = user_segment_size(addr);