qemu-devel
[Top][All Lists]
Advanced

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

[Qemu-devel] [PATCH qom-cpu 29/59] cputlb: Simplify cpu_tlb_reset_dirty_


From: Andreas Färber
Subject: [Qemu-devel] [PATCH qom-cpu 29/59] cputlb: Simplify cpu_tlb_reset_dirty_all()
Date: Sun, 9 Jun 2013 21:12:56 +0200

Use new qemu_for_each_cpu().

Signed-off-by: Andreas Färber <address@hidden>
---
 cputlb.c | 35 ++++++++++++++++++++++++-----------
 1 file changed, 24 insertions(+), 11 deletions(-)

diff --git a/cputlb.c b/cputlb.c
index f7cc4b4..748d0f6 100644
--- a/cputlb.c
+++ b/cputlb.c
@@ -173,24 +173,37 @@ static inline void tlb_update_dirty(CPUTLBEntry 
*tlb_entry)
     }
 }
 
-void cpu_tlb_reset_dirty_all(ram_addr_t start1, ram_addr_t length)
-{
-    CPUArchState *env;
+typedef struct CPUTLBResetDirtyData {
+    ram_addr_t start1;
+    ram_addr_t length;
+} CPUTLBResetDirtyData;
 
-    for (env = first_cpu; env != NULL; env = env->next_cpu) {
-        int mmu_idx;
+static void cpu_tlb_reset_dirty_one(CPUState *cpu, void *data)
+{
+    CPUTLBResetDirtyData *s = data;
+    CPUArchState *env = cpu->env_ptr;
+    int mmu_idx;
 
-        for (mmu_idx = 0; mmu_idx < NB_MMU_MODES; mmu_idx++) {
-            unsigned int i;
+    for (mmu_idx = 0; mmu_idx < NB_MMU_MODES; mmu_idx++) {
+        unsigned int i;
 
-            for (i = 0; i < CPU_TLB_SIZE; i++) {
-                tlb_reset_dirty_range(&env->tlb_table[mmu_idx][i],
-                                      start1, length);
-            }
+        for (i = 0; i < CPU_TLB_SIZE; i++) {
+            tlb_reset_dirty_range(&env->tlb_table[mmu_idx][i],
+                                  s->start1, s->length);
         }
     }
 }
 
+void cpu_tlb_reset_dirty_all(ram_addr_t start1, ram_addr_t length)
+{
+    CPUTLBResetDirtyData s = {
+        .start1 = start1,
+        .length = length,
+    };
+
+    qemu_for_each_cpu(cpu_tlb_reset_dirty_one, &s);
+}
+
 static inline void tlb_set_dirty1(CPUTLBEntry *tlb_entry, target_ulong vaddr)
 {
     if (tlb_entry->addr_write == (vaddr | TLB_NOTDIRTY)) {
-- 
1.8.1.4




reply via email to

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