Blame SOURCES/kvm-main-loop-drop-spin_counter.patch

357786
From d215f56d789b8d6a2cb27501c89a516d213b1af3 Mon Sep 17 00:00:00 2001
357786
From: Jeffrey Cody <jcody@redhat.com>
357786
Date: Wed, 20 Jun 2018 17:44:46 +0200
357786
Subject: [PATCH 51/54] main-loop: drop spin_counter
357786
357786
RH-Author: Jeffrey Cody <jcody@redhat.com>
357786
Message-id: <835200bb37bc622f0f6f9c471c809a1b73a08482.1529516334.git.jcody@redhat.com>
357786
Patchwork-id: 80906
357786
O-Subject: [RHEL-7.6 qemu-kvm-rhev PATCH v2 1/1] main-loop: drop spin_counter
357786
Bugzilla: 1168213
357786
RH-Acked-by: Paolo Bonzini <pbonzini@redhat.com>
357786
RH-Acked-by: Stefan Hajnoczi <stefanha@redhat.com>
357786
RH-Acked-by: Markus Armbruster <armbru@redhat.com>
357786
357786
From: Stefan Hajnoczi <stefanha@redhat.com>
357786
357786
Commit d759c951f3287fad04210a52f2dc93f94cf58c7f ("replay: push
357786
replay_mutex_lock up the call tree") removed the !timeout lock
357786
optimization in the main loop.
357786
357786
The idea of the optimization was to avoid ping-pongs between threads by
357786
keeping the Big QEMU Lock held across non-blocking (!timeout) main loop
357786
iterations.
357786
357786
A warning is printed when the main loop spins without releasing BQL for
357786
long periods of time.  These warnings were supposed to aid debugging but
357786
in practice they just alarm users.  They are considered noise because
357786
the cause of spinning is not shown and is hard to find.
357786
357786
Now that the lock optimization has been removed, there is no danger of
357786
hogging the BQL.  Drop the spin counter and the infamous warning.
357786
357786
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
357786
Reviewed-by: Jeff Cody <jcody@redhat.com>
357786
(cherry picked from commit 21891a5a3011608845b5d7f1f9cce60cdc2bcc62)
357786
Note: The original patch series from Stefan makes note that the
357786
      patch can be dropped because the lock optimization changed
357786
      upstream.
357786
357786
      However, even without that optimization change upstream, this
357786
      warning / debug message is not very useful, and is just noise that
357786
      does not aid in debugging.  Go ahead and remove it anyway.
357786
Signed-off-by: Jeff Cody <jcody@redhat.com>
357786
357786
Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com>
357786
---
357786
 tests/qemu-iotests/common.filter |  1 -
357786
 util/main-loop.c                 | 25 -------------------------
357786
 2 files changed, 26 deletions(-)
357786
357786
diff --git a/tests/qemu-iotests/common.filter b/tests/qemu-iotests/common.filter
357786
index c5f4bcf..7acb454 100644
357786
--- a/tests/qemu-iotests/common.filter
357786
+++ b/tests/qemu-iotests/common.filter
357786
@@ -77,7 +77,6 @@ _filter_qemu()
357786
 {
357786
     sed -e "s#\\(^\\|(qemu) \\)$(basename $QEMU_PROG):#\1QEMU_PROG:#" \
357786
         -e 's#^QEMU [0-9]\+\.[0-9]\+\.[0-9]\+ monitor#QEMU X.Y.Z monitor#' \
357786
-        -e '/main-loop: WARNING: I\/O thread spun for [0-9]\+ iterations/d' \
357786
         -e $'s#\r##' # QEMU monitor uses \r\n line endings
357786
 }
357786
 
357786
diff --git a/util/main-loop.c b/util/main-loop.c
357786
index 992f9b0..affe040 100644
357786
--- a/util/main-loop.c
357786
+++ b/util/main-loop.c
357786
@@ -222,36 +222,11 @@ static int os_host_main_loop_wait(int64_t timeout)
357786
 {
357786
     GMainContext *context = g_main_context_default();
357786
     int ret;
357786
-    static int spin_counter;
357786
 
357786
     g_main_context_acquire(context);
357786
 
357786
     glib_pollfds_fill(&timeout);
357786
 
357786
-    /* If the I/O thread is very busy or we are incorrectly busy waiting in
357786
-     * the I/O thread, this can lead to starvation of the BQL such that the
357786
-     * VCPU threads never run.  To make sure we can detect the later case,
357786
-     * print a message to the screen.  If we run into this condition, create
357786
-     * a fake timeout in order to give the VCPU threads a chance to run.
357786
-     */
357786
-    if (!timeout && (spin_counter > MAX_MAIN_LOOP_SPIN)) {
357786
-        static bool notified;
357786
-
357786
-        if (!notified && !qtest_enabled() && !qtest_driver()) {
357786
-            warn_report("I/O thread spun for %d iterations",
357786
-                        MAX_MAIN_LOOP_SPIN);
357786
-            notified = true;
357786
-        }
357786
-
357786
-        timeout = SCALE_MS;
357786
-    }
357786
-
357786
-
357786
-    if (timeout) {
357786
-        spin_counter = 0;
357786
-    } else {
357786
-        spin_counter++;
357786
-    }
357786
     qemu_mutex_unlock_iothread();
357786
     replay_mutex_unlock();
357786
 
357786
-- 
357786
1.8.3.1
357786