On 7/1/26 07:08, Philippe Mathieu-Daudé wrote:
Sorry for not being clear enough, I meant the TLB_MMIO & TLB_WATCHPOINT
checks just after:

+            /* The first active element crosses a page boundary. */
+            flags |= info.page[1].flags;
+            if (unlikely(flags & TLB_MMIO)) {
+                /* Some page is MMIO, see below. */
+                goto do_fault;
+            }
+            if (unlikely(flags & TLB_WATCHPOINT) &&
+                (cpu_watchpoint_address_matches
+                 (env_cpu(env), addr + mem_off, 1 << msz)
+                 & BP_MEM_READ)) {
+                /* Watchpoint hit, see below. */
+                goto do_fault;
+            }

We still have TLB_WATCHPOINT == 0 for user-only, so that won't actually fire.

We set TLB_MMIO to non-zero for user-only in 6d03226b422 so that we could force slow paths for plugins. These days we should probably rearrange things so that TLB_FORCE_SLOW is used for that instead, and make TLB_MMIO be 0 again.


r~



+            /* TODO: MTE check. */
+            /*
+             * Use the slow path for cross-page handling.
+             * This is RAM, without a watchpoint, and will not trap.
+             */
+            tlb_fn(env, vd, reg_off, addr + mem_off, retaddr);
+            goto second_page;
           }
       }


Reply via email to