提交 d3017ffa 编写于 作者: Z Zihao Yu

riscv64,mmu: fix paging condition

* do not call page_translate() in M mode
上级 d9c5d4ac
......@@ -88,13 +88,23 @@ static inline paddr_t page_translate(vaddr_t addr, bool is_write) {
}
word_t isa_vaddr_read(vaddr_t addr, int len) {
assert(satp->mode == 0 || satp->mode == 8);
paddr_t paddr = (satp->mode == 8 ? page_translate(addr, false) : addr);
paddr_t paddr = addr;
if (cpu.mode < MODE_M) {
assert(satp->mode == 0 || satp->mode == 8);
if (satp->mode == 8) {
paddr = page_translate(addr, false);
}
}
return paddr_read(paddr, len);
}
void isa_vaddr_write(vaddr_t addr, word_t data, int len) {
assert(satp->mode == 0 || satp->mode == 8);
paddr_t paddr = (satp->mode == 8 ? page_translate(addr, true) : addr);
paddr_t paddr = addr;
if (cpu.mode < MODE_M) {
assert(satp->mode == 0 || satp->mode == 8);
if (satp->mode == 8) {
paddr = page_translate(addr, true);
}
}
paddr_write(paddr, data, len);
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册