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  }