kern
diff src/vm.c @ 19:8be069e6bb05
I think I'm done with the physical memory page allocator
author | John Tsiombikas <nuclear@member.fsf.org> |
---|---|
date | Wed, 30 Mar 2011 22:42:16 +0300 |
parents | 096807345aa2 |
children | 7ece008f09c5 |
line diff
1.1 --- a/src/vm.c Sun Mar 27 06:28:26 2011 +0300 1.2 +++ b/src/vm.c Wed Mar 30 22:42:16 2011 +0300 1.3 @@ -29,13 +29,16 @@ 1.4 1.5 void init_vm(struct mboot_info *mb) 1.6 { 1.7 + uint32_t idmap_end; 1.8 + 1.9 init_mem(mb); 1.10 1.11 pgdir = (uint32_t*)alloc_phys_page(); 1.12 memset(pgdir, 0, sizeof pgdir); 1.13 1.14 /* map the video memory and kernel code 1-1 */ 1.15 - map_mem_range(IDMAP_START, MAX_BRK - IDMAP_START, IDMAP_START, 0); 1.16 + get_kernel_mem_range(0, &idmap_end); 1.17 + map_mem_range(IDMAP_START, idmap_end - IDMAP_START, IDMAP_START, 0); 1.18 1.19 interrupt(PAGEFAULT, pgfault); 1.20 1.21 @@ -109,28 +112,6 @@ 1.22 map_page_range(vpg_start, num_pages, ppg_start, attr); 1.23 } 1.24 1.25 - 1.26 -/* if(mb->flags & MB_MMAP) { 1.27 - struct mboot_mmap *mem, *mmap_end; 1.28 - 1.29 - mem = mb->mmap; 1.30 - mmap_end = (struct mboot_mmap*)((char*)mb->mmap + mb->mmap_len); 1.31 - 1.32 - printf("memory map:\n"); 1.33 - while(mem < mmap_end) { 1.34 - unsigned int end = mem->base_low + mem->length_low; 1.35 - char *type = mem->type == MB_MEM_VALID ? "free:" : "hole:"; 1.36 - 1.37 - printf(" %s %x - %x (%u bytes)\n", type, mem->base_low, end, mem->length_low); 1.38 - mem = (struct mboot_mmap*)((char*)mem + mem->skip + sizeof mem->skip); 1.39 - } 1.40 - } 1.41 - 1.42 - if(mb->flags & MB_MEM) { 1.43 - printf("lower memory: %ukb, upper mem: %ukb\n", mb->mem_lower, mb->mem_upper); 1.44 - } 1.45 -*/ 1.46 - 1.47 uint32_t virt_to_phys(uint32_t vaddr) 1.48 { 1.49 uint32_t pgaddr, *pgtbl; 1.50 @@ -166,4 +147,6 @@ 1.51 } else { 1.52 printf("page not present\n"); 1.53 } 1.54 + 1.55 + panic("unhandled page fault\n"); 1.56 }