diff options
author | asselism <[email protected]> | 2022-10-17 16:02:54 -0400 |
---|---|---|
committer | asselism <[email protected]> | 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; |