Commit ae232ea4 authored by Sergey Senozhatsky's avatar Sergey Senozhatsky Committed by Paolo Bonzini

KVM: do not shrink halt_poll_ns below grow_start

grow_halt_poll_ns() ignores values between 0 and
halt_poll_ns_grow_start (10000 by default). However,
when we shrink halt_poll_ns we may fall way below
halt_poll_ns_grow_start and endup with halt_poll_ns
values that don't make a lot of sense: like 1 or 9,
or 19.

VCPU1 trace (halt_poll_ns_shrink equals 2):

VCPU1 grow 10000
VCPU1 shrink 5000
VCPU1 shrink 2500
VCPU1 shrink 1250
VCPU1 shrink 625
VCPU1 shrink 312
VCPU1 shrink 156
VCPU1 shrink 78
VCPU1 shrink 39
VCPU1 shrink 19
VCPU1 shrink 9
VCPU1 shrink 4

Mirror what grow_halt_poll_ns() does and set halt_poll_ns
to 0 as soon as new shrink-ed halt_poll_ns value falls
below halt_poll_ns_grow_start.
Signed-off-by: default avatarSergey Senozhatsky <senozhatsky@chromium.org>
Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
Message-Id: <20210902031100.252080-1-senozhatsky@chromium.org>
Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
parent ed7023a1
...@@ -3134,15 +3134,19 @@ static void grow_halt_poll_ns(struct kvm_vcpu *vcpu) ...@@ -3134,15 +3134,19 @@ static void grow_halt_poll_ns(struct kvm_vcpu *vcpu)
static void shrink_halt_poll_ns(struct kvm_vcpu *vcpu) static void shrink_halt_poll_ns(struct kvm_vcpu *vcpu)
{ {
unsigned int old, val, shrink; unsigned int old, val, shrink, grow_start;
old = val = vcpu->halt_poll_ns; old = val = vcpu->halt_poll_ns;
shrink = READ_ONCE(halt_poll_ns_shrink); shrink = READ_ONCE(halt_poll_ns_shrink);
grow_start = READ_ONCE(halt_poll_ns_grow_start);
if (shrink == 0) if (shrink == 0)
val = 0; val = 0;
else else
val /= shrink; val /= shrink;
if (val < grow_start)
val = 0;
vcpu->halt_poll_ns = val; vcpu->halt_poll_ns = val;
trace_kvm_halt_poll_ns_shrink(vcpu->vcpu_id, val, old); trace_kvm_halt_poll_ns_shrink(vcpu->vcpu_id, val, old);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment