From cdda5b9dfcd01868b728e245b8a4d63d2b86e6ae Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Tue, 28 Feb 2012 12:53:15 +0100 Subject: [PATCH 2/7] kvm: Flush coalesced mmio buffer on IO window exits RH-Author: Paolo Bonzini Message-id: <1330433598-21534-3-git-send-email-pbonzini@redhat.com> Patchwork-id: 37669 O-Subject: [RHEL 6.3 qemu-kvm PATCH 2/5] kvm: Flush coalesced mmio buffer on IO window exits Bugzilla: 796575 RH-Acked-by: Alex Williamson RH-Acked-by: Laszlo Ersek RH-Acked-by: Markus Armbruster From: Jan Kiszka We must flush pending mmio writes if we leave kvm_cpu_exec for an IO window. Otherwise we risk to loose those requests when migrating to a different host during that window. Signed-off-by: Jan Kiszka Signed-off-by: Marcelo Tosatti (cherry picked from commit b0c883b5e079a4f719c43f875034e5e665ccc232) Signed-off-by: Paolo Bonzini --- kvm-all.c | 4 ++-- qemu-kvm.c | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) Signed-off-by: Michal Novotny --- kvm-all.c | 4 ++-- qemu-kvm.c | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/kvm-all.c b/kvm-all.c index e36c15f..a50ec56 100644 --- a/kvm-all.c +++ b/kvm-all.c @@ -650,6 +650,8 @@ int kvm_cpu_exec(CPUState *env) qemu_mutex_lock_iothread(); kvm_arch_post_run(env, run); + kvm_flush_coalesced_mmio_buffer(); + if (ret == -EINTR || ret == -EAGAIN) { dprintf("io window exit\n"); ret = 0; @@ -661,8 +663,6 @@ int kvm_cpu_exec(CPUState *env) abort(); } - kvm_flush_coalesced_mmio_buffer(); - ret = 0; /* exit loop */ switch (run->exit_reason) { case KVM_EXIT_IO: diff --git a/qemu-kvm.c b/qemu-kvm.c index 8d0105d..ba5a037 100644 --- a/qemu-kvm.c +++ b/qemu-kvm.c @@ -922,6 +922,8 @@ void post_kvm_run(kvm_context_t kvm, CPUState *env) pthread_mutex_lock(&qemu_mutex); kvm_arch_post_run(env, env->kvm_run); cpu_single_env = env; + + kvm_flush_coalesced_mmio_buffer(); } int pre_kvm_run(kvm_context_t kvm, CPUState *env) @@ -1013,8 +1015,6 @@ int kvm_run(CPUState *env) post_kvm_run(kvm, env); - kvm_flush_coalesced_mmio_buffer(); - #if !defined(__s390__) if (r == -1) { r = handle_io_window(kvm); -- 1.7.7.6