summaryrefslogtreecommitdiffstats
path: root/arch/s390/kvm/kvm-s390.c
diff options
context:
space:
mode:
authorDavid Hildenbrand2016-02-22 13:52:27 +0100
committerChristian Borntraeger2016-03-08 13:57:53 +0100
commit5ebda31686af6bb70affdcc5777ebc7ed81c0eac (patch)
treea7adb2bfe6e9ac7581969c37d512064dd3616d61 /arch/s390/kvm/kvm-s390.c
parentKVM: s390: protect VCPU cpu timer with a seqcount (diff)
downloadkernel-qcow2-linux-5ebda31686af6bb70affdcc5777ebc7ed81c0eac.tar.gz
kernel-qcow2-linux-5ebda31686af6bb70affdcc5777ebc7ed81c0eac.tar.xz
kernel-qcow2-linux-5ebda31686af6bb70affdcc5777ebc7ed81c0eac.zip
KVM: s390: step the VCPU timer while in enabled wait
The cpu timer is a mean to measure task execution time. We want to account everything for a VCPU for which it is responsible. Therefore, if the VCPU wants to sleep, it shall be accounted for it. We can easily get this done by not disabling cpu timer accounting when scheduled out while sleeping because of enabled wait. Signed-off-by: David Hildenbrand <dahi@linux.vnet.ibm.com> Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
Diffstat (limited to 'arch/s390/kvm/kvm-s390.c')
-rw-r--r--arch/s390/kvm/kvm-s390.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c
index 38223c4603c7..b54daed49c2c 100644
--- a/arch/s390/kvm/kvm-s390.c
+++ b/arch/s390/kvm/kvm-s390.c
@@ -1538,7 +1538,7 @@ void kvm_arch_vcpu_load(struct kvm_vcpu *vcpu, int cpu)
restore_access_regs(vcpu->run->s.regs.acrs);
gmap_enable(vcpu->arch.gmap);
atomic_or(CPUSTAT_RUNNING, &vcpu->arch.sie_block->cpuflags);
- if (vcpu->arch.cputm_enabled)
+ if (vcpu->arch.cputm_enabled && !is_vcpu_idle(vcpu))
__start_cpu_timer_accounting(vcpu);
vcpu->cpu = cpu;
}
@@ -1546,7 +1546,7 @@ void kvm_arch_vcpu_load(struct kvm_vcpu *vcpu, int cpu)
void kvm_arch_vcpu_put(struct kvm_vcpu *vcpu)
{
vcpu->cpu = -1;
- if (vcpu->arch.cputm_enabled)
+ if (vcpu->arch.cputm_enabled && !is_vcpu_idle(vcpu))
__stop_cpu_timer_accounting(vcpu);
atomic_andnot(CPUSTAT_RUNNING, &vcpu->arch.sie_block->cpuflags);
gmap_disable(vcpu->arch.gmap);