diff mbox series

cpus: tcg: fix never exiting loop on unplug

Message ID 20180425131828.15604-1-clg@kaod.org
State New
Headers show
Series cpus: tcg: fix never exiting loop on unplug | expand

Commit Message

Cédric Le Goater April 25, 2018, 1:18 p.m. UTC
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>
---
 cpus.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Paolo Bonzini April 25, 2018, 1:30 p.m. UTC | #1
On 25/04/2018 15:18, Cédric Le Goater wrote:
> 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>
> ---
>  cpus.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/cpus.c b/cpus.c
> index 38eba8bff334..e1d94038fd0d 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();
> 

Cc: qemu-stable@nongnu.org

Queued, thanks.

Paolo
diff mbox series

Patch

diff --git a/cpus.c b/cpus.c
index 38eba8bff334..e1d94038fd0d 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();