48 lines
1.5 KiB
Diff
48 lines
1.5 KiB
Diff
|
From b75d0d531a92be9c7d4f8dbbb9ebf7d0cb6b4423 Mon Sep 17 00:00:00 2001
|
||
|
From: =?UTF-8?q?C=C3=A9dric=20Le=20Goater?= <clg@kaod.org>
|
||
|
Date: Wed, 25 Apr 2018 15:18:28 +0200
|
||
|
Subject: [PATCH] cpus: tcg: fix never exiting loop on unplug
|
||
|
MIME-Version: 1.0
|
||
|
Content-Type: text/plain; charset=UTF-8
|
||
|
Content-Transfer-Encoding: 8bit
|
||
|
|
||
|
Commit 9b0605f9837b ("cpus: tcg: unregister thread with RCU, fix
|
||
|
exiting of loop on unplug") changed the exit condition of the loop in
|
||
|
the vCPU thread function but forgot to remove the beginning 'while (1)'
|
||
|
statement. The resulting code :
|
||
|
|
||
|
while (1) {
|
||
|
...
|
||
|
} while (!cpu->unplug || cpu_can_run(cpu));
|
||
|
|
||
|
is a sequence of two distinct two while() loops, the first not exiting
|
||
|
in case of an unplug event.
|
||
|
|
||
|
Remove the first while (1) to fix CPU unplug.
|
||
|
|
||
|
Signed-off-by: Cédric Le Goater <clg@kaod.org>
|
||
|
Message-Id: <20180425131828.15604-1-clg@kaod.org>
|
||
|
Cc: qemu-stable@nongnu.org
|
||
|
Fixes: 9b0605f9837b68fd56c7fc7c96a3a1a3b983687d
|
||
|
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
|
||
|
Signed-off-by: Cédric Le Goater <clg@kaod.org>
|
||
|
(cherry picked from commit 54961aac190df28d311802364d19e18d5cda8bab)
|
||
|
Signed-off-by: Bruce Rogers <brogers@suse.com>
|
||
|
---
|
||
|
cpus.c | 2 +-
|
||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||
|
|
||
|
diff --git a/cpus.c b/cpus.c
|
||
|
index ef39603cf9..b13112b8e2 100644
|
||
|
--- a/cpus.c
|
||
|
+++ b/cpus.c
|
||
|
@@ -1648,7 +1648,7 @@ static void *qemu_tcg_cpu_thread_fn(void *arg)
|
||
|
/* process any pending work */
|
||
|
cpu->exit_request = 1;
|
||
|
|
||
|
- while (1) {
|
||
|
+ do {
|
||
|
if (cpu_can_run(cpu)) {
|
||
|
int r;
|
||
|
qemu_mutex_unlock_iothread();
|