diff options
author | Paul Mackerras <paulus@samba.org> | 2005-11-07 19:14:20 -0500 |
---|---|---|
committer | Paul Mackerras <paulus@samba.org> | 2005-11-07 19:14:20 -0500 |
commit | 24bfb00123e82a2e70bd115277d922438813515b (patch) | |
tree | 27328b8a5718e16d64e2d101f4b7ddcad5930aed /arch/powerpc/mm | |
parent | c6135234550ed89a6fd0e8cb229633967e41d649 (diff) | |
parent | 3f00d3e8fb963968a922d821a9a53b503b687e81 (diff) |
Merge ../linux-2.6
Diffstat (limited to 'arch/powerpc/mm')
-rw-r--r-- | arch/powerpc/mm/hash_utils_64.c | 6 | ||||
-rw-r--r-- | arch/powerpc/mm/hugetlbpage.c | 6 | ||||
-rw-r--r-- | arch/powerpc/mm/ppc_mmu_32.c | 4 | ||||
-rw-r--r-- | arch/powerpc/mm/slb_low.S | 13 |
4 files changed, 21 insertions, 8 deletions
diff --git a/arch/powerpc/mm/hash_utils_64.c b/arch/powerpc/mm/hash_utils_64.c index 37273f518a35..3d83c3b84f0e 100644 --- a/arch/powerpc/mm/hash_utils_64.c +++ b/arch/powerpc/mm/hash_utils_64.c | |||
@@ -328,12 +328,14 @@ static void __init htab_init_page_sizes(void) | |||
328 | */ | 328 | */ |
329 | if (mmu_psize_defs[MMU_PAGE_16M].shift) | 329 | if (mmu_psize_defs[MMU_PAGE_16M].shift) |
330 | mmu_huge_psize = MMU_PAGE_16M; | 330 | mmu_huge_psize = MMU_PAGE_16M; |
331 | /* With 4k/4level pagetables, we can't (for now) cope with a | ||
332 | * huge page size < PMD_SIZE */ | ||
331 | else if (mmu_psize_defs[MMU_PAGE_1M].shift) | 333 | else if (mmu_psize_defs[MMU_PAGE_1M].shift) |
332 | mmu_huge_psize = MMU_PAGE_1M; | 334 | mmu_huge_psize = MMU_PAGE_1M; |
333 | 335 | ||
334 | /* Calculate HPAGE_SHIFT and sanity check it */ | 336 | /* Calculate HPAGE_SHIFT and sanity check it */ |
335 | if (mmu_psize_defs[mmu_huge_psize].shift > 16 && | 337 | if (mmu_psize_defs[mmu_huge_psize].shift > MIN_HUGEPTE_SHIFT && |
336 | mmu_psize_defs[mmu_huge_psize].shift < 28) | 338 | mmu_psize_defs[mmu_huge_psize].shift < SID_SHIFT) |
337 | HPAGE_SHIFT = mmu_psize_defs[mmu_huge_psize].shift; | 339 | HPAGE_SHIFT = mmu_psize_defs[mmu_huge_psize].shift; |
338 | else | 340 | else |
339 | HPAGE_SHIFT = 0; /* No huge pages dude ! */ | 341 | HPAGE_SHIFT = 0; /* No huge pages dude ! */ |
diff --git a/arch/powerpc/mm/hugetlbpage.c b/arch/powerpc/mm/hugetlbpage.c index 0073a04047e4..426c269e552e 100644 --- a/arch/powerpc/mm/hugetlbpage.c +++ b/arch/powerpc/mm/hugetlbpage.c | |||
@@ -212,6 +212,12 @@ static int prepare_high_area_for_htlb(struct mm_struct *mm, unsigned long area) | |||
212 | 212 | ||
213 | BUG_ON(area >= NUM_HIGH_AREAS); | 213 | BUG_ON(area >= NUM_HIGH_AREAS); |
214 | 214 | ||
215 | /* Hack, so that each addresses is controlled by exactly one | ||
216 | * of the high or low area bitmaps, the first high area starts | ||
217 | * at 4GB, not 0 */ | ||
218 | if (start == 0) | ||
219 | start = 0x100000000UL; | ||
220 | |||
215 | /* Check no VMAs are in the region */ | 221 | /* Check no VMAs are in the region */ |
216 | vma = find_vma(mm, start); | 222 | vma = find_vma(mm, start); |
217 | if (vma && (vma->vm_start < end)) | 223 | if (vma && (vma->vm_start < end)) |
diff --git a/arch/powerpc/mm/ppc_mmu_32.c b/arch/powerpc/mm/ppc_mmu_32.c index d137abd241ff..ed7fcfe5fd37 100644 --- a/arch/powerpc/mm/ppc_mmu_32.c +++ b/arch/powerpc/mm/ppc_mmu_32.c | |||
@@ -188,9 +188,9 @@ void hash_preload(struct mm_struct *mm, unsigned long ea, | |||
188 | 188 | ||
189 | if (Hash == 0) | 189 | if (Hash == 0) |
190 | return; | 190 | return; |
191 | pmd = pmd_offset(pgd_offset(vma->vm_mm, address), address); | 191 | pmd = pmd_offset(pgd_offset(mm, ea), ea); |
192 | if (!pmd_none(*pmd)) | 192 | if (!pmd_none(*pmd)) |
193 | add_hash_page(vma->vm_mm->context, address, pmd_val(*pmd)); | 193 | add_hash_page(mm->context, ea, pmd_val(*pmd)); |
194 | } | 194 | } |
195 | 195 | ||
196 | /* | 196 | /* |
diff --git a/arch/powerpc/mm/slb_low.S b/arch/powerpc/mm/slb_low.S index 3e18241b6f35..950ffc5848c7 100644 --- a/arch/powerpc/mm/slb_low.S +++ b/arch/powerpc/mm/slb_low.S | |||
@@ -80,12 +80,17 @@ _GLOBAL(slb_miss_kernel_load_virtual) | |||
80 | BEGIN_FTR_SECTION | 80 | BEGIN_FTR_SECTION |
81 | b 1f | 81 | b 1f |
82 | END_FTR_SECTION_IFCLR(CPU_FTR_16M_PAGE) | 82 | END_FTR_SECTION_IFCLR(CPU_FTR_16M_PAGE) |
83 | cmpldi r10,16 | ||
84 | |||
85 | lhz r9,PACALOWHTLBAREAS(r13) | ||
86 | mr r11,r10 | ||
87 | blt 5f | ||
88 | |||
83 | lhz r9,PACAHIGHHTLBAREAS(r13) | 89 | lhz r9,PACAHIGHHTLBAREAS(r13) |
84 | srdi r11,r10,(HTLB_AREA_SHIFT-SID_SHIFT) | 90 | srdi r11,r10,(HTLB_AREA_SHIFT-SID_SHIFT) |
85 | srd r9,r9,r11 | 91 | |
86 | lhz r11,PACALOWHTLBAREAS(r13) | 92 | 5: srd r9,r9,r11 |
87 | srd r11,r11,r10 | 93 | andi. r9,r9,1 |
88 | or. r9,r9,r11 | ||
89 | beq 1f | 94 | beq 1f |
90 | _GLOBAL(slb_miss_user_load_huge) | 95 | _GLOBAL(slb_miss_user_load_huge) |
91 | li r11,0 | 96 | li r11,0 |