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

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