powerpc/mm: Make hpte_need_flush() correctly mask for multiple page sizes
Currently, hpte_need_flush() only correctly flushes the given address for normal pages. Callers for hugepages are required to mask the address themselves. But hpte_need_flush() already looks up the page sizes for its own reasons, so this is a rather silly imposition on the callers. This patch alters it to mask based on the pagesize it has looked up itself, and removes the awkward masking code in the hugepage caller. Signed-off-by: David Gibson <dwg@au1.ibm.com> Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
This commit is contained in:
committed by
Benjamin Herrenschmidt
parent
8be8cf5b47
commit
f71dc176aa
@ -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);
|
||||
}
|
||||
|
Reference in New Issue
Block a user