powerpc: Fix booke hugetlb preload code for PPC_MM_SLICES and 64-bit
This patch does 2 things: It corrects the code that determines the size to write into MAS1 for the PPC_MM_SLICES case (this originally came from David Gibson and I had incorrectly altered it), and it changes the methodolody used to calculate the size for !PPC_MM_SLICES to work for 64-bit as well as 32-bit. Signed-off-by: Becky Bruce <beckyb@kernel.crashing.org> Signed-off-by: David Gibson <david@gibson.dropbear.id.au> Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
This commit is contained in:
Родитель
97632e6fbe
Коммит
8c1674de2b
|
@ -45,23 +45,20 @@ void book3e_hugetlb_preload(struct mm_struct *mm, unsigned long ea, pte_t pte)
|
|||
unsigned long flags;
|
||||
|
||||
#ifdef CONFIG_PPC_FSL_BOOK3E
|
||||
int index, lz, ncams;
|
||||
struct vm_area_struct *vma;
|
||||
int index, ncams;
|
||||
#endif
|
||||
|
||||
if (unlikely(is_kernel_addr(ea)))
|
||||
return;
|
||||
|
||||
#ifdef CONFIG_PPC_MM_SLICES
|
||||
psize = mmu_get_tsize(get_slice_psize(mm, ea));
|
||||
tsize = mmu_get_psize(psize);
|
||||
psize = get_slice_psize(mm, ea);
|
||||
tsize = mmu_get_tsize(psize);
|
||||
shift = mmu_psize_defs[psize].shift;
|
||||
#else
|
||||
vma = find_vma(mm, ea);
|
||||
psize = vma_mmu_pagesize(vma); /* returns actual size in bytes */
|
||||
asm (PPC_CNTLZL "%0,%1" : "=r" (lz) : "r" (psize));
|
||||
shift = 31 - lz;
|
||||
tsize = 21 - lz;
|
||||
psize = vma_mmu_pagesize(find_vma(mm, ea));
|
||||
shift = __ilog2(psize);
|
||||
tsize = shift - 10;
|
||||
#endif
|
||||
|
||||
/*
|
||||
|
|
Загрузка…
Ссылка в новой задаче