]> git.proxmox.com Git - qemu.git/commitdiff
A bit optimization for tlb_set_page()
authorJun Koi <junkoi2004@gmail.com>
Thu, 6 May 2010 05:36:59 +0000 (14:36 +0900)
committerAurelien Jarno <aurelien@aurel32.net>
Wed, 30 Jun 2010 18:25:55 +0000 (20:25 +0200)
This patch avoids handling write watchpoints on read-only memory access.
It also breaks the searching loop for watchpoint once the setup for
handling watchpoint later is done.

Signed-off-by: Jun Koi <junkoi2004@gmail.com>
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
exec.c

diff --git a/exec.c b/exec.c
index 7f64384c55028f1cca9529c741a007fcdce1fc0f..137175caa0cd79bb43f45c1761e685d432f24123 100644 (file)
--- a/exec.c
+++ b/exec.c
@@ -2209,10 +2209,12 @@ void tlb_set_page(CPUState *env, target_ulong vaddr,
        watchpoint trap routines.  */
     QTAILQ_FOREACH(wp, &env->watchpoints, entry) {
         if (vaddr == (wp->vaddr & TARGET_PAGE_MASK)) {
-            iotlb = io_mem_watch + paddr;
-            /* TODO: The memory case can be optimized by not trapping
-               reads of pages with a write breakpoint.  */
-            address |= TLB_MMIO;
+            /* Avoid trapping reads of pages with a write breakpoint. */
+            if ((prot & PAGE_WRITE) || (wp->flags & BP_MEM_READ)) {
+                iotlb = io_mem_watch + paddr;
+                address |= TLB_MMIO;
+                break;
+            }
         }
     }