@@ -453,6 +453,10 @@ reg_t mmu_t::s2xlate(reg_t gva, reg_t gpa, access_type type, access_type trap_ty
453
453
} else {
454
454
reg_t ad = PTE_A | ((type == STORE) * PTE_D);
455
455
456
+ int napot_bits = ((pte & PTE_N) ? (ctz (ppn) + 1 ) : 0 );
457
+ if (((pte & PTE_N) && (ppn == 0 || i != 0 )) || (napot_bits != 0 && napot_bits != 4 ))
458
+ break ;
459
+
456
460
if ((pte & ad) != ad) {
457
461
if (hade) {
458
462
// set accessed and possibly dirty bits
@@ -466,10 +470,6 @@ reg_t mmu_t::s2xlate(reg_t gva, reg_t gpa, access_type type, access_type trap_ty
466
470
reg_t vpn = gpa >> PGSHIFT;
467
471
reg_t page_mask = (reg_t (1 ) << PGSHIFT) - 1 ;
468
472
469
- int napot_bits = ((pte & PTE_N) ? (ctz (ppn) + 1 ) : 0 );
470
- if (((pte & PTE_N) && (ppn == 0 || i != 0 )) || (napot_bits != 0 && napot_bits != 4 ))
471
- break ;
472
-
473
473
reg_t page_base = ((ppn & ~((reg_t (1 ) << napot_bits) - 1 ))
474
474
| (vpn & ((reg_t (1 ) << napot_bits) - 1 ))
475
475
| (vpn & ((reg_t (1 ) << ptshift) - 1 ))) << PGSHIFT;
@@ -571,6 +571,10 @@ reg_t mmu_t::walk(mem_access_info_t access_info)
571
571
} else {
572
572
reg_t ad = PTE_A | ((type == STORE) * PTE_D);
573
573
574
+ int napot_bits = ((pte & PTE_N) ? (ctz (ppn) + 1 ) : 0 );
575
+ if (((pte & PTE_N) && (ppn == 0 || i != 0 )) || (napot_bits != 0 && napot_bits != 4 ))
576
+ break ;
577
+
574
578
if ((pte & ad) != ad) {
575
579
if (hade) {
576
580
// Check for write permission to the first-stage PT in second-stage
@@ -587,10 +591,6 @@ reg_t mmu_t::walk(mem_access_info_t access_info)
587
591
// for superpage or Svnapot NAPOT mappings, make a fake leaf PTE for the TLB's benefit.
588
592
reg_t vpn = addr >> PGSHIFT;
589
593
590
- int napot_bits = ((pte & PTE_N) ? (ctz (ppn) + 1 ) : 0 );
591
- if (((pte & PTE_N) && (ppn == 0 || i != 0 )) || (napot_bits != 0 && napot_bits != 4 ))
592
- break ;
593
-
594
594
reg_t page_base = ((ppn & ~((reg_t (1 ) << napot_bits) - 1 ))
595
595
| (vpn & ((reg_t (1 ) << napot_bits) - 1 ))
596
596
| (vpn & ((reg_t (1 ) << ptshift) - 1 ))) << PGSHIFT;
0 commit comments