diff options
Diffstat (limited to 'pk/mmap.c')
-rw-r--r-- | pk/mmap.c | 3 |
1 files changed, 2 insertions, 1 deletions
@@ -175,6 +175,7 @@ static int __handle_page_fault(uintptr_t vaddr, int prot) else if (!(*pte & PTE_V)) { uintptr_t ppn = vpn + (first_free_paddr / RISCV_PGSIZE); + uintptr_t kva = ppn * RISCV_PGSIZE; vmr_t* v = (vmr_t*)*pte; *pte = pte_create(ppn, prot_to_type(PROT_READ|PROT_WRITE, 0)); @@ -182,7 +183,7 @@ static int __handle_page_fault(uintptr_t vaddr, int prot) if (v->file) { size_t flen = MIN(RISCV_PGSIZE, v->length - (vaddr - v->addr)); - ssize_t ret = file_pread(v->file, (void*)vaddr, flen, vaddr - v->addr + v->offset); + ssize_t ret = file_pread(v->file, (void*)kva, flen, vaddr - v->addr + v->offset); kassert(ret > 0); if (ret < RISCV_PGSIZE) memset((void*)vaddr + ret, 0, RISCV_PGSIZE - ret); |