Sophie

Sophie

distrib > Scientific%20Linux > 5x > x86_64 > by-pkgid > 3160499aacb81f6735941eb4c372d87a > files > 189

kvm-83-164.el5_5.30.src.rpm

From b3983a5b87416005b44ff1d5caf2dc2e765e2833 Mon Sep 17 00:00:00 2001
From: Glauber Costa <glommer@redhat.com>
Date: Wed, 13 May 2009 15:28:42 -0400
Subject: [PATCH 01/14] Revert "qemu: fix bad physical address in kvm_update_dirty_pages_log()"

This reverts commit e74f028679b4874f756cdf6750cc3c2897feddfc.

Message-Id: <1242242923-7644-2-git-send-email-glommer@redhat.com>
RH-Upstream-status: not-applicable
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
Acked-by: Dor Laor <dlaor@redhat.com>
Acked-by: Juan Quintela <quintela@redhat.com>
Acked-by: Eduardo Habkost <ehabkost@redhat.com>
Bugzilla: 503793
---
 qemu/qemu-kvm.c |   61 +++---------------------------------------------------
 1 files changed, 4 insertions(+), 57 deletions(-)

diff --git a/qemu/qemu-kvm.c b/qemu/qemu-kvm.c
index e4124b8..5225c7a 100644
--- a/qemu/qemu-kvm.c
+++ b/qemu/qemu-kvm.c
@@ -1222,27 +1222,6 @@ int kvm_get_dirty_bitmap_cb(unsigned long start, unsigned long len,
     return kvm_get_dirty_pages_log_range(start, bitmap, start, len);
 }
 
-static int find_phys_area(ram_addr_t phys_ram_offset, ram_addr_t *offset, target_phys_addr_t *start,
-                              ram_addr_t *size)
-{
-    struct mapping *now = NULL;
-    struct mapping *map;
-
-    for (map = mappings; map < mappings + nr_mappings; ++map) {
-        if (map->ram >= phys_ram_offset && (!now || map->ram < now->ram)) {
-            now = map;
-        }
-    }
-
-    if (!now) {
-        return -1;
-    }
-
-    *offset = now->ram - phys_ram_offset;
-    *start = now->phys;
-    *size = now->len;
-    return 0;
-}
 /* 
  * get kvm's dirty pages bitmap and update qemu's
  * we only care about physical ram, which resides in slots 0 and 3
@@ -1250,44 +1229,12 @@ static int find_phys_area(ram_addr_t phys_ram_offset, ram_addr_t *offset, target
 int kvm_update_dirty_pages_log(void)
 {
     int r = 0;
-    ram_addr_t now = 0;
-    ram_addr_t end = phys_ram_size;
-    ram_addr_t offset;
-    target_phys_addr_t area_start;
-    ram_addr_t area_size;
-    unsigned char *dirty_bitmap = kvm_dirty_bitmap;
-
-    if (!dirty_bitmap) {
-        printf("%s: no dirty bitmap\n", __FUNCTION__);
-        return -1;
-    }
 
-    while (now < end && !find_phys_area(now, &offset, &area_start, &area_size)) {
-        if ((offset & ~TARGET_PAGE_MASK) || (area_start & ~TARGET_PAGE_MASK) || 
-                                                         (area_size & ~TARGET_PAGE_MASK)) {
-            printf("%s: invalid mem area\n", __FUNCTION__);
-            return -1;
-        }
 
-        if ((now += offset) >= end) {
-            break;
-        }
-        
-        if (area_size > end - now) {
-            return -1;
-        }
-        dirty_bitmap += offset / TARGET_PAGE_SIZE / 8;
-        if ((r = kvm_get_dirty_pages_range(kvm_context, area_start, area_size, dirty_bitmap, NULL,
-                                      kvm_get_dirty_bitmap_cb))) {
-            return r;
-        }
-        dirty_bitmap += area_size / TARGET_PAGE_SIZE / 8;
-        now += area_size;
-        if (!now) {
-            break;
-        }
-    }
-    return 0;
+    r = kvm_get_dirty_pages_range(kvm_context, 0, phys_ram_size,
+                                  kvm_dirty_bitmap, NULL,
+                                  kvm_get_dirty_bitmap_cb);
+    return r;
 }
 
 void kvm_qemu_log_memory(target_phys_addr_t start, target_phys_addr_t size,
-- 
1.6.3.rc4.29.g8146