summaryrefslogtreecommitdiffstats
path: root/arch/i386/mm
diff options
context:
space:
mode:
authorRalf Baechle <ralf@linux-mips.org>2000-02-24 00:12:35 +0000
committerRalf Baechle <ralf@linux-mips.org>2000-02-24 00:12:35 +0000
commit482368b1a8e45430672c58c9a42e7d2004367126 (patch)
treece2a1a567d4d62dee7c2e71a46a99cf72cf1d606 /arch/i386/mm
parente4d0251c6f56ab2e191afb70f80f382793e23f74 (diff)
Merge with 2.3.47. Guys, this is buggy as shit. You've been warned.
Diffstat (limited to 'arch/i386/mm')
-rw-r--r--arch/i386/mm/init.c25
1 files changed, 14 insertions, 11 deletions
diff --git a/arch/i386/mm/init.c b/arch/i386/mm/init.c
index 4ef25674f..c3991b056 100644
--- a/arch/i386/mm/init.c
+++ b/arch/i386/mm/init.c
@@ -307,27 +307,30 @@ static void __init pagetable_init(void)
pmd_t *pmd;
pte_t *pte;
int i, j, k;
- unsigned long vaddr;
- unsigned long end = (unsigned long)__va(max_low_pfn*PAGE_SIZE);
+ unsigned long vaddr, end;
- pgd_base = swapper_pg_dir;
+ end = (unsigned long)__va(max_low_pfn*PAGE_SIZE) - 1;
- vaddr = PAGE_OFFSET;
- i = __pgd_offset(vaddr);
+ i = __pgd_offset(PAGE_OFFSET);
+ pgd_base = swapper_pg_dir;
pgd = pgd_base + i;
- for (; (i < PTRS_PER_PGD) && (vaddr <= end); pgd++, i++) {
+ for (; i < PTRS_PER_PGD; pgd++, i++) {
vaddr = i*PGDIR_SIZE;
+ if (vaddr >= end)
+ break;
#if CONFIG_X86_PAE
- pmd = (pmd_t *) alloc_bootmem_low_pages(PAGE_SIZE);
+ pmd = (pmd_t *) alloc_bootmem_pages(PAGE_SIZE);
set_pgd(pgd, __pgd(__pa(pmd) + 0x1));
#else
pmd = (pmd_t *)pgd;
#endif
if (pmd != pmd_offset(pgd, 0))
BUG();
- for (j = 0; (j < PTRS_PER_PMD) && (vaddr <= end); pmd++, j++) {
+ for (j = 0; j < PTRS_PER_PMD; pmd++, j++) {
vaddr = i*PGDIR_SIZE + j*PMD_SIZE;
+ if (vaddr >= end)
+ break;
if (cpu_has_pse) {
unsigned long __pe;
@@ -349,10 +352,10 @@ static void __init pagetable_init(void)
if (pte != pte_offset(pmd, 0))
BUG();
- for (k = 0;
- (k < PTRS_PER_PTE) && (vaddr <= end);
- pte++, k++) {
+ for (k = 0; k < PTRS_PER_PTE; pte++, k++) {
vaddr = i*PGDIR_SIZE + j*PMD_SIZE + k*PAGE_SIZE;
+ if (vaddr >= end)
+ break;
*pte = mk_pte_phys(__pa(vaddr), PAGE_KERNEL);
}
}