@@ -53,16 +53,6 @@ void throw_access_exception(bool virt, reg_t addr, access_type type)
5353 }
5454}
5555
56- [[noreturn]] void throw_page_access_exception (bool virt, reg_t addr, access_type type)
57- {
58- switch (type) {
59- case FETCH: throw trap_instruction_page_fault (virt, addr, 0 , 0 );
60- case LOAD: throw trap_load_page_fault (virt, addr, 0 , 0 );
61- case STORE: throw trap_store_page_fault (virt, addr, 0 , 0 );
62- default : abort ();
63- }
64- }
65-
6656reg_t mmu_t::translate (mem_access_info_t access_info, reg_t len)
6757{
6858 reg_t addr = access_info.transformed_vaddr ;
@@ -570,35 +560,6 @@ reg_t mmu_t::s2xlate(reg_t gva, reg_t gpa, access_type type, access_type trap_ty
570560 }
571561}
572562
573- bool mmu_t::check_svukte_qualified (reg_t addr, reg_t mode, bool forced_virt)
574- {
575- state_t * state = proc->get_state ();
576-
577- if (mode != PRV_U)
578- return true ;
579-
580- if (proc->extension_enabled (' S' ) && get_field (state->senvcfg ->read (), SENVCFG_UKTE)) {
581- if (forced_virt && state->prv == PRV_U) {
582- bool hstatus_hukte = proc->extension_enabled (' H' ) &&
583- (get_field (state->hstatus ->read (), HSTATUS_HUKTE) == 1 );
584- if (!hstatus_hukte)
585- return true ;
586- }
587-
588- if (((addr >> SYS_MEM_HEADING_BIT) & 0x1 )) {
589- if ((state->v || forced_virt) &&
590- ((proc->get_xlen () == 64 ) ? ((state->vsatp ->read () & SATP64_MODE) == 0 ) :
591- ((state->vsatp ->read () & SATP32_MODE) == 0 ))) {
592- return true ;
593- } else {
594- return false ;
595- }
596- }
597- }
598-
599- return true ;
600- }
601-
602563reg_t mmu_t::walk (mem_access_info_t access_info)
603564{
604565 access_type type = access_info.type ;
@@ -621,10 +582,6 @@ reg_t mmu_t::walk(mem_access_info_t access_info)
621582 if (vm.levels == 0 )
622583 return s2xlate (addr, addr & ((reg_t (2 ) << (proc->xlen -1 ))-1 ), type, type, virt, hlvx, false ) & ~page_mask; // zero-extend from xlen
623584
624- if (proc->extension_enabled (EXT_SVUKTE) && !check_svukte_qualified (addr, mode, access_info.flags .forced_virt )) {
625- throw_page_access_exception (virt, addr, type);
626- }
627-
628585 bool s_mode = mode == PRV_S;
629586 bool sum = proc->state .sstatus ->readvirt (virt) & MSTATUS_SUM;
630587 bool mxr = (proc->state .sstatus ->readvirt (false ) | proc->state .sstatus ->readvirt (virt)) & MSTATUS_MXR;
@@ -715,7 +672,12 @@ reg_t mmu_t::walk(mem_access_info_t access_info)
715672 }
716673 }
717674
718- throw_page_access_exception (virt, addr, type);
675+ switch (type) {
676+ case FETCH: throw trap_instruction_page_fault (virt, addr, 0 , 0 );
677+ case LOAD: throw trap_load_page_fault (virt, addr, 0 , 0 );
678+ case STORE: throw trap_store_page_fault (virt, addr, 0 , 0 );
679+ default : abort ();
680+ }
719681}
720682
721683void mmu_t::register_memtracer (memtracer_t * t)
0 commit comments