Cleanup comments and fit setupkvm on same page as kmap, which aligns lots of other things

This commit is contained in:
Austin Clements 2011-09-02 14:34:29 -04:00
parent 14835ec987
commit 9e4272c14e

16
vm.c
View file

@ -92,10 +92,9 @@ mappages(pde_t *pgdir, void *va, uint size, uint pa,
// The mappings from logical to virtual are one to one (i.e., // The mappings from logical to virtual are one to one (i.e.,
// segmentation doesn't do anything). There is one page table per // segmentation doesn't do anything). There is one page table per
// process, plus one that's used when a CPU is not running any // process, plus one that's used when a CPU is not running any process
// process (kpgdir). A user process uses the same page table as // (kpgdir). A user process uses the same page table as the kernel; the
// the kernel; the page protection bits prevent it from using // page protection bits prevent it from accessing kernel memory.
// anything other than its memory.
// //
// setupkvm() and exec() set up every page table like this: // setupkvm() and exec() set up every page table like this:
// 0..KERNBASE: user memory (text+data+stack+heap), mapped to some free // 0..KERNBASE: user memory (text+data+stack+heap), mapped to some free
@ -108,10 +107,9 @@ mappages(pde_t *pgdir, void *va, uint size, uint pa,
// 0xfe000000..0: mapped direct (devices such as ioapic) // 0xfe000000..0: mapped direct (devices such as ioapic)
// //
// The kernel allocates memory for its heap and for user memory // The kernel allocates memory for its heap and for user memory
// between kernend and the end of physical memory (PHYSTOP). // between KERNBASE+end and the end of physical memory (PHYSTOP).
// The virtual address space of each user program includes the kernel // The user program sits in the bottom of the address space, and the
// (which is inaccessible in user mode). The user program sits in // kernel at the top at KERNBASE.
// the bottom of the address space, and the kernel at the top at KERNBASE.
static struct kmap { static struct kmap {
void *virt; void *virt;
uint phys_start; uint phys_start;
@ -134,14 +132,12 @@ setupkvm(char* (*alloc)(void))
if((pgdir = (pde_t*)alloc()) == 0) if((pgdir = (pde_t*)alloc()) == 0)
return 0; return 0;
memset(pgdir, 0, PGSIZE); memset(pgdir, 0, PGSIZE);
k = kmap;
if (p2v(PHYSTOP) > (void*)DEVSPACE) if (p2v(PHYSTOP) > (void*)DEVSPACE)
panic("PHYSTOP too high"); panic("PHYSTOP too high");
for(k = kmap; k < &kmap[NELEM(kmap)]; k++) for(k = kmap; k < &kmap[NELEM(kmap)]; k++)
if(mappages(pgdir, k->virt, k->phys_end - k->phys_start, if(mappages(pgdir, k->virt, k->phys_end - k->phys_start,
(uint)k->phys_start, k->perm, alloc) < 0) (uint)k->phys_start, k->perm, alloc) < 0)
return 0; return 0;
return pgdir; return pgdir;
} }