[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [RFC/PATCH] migration: SMRAM dirty bitmap not fetched from
From: |
Herongguang (Stephen) |
Subject: |
[Qemu-devel] [RFC/PATCH] migration: SMRAM dirty bitmap not fetched from kvm-kmod and not send to destination |
Date: |
Wed, 14 Sep 2016 15:55:53 +0800 |
User-agent: |
Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101 Thunderbird/38.5.1 |
Hi,
We found a problem that when a redhat 6 VM reboots (in grub countdown UI),
migrating this VM will result in VM’s memory difference between source and
destination side. The difference always resides in GPA 0xA0000~0xC0000, i.e.
SMRAM area.
Occasionally this result in VM instruction emulation error in destination side.
After some digging, I think this is because in migration code, in
migration_bitmap_sync(), only memory slots in address space
address_space_memory’s dirty bitmap fetched from kvm-kmod, while SMRAM memory
slot, in address space smram_address_space’s dirty bitmap not fetched from
kvm-kmod, thus modifications in SMRAM in source side are not sent to
destination side.
I tried following patch, and this phenomenon does not happen anymore. Do you
think this patch is OK or do you have better idea? Thanks.
diff --git a/migration/ram.c b/migration/ram.c
index a3d70c4..1cc4360 100644
--- a/migration/ram.c
+++ b/migration/ram.c
@@ -607,6 +607,8 @@ static void migration_bitmap_sync_init(void)
iterations_prev = 0;
}
+extern AddressSpace smram_address_space;
+
static void migration_bitmap_sync(void)
{
RAMBlock *block;
@@ -627,6 +629,7 @@ static void migration_bitmap_sync(void)
trace_migration_bitmap_sync_start();
address_space_sync_dirty_bitmap(&address_space_memory);
+ address_space_sync_dirty_bitmap(&smram_address_space);
qemu_mutex_lock(&migration_bitmap_mutex);
rcu_read_lock();
diff --git a/target-i386/kvm.c b/target-i386/kvm.c
index d1a25c5..b98fe22 100644
--- a/target-i386/kvm.c
+++ b/target-i386/kvm.c
@@ -1111,7 +1111,7 @@ static int kvm_get_supported_msrs(KVMState *s)
static Notifier smram_machine_done;
static KVMMemoryListener smram_listener;
-static AddressSpace smram_address_space;
+AddressSpace smram_address_space;
static MemoryRegion smram_as_root;
static MemoryRegion smram_as_mem;
- [Qemu-devel] [RFC/PATCH] migration: SMRAM dirty bitmap not fetched from kvm-kmod and not send to destination,
Herongguang (Stephen) <=
- Re: [Qemu-devel] [RFC/PATCH] migration: SMRAM dirty bitmap not fetched from kvm-kmod and not send to destination, Paolo Bonzini, 2016/09/14
- Re: [Qemu-devel] [RFC/PATCH] migration: SMRAM dirty bitmap not fetched from kvm-kmod and not send to destination, Herongguang (Stephen), 2016/09/22
- Re: [Qemu-devel] [RFC/PATCH] migration: SMRAM dirty bitmap not fetched from kvm-kmod and not send to destination, Herongguang (Stephen), 2016/09/22
- Re: [Qemu-devel] [RFC/PATCH] migration: SMRAM dirty bitmap not fetched from kvm-kmod and not send to destination, Paolo Bonzini, 2016/09/23
- Re: [Qemu-devel] [RFC/PATCH] migration: SMRAM dirty bitmap not fetched from kvm-kmod and not send to destination, Herongguang (Stephen), 2016/09/23
- Re: [Qemu-devel] [RFC/PATCH] migration: SMRAM dirty bitmap not fetched from kvm-kmod and not send to destination, Paolo Bonzini, 2016/09/23
- Re: [Qemu-devel] [RFC/PATCH] migration: SMRAM dirty bitmap not fetched from kvm-kmod and not send to destination, Herongguang (Stephen), 2016/09/23
- Re: [Qemu-devel] [RFC/PATCH] migration: SMRAM dirty bitmap not fetched from kvm-kmod and not send to destination, Herongguang (Stephen), 2016/09/25
- Re: [Qemu-devel] [RFC/PATCH] migration: SMRAM dirty bitmap not fetched from kvm-kmod and not send to destination, Paolo Bonzini, 2016/09/26
[Qemu-devel] [RFC/PATCH 2] kvm: x86: handle KVM_SET_VCPU_EVENTS/KVM_VCPUEVENT_VALID_SMM properly, Herongguang (Stephen), 2016/09/22