diff options
| author | asselism <asselism@mit.edu> | 2022-10-17 16:02:54 -0400 | 
|---|---|---|
| committer | asselism <asselism@mit.edu> | 2022-10-18 00:11:49 -0400 | 
| commit | 74c1eba516fdb0ec1a17b16be7e76613ccba92bf (patch) | |
| tree | 314bddca16a5e0a151c9375c4d580a28d090747d /kernel | |
| parent | 0802d56a9be156ab7228074cbf4da73c149fb911 (diff) | |
| download | xv6-labs-74c1eba516fdb0ec1a17b16be7e76613ccba92bf.tar.gz xv6-labs-74c1eba516fdb0ec1a17b16be7e76613ccba92bf.tar.bz2 xv6-labs-74c1eba516fdb0ec1a17b16be7e76613ccba92bf.zip | |
Made va and size page aligned in mappages
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/vm.c | 15 | 
1 files changed, 11 insertions, 4 deletions
| diff --git a/kernel/vm.c b/kernel/vm.c index 486945e..5c31e87 100644 --- a/kernel/vm.c +++ b/kernel/vm.c @@ -136,8 +136,9 @@ kvmmap(pagetable_t kpgtbl, uint64 va, uint64 pa, uint64 sz, int perm)  }  // Create PTEs for virtual addresses starting at va that refer to -// physical addresses starting at pa. va and size might not -// be page-aligned. Returns 0 on success, -1 if walk() couldn't +// physical addresses starting at pa. +// va and size MUST be page-aligned. +// Returns 0 on success, -1 if walk() couldn't  // allocate a needed page-table page.  int  mappages(pagetable_t pagetable, uint64 va, uint64 size, uint64 pa, int perm) @@ -145,11 +146,17 @@ mappages(pagetable_t pagetable, uint64 va, uint64 size, uint64 pa, int perm)    uint64 a, last;    pte_t *pte; +  if((va % PGSIZE) != 0) +    panic("mappages: va not aligned"); + +  if((size % PGSIZE) != 0) +    panic("mappages: size not aligned"); +    if(size == 0)      panic("mappages: size"); -  a = PGROUNDDOWN(va); -  last = PGROUNDDOWN(va + size - 1); +  a = va; +  last = va + size - PGSIZE;    for(;;){      if((pte = walk(pagetable, a, 1)) == 0)        return -1; | 
