aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Henderson <richard.henderson@linaro.org>2023-10-27 01:09:21 -0700
committerRichard Henderson <richard.henderson@linaro.org>2023-11-06 18:49:33 -0800
commitf8cda28b8dd6f9d52042a3d45558de81e4c54e36 (patch)
tree1c9c4186608f0ef41ea6a27993accd7437ed8ea0
parent66866cc74fc77e6f08eaeb1054bf1e2454fa4721 (diff)
downloadqemu-f8cda28b8dd6f9d52042a3d45558de81e4c54e36.zip
qemu-f8cda28b8dd6f9d52042a3d45558de81e4c54e36.tar.gz
qemu-f8cda28b8dd6f9d52042a3d45558de81e4c54e36.tar.bz2
target/hppa: Always report one page to tlb_set_page
No need to trigger the large_page_mask code unnecessarily. Drop the now unused HPPATLBEntry.page_size field. Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
-rw-r--r--target/hppa/cpu.h5
-rw-r--r--target/hppa/mem_helper.c11
2 files changed, 12 insertions, 4 deletions
diff --git a/target/hppa/cpu.h b/target/hppa/cpu.h
index 84bb6ed..1480d02 100644
--- a/target/hppa/cpu.h
+++ b/target/hppa/cpu.h
@@ -179,15 +179,16 @@ typedef struct HPPATLBEntry {
IntervalTreeNode itree;
target_ureg pa;
+
+ unsigned entry_valid : 1;
+
unsigned u : 1;
unsigned t : 1;
unsigned d : 1;
unsigned b : 1;
- unsigned page_size : 4;
unsigned ar_type : 3;
unsigned ar_pl1 : 2;
unsigned ar_pl2 : 2;
- unsigned entry_valid : 1;
unsigned access_id : 16;
} HPPATLBEntry;
diff --git a/target/hppa/mem_helper.c b/target/hppa/mem_helper.c
index 687ae44..60cae64 100644
--- a/target/hppa/mem_helper.c
+++ b/target/hppa/mem_helper.c
@@ -268,9 +268,16 @@ bool hppa_cpu_tlb_fill(CPUState *cs, vaddr addr, int size,
trace_hppa_tlb_fill_success(env, addr & TARGET_PAGE_MASK,
phys & TARGET_PAGE_MASK, size, type, mmu_idx);
- /* Success! Store the translation into the QEMU TLB. */
+
+ /*
+ * Success! Store the translation into the QEMU TLB.
+ * Note that we always install a single-page entry, because that
+ * is what works best with softmmu -- anything else will trigger
+ * the large page protection mask. We do not require this,
+ * because we record the large page here in the hppa tlb.
+ */
tlb_set_page(cs, addr & TARGET_PAGE_MASK, phys & TARGET_PAGE_MASK,
- prot, mmu_idx, TARGET_PAGE_SIZE << (ent ? 2 * ent->page_size : 0));
+ prot, mmu_idx, TARGET_PAGE_SIZE);
return true;
}