diff options
author | Benjamin Segall <bsegall@google.com> | 2021-04-29 16:22:34 +0000 |
---|---|---|
committer | Paolo Bonzini <pbonzini@redhat.com> | 2021-05-03 11:25:36 -0400 |
commit | 262de4102c7bb8e59f26a967a8ffe8cce85cc537 (patch) | |
tree | 5edd83d866953237b4971e9c1ab9e60d7bc416e9 | |
parent | d981dd15498b188636ec5a7d8ad485e650f63d8d (diff) | |
download | linux-262de4102c7bb8e59f26a967a8ffe8cce85cc537.tar.gz linux-262de4102c7bb8e59f26a967a8ffe8cce85cc537.tar.bz2 linux-262de4102c7bb8e59f26a967a8ffe8cce85cc537.zip |
kvm: exit halt polling on need_resched() as well
single_task_running() is usually more general than need_resched()
but CFS_BANDWIDTH throttling will use resched_task() when there
is just one task to get the task to block. This was causing
long-need_resched warnings and was likely allowing VMs to
overrun their quota when halt polling.
Signed-off-by: Ben Segall <bsegall@google.com>
Signed-off-by: Venkatesh Srinivas <venkateshs@chromium.org>
Message-Id: <20210429162233.116849-1-venkateshs@chromium.org>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Cc: stable@vger.kernel.org
Reviewed-by: Jim Mattson <jmattson@google.com>
-rw-r--r-- | virt/kvm/kvm_main.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c index 2799c6660cce..b9f12da6af0e 100644 --- a/virt/kvm/kvm_main.c +++ b/virt/kvm/kvm_main.c @@ -2973,7 +2973,8 @@ void kvm_vcpu_block(struct kvm_vcpu *vcpu) goto out; } poll_end = cur = ktime_get(); - } while (single_task_running() && ktime_before(cur, stop)); + } while (single_task_running() && !need_resched() && + ktime_before(cur, stop)); } prepare_to_rcuwait(&vcpu->wait); |