From de40730dad816ab576f64bf02041bcf812c929e9 Mon Sep 17 00:00:00 2001 From: Frans Kaashoek Date: Mon, 26 Jul 2010 08:10:02 -0400 Subject: [PATCH] more cleanup --- vm.c | 44 ++++++++++++-------------------------------- 1 file changed, 12 insertions(+), 32 deletions(-) diff --git a/vm.c b/vm.c index 8064ca2..5f74079 100644 --- a/vm.c +++ b/vm.c @@ -25,32 +25,14 @@ #define PHYSTOP 0x300000 #define USERTOP 0xA0000 -static uint kerntext; // Linker start kernel at 1MB +static uint kerntext; // Linker starts kernel at 1MB static uint kerntsz; static uint kerndata; static uint kerndsz; static uint kernend; static uint freesz; - pde_t *kpgdir; // One kernel page table for scheduler procs -void -printstack() -{ - uint *ebp = (uint *) rebp(); - uint i; - cprintf("kernel stack: 0x%x\n", ebp); - while (ebp) { - if (ebp < (uint *) kerntext) // don't follow user ebp - return; - cprintf(" ebp %x saved ebp %x eip %x args", ebp, ebp[0], ebp[1]); - for (i = 0; i < 4; i++) - cprintf(" %x", ebp[2+i]); - cprintf("\n"); - ebp = (uint *) ebp[0]; - } -} - void printpgdir(pde_t *pgdir) { @@ -99,19 +81,15 @@ walkpgdir(pde_t *pgdir, const void *va, int create) } static int -mappages(pde_t *pgdir, void *la, uint size, uint pa, int perm, int p) +mappages(pde_t *pgdir, void *la, uint size, uint pa, int perm) { uint i; pte_t *pte; - if (p) - cprintf("mappages: pgdir 0x%x la 0x%x sz %d(0x%x) pa 0x%x, perm 0x%x\n", - pgdir, la, size, size, pa, perm); for (i = 0; i < size; i += PGSIZE) { if (!(pte = walkpgdir(pgdir, (void*)(la + i), 1))) return 0; *pte = (pa + i) | perm | PTE_P; - if (p) cprintf("mappages 0x%x 0x%x pp %d\n", la+i, *pte, PPN(*pte)); } return 1; } @@ -178,19 +156,19 @@ setupkvm(void) return 0; memset(pgdir, 0, PGSIZE); // Map IO space from 640K to 1Mbyte - if (!mappages(pgdir, (void *)USERTOP, 0x60000, USERTOP, PTE_W, 0)) + if (!mappages(pgdir, (void *)USERTOP, 0x60000, USERTOP, PTE_W)) return 0; // Map kernel text from kern text addr read-only - if (!mappages(pgdir, (void *) kerntext, kerntsz, kerntext, 0, 0)) + if (!mappages(pgdir, (void *) kerntext, kerntsz, kerntext, 0)) return 0; // Map kernel data form kern data addr R/W - if (!mappages(pgdir, (void *) kerndata, kerndsz, kerndata, PTE_W, 0)) + if (!mappages(pgdir, (void *) kerndata, kerndsz, kerndata, PTE_W)) return 0; // Map dynamically-allocated memory read/write (kernel stacks, user mem) - if (!mappages(pgdir, (void *) kernend, freesz, PADDR(kernend), PTE_W, 0)) + if (!mappages(pgdir, (void *) kernend, freesz, PADDR(kernend), PTE_W)) return 0; // Map devices such as ioapic, lapic, ... - if (!mappages(pgdir, (void *)0xFE000000, 0x2000000, 0xFE000000, PTE_W, 0)) + if (!mappages(pgdir, (void *)0xFE000000, 0x2000000, 0xFE000000, PTE_W)) return 0; return pgdir; } @@ -218,7 +196,7 @@ allocuvm(pde_t *pgdir, char *addr, uint sz) return 0; } memset(mem, 0, PGSIZE); - mappages(pgdir, addr + i, PGSIZE, PADDR(mem), PTE_W|PTE_U, 0); + mappages(pgdir, addr + i, PGSIZE, PADDR(mem), PTE_W|PTE_U); } return 1; } @@ -304,12 +282,13 @@ copyuvm(pde_t *pgdir, uint sz) if (!(mem = kalloc(PGSIZE))) return 0; memmove(mem, (char *)pa, PGSIZE); - if (!mappages(d, (void *)i, PGSIZE, PADDR(mem), PTE_W|PTE_U, 0)) + if (!mappages(d, (void *)i, PGSIZE, PADDR(mem), PTE_W|PTE_U)) return 0; } return d; } +// Gather about physical memory layout. Called once during boot. void pminit(void) { @@ -345,7 +324,8 @@ jkstack(void) jstack((uint) top); } -// Allocate one page table for the machine for the kernel address space +// Allocate one page table for the machine for the kernel address +// space for scheduler processes. void kvmalloc(void) {