]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
virtio_balloon: don't softlockup on huge balloon changes.
authorRusty Russell <rusty@rustcorp.com.au>
Thu, 13 Mar 2014 00:53:38 +0000 (11:23 +1030)
committerRusty Russell <rusty@rustcorp.com.au>
Thu, 13 Mar 2014 00:57:55 +0000 (11:27 +1030)
When adding or removing 100G from a balloon:

    BUG: soft lockup - CPU#0 stuck for 22s! [vballoon:367]

We have a wait_event_interruptible(), but the condition is always true
(more ballooning to do) so we don't ever sleep.  We also have a
wait_event() for the host to ack, but that is also always true as QEMU
is synchronous for balloon operations.

Reported-by: Gopesh Kumar Chaudhary <gopchaud@in.ibm.com>
Cc: stable@kernel.org
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
drivers/virtio/virtio_balloon.c

index 34bdabaecbd6809c3f9fe2b6ffbf0d486d5a68dc..36e7859a31aaae749c47310421116b237f249c91 100644 (file)
@@ -310,6 +310,12 @@ static int balloon(void *_vballoon)
                else if (diff < 0)
                        leak_balloon(vb, -diff);
                update_balloon_size(vb);
+
+               /*
+                * For large balloon changes, we could spend a lot of time
+                * and always have work to do.  Be nice if preempt disabled.
+                */
+               cond_resched();
        }
        return 0;
 }