Sophie

Sophie

distrib > Scientific%20Linux > 5x > x86_64 > by-pkgid > 340e01248478ba8b78a6d4d1809b1eff > files > 151

kvm-83-270.el5_11.src.rpm

From 023bcb6edcb96da585b567024097c4a90484d88d Mon Sep 17 00:00:00 2001
From: Juan Quintela <quintela@redhat.com>
Date: Mon, 22 Nov 2010 15:57:07 -0200
Subject: [PATCH 3/6] Fix transferred memory calculation

RH-Author: Juan Quintela <quintela@redhat.com>
Message-id: <31b3903c8c6fde022103f2c0fa196b68243e2015.1290441250.git.quintela@redhat.com>
Patchwork-id: 13777
O-Subject: [PATCH 3/6] Fix transferred memory calculation
Bugzilla: 513765 589017
RH-Acked-by: Jes Sorensen <Jes.Sorensen@redhat.com>
RH-Acked-by: Alex Williamson <alex.williamson@redhat.com>
RH-Acked-by: Avi Kivity <avi@redhat.com>

Signed-off-by: Juan Quintela <quintela@redhat.com>
---
 qemu/vl.c |   16 ++++++++--------
 1 files changed, 8 insertions(+), 8 deletions(-)

Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
---
 qemu/vl.c |   16 ++++++++--------
 1 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/qemu/vl.c b/qemu/vl.c
index 239a707..23fe8ff 100644
--- a/qemu/vl.c
+++ b/qemu/vl.c
@@ -3390,7 +3390,7 @@ static int ram_save_block(QEMUFile *f)
     static ram_addr_t current_addr = 0;
     ram_addr_t saved_addr = current_addr;
     ram_addr_t addr = 0;
-    int found = 0;
+    int bytes_sent = 0;
 
     while (addr < phys_ram_size) {
         if (kvm_enabled() && current_addr == 0) {
@@ -3413,19 +3413,19 @@ static int ram_save_block(QEMUFile *f)
             if (is_dup_page(phys_ram_base + current_addr, ch)) {
                 qemu_put_be64(f, current_addr | RAM_SAVE_FLAG_COMPRESS);
                 qemu_put_byte(f, ch);
+                bytes_sent = 8 + 1; /* header + char */
             } else {
                 qemu_put_be64(f, current_addr | RAM_SAVE_FLAG_PAGE);
                 qemu_put_buffer(f, phys_ram_base + current_addr, TARGET_PAGE_SIZE);
+                bytes_sent = 8 + TARGET_PAGE_SIZE; /* header + page size */
             }
-
-            found = 1;
             break;
         }
         addr += TARGET_PAGE_SIZE;
         current_addr = (saved_addr + addr) % phys_ram_size;
     }
 
-    return found;
+    return bytes_sent;
 }
 
 static uint64_t bytes_transferred = 0;
@@ -3485,7 +3485,7 @@ static int ram_save_live(QEMUFile *f, int stage, void *opaque)
         int ret;
 
         ret = ram_save_block(f);
-        bytes_transferred += ret * TARGET_PAGE_SIZE;
+        bytes_transferred += ret;
         if (ret == 0) /* no more blocks */
             break;
     }
@@ -3501,15 +3501,15 @@ static int ram_save_live(QEMUFile *f, int stage, void *opaque)
     /* try transferring iterative blocks of memory */
 
     if (stage == 3) {
-        int r;
+        int r, ret;
         if ((r = kvm_update_dirty_pages_log())) {
             printf("%s: update dirty pages log failed %d\n", __FUNCTION__, r);
             qemu_file_set_has_error(f);
             return 0;
         }
         /* flush all remaining blocks regardless of rate limiting */
-        while (ram_save_block(f) != 0) {
-            bytes_transferred += TARGET_PAGE_SIZE;
+        while ((ret = ram_save_block(f)) != 0) {
+            bytes_transferred += ret;
         }
         cpu_physical_memory_set_dirty_tracking(0);
     }
-- 
1.7.3.2