From 6af3f92c0e390181b90159745ef35423fd46b5fd Mon Sep 17 00:00:00 2001 From: William Wang Date: Wed, 7 Apr 2021 11:51:32 +0800 Subject: [PATCH] mmu: ignore crosspage ipf caused xtval mismatch --- src/isa/riscv64/mmu.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/isa/riscv64/mmu.c b/src/isa/riscv64/mmu.c index 98035a53..5dc457b4 100644 --- a/src/isa/riscv64/mmu.c +++ b/src/isa/riscv64/mmu.c @@ -137,7 +137,11 @@ int force_raise_pf(vaddr_t vaddr, int type){ } if (cpu.mode == MODE_M) { mtval->val = cpu.disambiguation_state.mtval; - if(vaddr != cpu.disambiguation_state.mtval){ + if( + vaddr != cpu.disambiguation_state.mtval && + // cross page ipf caused mismatch is legal + !((vaddr & 0xfff) == 0xffe && (cpu.disambiguation_state.mtval & 0xfff) == 0x000) + ){ printf("[WRANING] nemu mtval %lx does not match core mtval %lx\n", vaddr, cpu.disambiguation_state.mtval @@ -145,7 +149,11 @@ int force_raise_pf(vaddr_t vaddr, int type){ } } else { stval->val = cpu.disambiguation_state.stval; - if(vaddr != cpu.disambiguation_state.stval){ + if( + vaddr != cpu.disambiguation_state.stval && + // cross page ipf caused mismatch is legal + !((vaddr & 0xfff) == 0xffe && (cpu.disambiguation_state.stval & 0xfff) == 0x000) + ){ printf("[WRANING] nemu stval %lx does not match core stval %lx\n", vaddr, cpu.disambiguation_state.stval -- GitLab