diff options
author | rbuchner <ryan.buchner@arilinc.com> | 2023-04-18 14:06:12 -0700 |
---|---|---|
committer | rbuchner <ryan.buchner@arilinc.com> | 2023-05-11 23:00:59 -0700 |
commit | 4b9996bad9a3327b13056f21b7b2e03fdc41f65a (patch) | |
tree | 7e6273451e63ee9401a16c2573cce71479ea1092 /riscv/mmu.cc | |
parent | f7900e4730e1c13fa42789bc01d8f0366756130e (diff) | |
download | riscv-isa-sim-4b9996bad9a3327b13056f21b7b2e03fdc41f65a.zip riscv-isa-sim-4b9996bad9a3327b13056f21b7b2e03fdc41f65a.tar.gz riscv-isa-sim-4b9996bad9a3327b13056f21b7b2e03fdc41f65a.tar.bz2 |
Pass mem_access_info_t into walk()
Diffstat (limited to 'riscv/mmu.cc')
-rw-r--r-- | riscv/mmu.cc | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/riscv/mmu.cc b/riscv/mmu.cc index 7264ea8..f40ce30 100644 --- a/riscv/mmu.cc +++ b/riscv/mmu.cc @@ -60,10 +60,9 @@ reg_t mmu_t::translate(mem_access_info_t access_info, reg_t len) return addr; bool virt = access_info.effective_virt; - bool hlvx = access_info.flags.hlvx; reg_t mode = (reg_t) access_info.effective_priv; - reg_t paddr = walk(addr, type, mode, virt, hlvx) | (addr & (PGSIZE-1)); + reg_t paddr = walk(access_info) | (addr & (PGSIZE-1)); if (!pmp_ok(paddr, len, type, mode)) throw_access_exception(virt, addr, type); return paddr; @@ -461,8 +460,13 @@ reg_t mmu_t::s2xlate(reg_t gva, reg_t gpa, access_type type, access_type trap_ty } } -reg_t mmu_t::walk(reg_t addr, access_type type, reg_t mode, bool virt, bool hlvx) +reg_t mmu_t::walk(mem_access_info_t access_info) { + access_type type = access_info.type; + reg_t addr = access_info.vaddr; + bool virt = access_info.effective_virt; + bool hlvx = access_info.flags.hlvx; + reg_t mode = access_info.effective_priv; reg_t page_mask = (reg_t(1) << PGSHIFT) - 1; reg_t satp = proc->get_state()->satp->readvirt(virt); vm_info vm = decode_vm_info(proc->get_const_xlen(), false, mode, satp); |