qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH-for-9.1 v2 1/2] target/mips: Pass page table entry size in by


From: Richard Henderson
Subject: Re: [PATCH-for-9.1 v2 1/2] target/mips: Pass page table entry size in bytes to get_pte()
Date: Tue, 13 Aug 2024 21:02:41 +1000
User-agent: Mozilla Thunderbird

On 8/13/24 20:18, Philippe Mathieu-Daudé wrote:
In order to simplify a bit, pass the PTE size in
bytes rather than bits.

Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
  target/mips/tcg/sysemu/tlb_helper.c | 16 ++++++++--------
  1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/target/mips/tcg/sysemu/tlb_helper.c 
b/target/mips/tcg/sysemu/tlb_helper.c
index 3ba6d369a6..a8caf3ade8 100644
--- a/target/mips/tcg/sysemu/tlb_helper.c
+++ b/target/mips/tcg/sysemu/tlb_helper.c
@@ -592,13 +592,13 @@ static void raise_mmu_exception(CPUMIPSState *env, 
target_ulong address,
   * resulting in a TLB or XTLB Refill exception.
   */
-static bool get_pte(CPUMIPSState *env, uint64_t vaddr, int entry_size,
+static bool get_pte(CPUMIPSState *env, uint64_t vaddr, unsigned entry_bytes,
          uint64_t *pte)
  {
-    if ((vaddr & ((entry_size >> 3) - 1)) != 0) {
+    if ((vaddr & (entry_bytes - 1)) != 0) {
          return false;
      }
-    if (entry_size == 64) {
+    if (entry_bytes == 8) {
          *pte = cpu_ldq_code(env, vaddr);
      } else {
          *pte = cpu_ldl_code(env, vaddr);

Considering the next patch, where you need to make the MemOpIdx,
why not pass in the size as MemOp?

@@ -630,8 +630,8 @@ static int walk_directory(CPUMIPSState *env, uint64_t 
*vaddr,
      int psn = (env->CP0_PWCtl >> CP0PC_PSN) & 0x3F;
      int hugepg = (env->CP0_PWCtl >> CP0PC_HUGEPG) & 0x1;
      int pf_ptew = (env->CP0_PWField >> CP0PF_PTEW) & 0x3F;
-    uint32_t direntry_size = 1 << (directory_shift + 3);
-    uint32_t leafentry_size = 1 << (leaf_shift + 3);
+    uint32_t direntry_size = 1 << directory_shift;
+    uint32_t leafentry_size = 1 << leaf_shift;

This would then be just directory_shift/leaf_shift unchanged.


r~



reply via email to

[Prev in Thread] Current Thread [Next in Thread]