]> git.proxmox.com Git - pve-qemu-kvm.git/blame - debian/patches/live-migration-fixes.diff
Two more fixes
[pve-qemu-kvm.git] / debian / patches / live-migration-fixes.diff
CommitLineData
4676c0af
DM
1Index: new/arch_init.c
2===================================================================
a023e148
DM
3--- new.orig/arch_init.c 2012-02-09 13:15:26.000000000 +0100
4+++ new/arch_init.c 2012-02-09 13:22:53.000000000 +0100
5@@ -264,6 +264,8 @@
07a7849d 6 uint64_t bytes_transferred_last;
4676c0af
DM
7 double bwidth = 0;
8 uint64_t expected_time = 0;
9+ static int64_t starttime = 0;
10+ double timediff;
07a7849d 11 int ret;
4676c0af
DM
12
13 if (stage < 0) {
a023e148 14@@ -299,10 +301,10 @@
4676c0af
DM
15 qemu_put_buffer(f, (uint8_t *)block->idstr, strlen(block->idstr));
16 qemu_put_be64(f, block->length);
17 }
18+
19+ starttime = qemu_get_clock_ns(rt_clock);
20 }
21
22- bytes_transferred_last = bytes_transferred;
23- bwidth = qemu_get_clock_ns(rt_clock);
24
07a7849d 25 while ((ret = qemu_file_rate_limit(f)) == 0) {
4676c0af 26 int bytes_sent;
a023e148 27@@ -318,8 +320,8 @@
07a7849d 28 return ret;
4676c0af
DM
29 }
30
31- bwidth = qemu_get_clock_ns(rt_clock) - bwidth;
32- bwidth = (bytes_transferred - bytes_transferred_last) / bwidth;
33+ timediff = qemu_get_clock_ns(rt_clock) - starttime;
34+ bwidth = bytes_transferred / timediff;
35
36 /* if we haven't transferred anything this round, force expected_time to a
37 * a very high value, but without crashing */
a023e148 38@@ -340,6 +342,10 @@
4676c0af
DM
39
40 qemu_put_be64(f, RAM_SAVE_FLAG_EOS);
41
42+ if ((stage == 2) && (bytes_transferred > 2*ram_bytes_total())) {
43+ return 1;
44+ }
45+
46 expected_time = ram_save_remaining() * TARGET_PAGE_SIZE / bwidth;
47
48 return (stage == 2) && (expected_time <= migrate_max_downtime());