summaryrefslogtreecommitdiffstats
path: root/arch/s390/kvm
diff options
context:
space:
mode:
authorSean Christopherson <seanjc@google.com>2021-10-09 04:12:01 +0200
committerPaolo Bonzini <pbonzini@redhat.com>2021-12-08 10:24:48 +0100
commit75c89e5272fba7f8c8c4e4d7dc23be1b82e4b2d8 (patch)
treee1fa7ba96ac02cd591860cd57753e6c120b16f04 /arch/s390/kvm
parentKVM: Reconcile discrepancies in halt-polling stats (diff)
downloadlinux-75c89e5272fba7f8c8c4e4d7dc23be1b82e4b2d8.tar.xz
linux-75c89e5272fba7f8c8c4e4d7dc23be1b82e4b2d8.zip
KVM: s390: Clear valid_wakeup in kvm_s390_handle_wait(), not in arch hook
Move the clearing of valid_wakeup from kvm_arch_vcpu_block_finish() so that a future patch can drop said arch hook. Unlike the other blocking- related arch hooks, vcpu_blocking/unblocking(), vcpu_block_finish() needs to be called even if the KVM doesn't actually block the vCPU. This will allow future patches to differentiate between truly blocking the vCPU and emulating a halt condition without introducing a contradiction. Alternatively, the hook could be renamed to kvm_arch_vcpu_halt_finish(), but there's literally one call site in s390, and future cleanup can also be done to handle valid_wakeup fully within kvm_s390_handle_wait() and allow generic KVM to drop vcpu_valid_wakeup(). No functional change intended. Reviewed-by: Christian Borntraeger <borntraeger@de.ibm.com> Signed-off-by: Sean Christopherson <seanjc@google.com> Message-Id: <20211009021236.4122790-9-seanjc@google.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Diffstat (limited to 'arch/s390/kvm')
-rw-r--r--arch/s390/kvm/interrupt.c1
-rw-r--r--arch/s390/kvm/kvm-s390.c2
2 files changed, 2 insertions, 1 deletions
diff --git a/arch/s390/kvm/interrupt.c b/arch/s390/kvm/interrupt.c
index 1aa094810f6d..3c8246fa208b 100644
--- a/arch/s390/kvm/interrupt.c
+++ b/arch/s390/kvm/interrupt.c
@@ -1336,6 +1336,7 @@ int kvm_s390_handle_wait(struct kvm_vcpu *vcpu)
no_timer:
srcu_read_unlock(&vcpu->kvm->srcu, vcpu->srcu_idx);
kvm_vcpu_block(vcpu);
+ vcpu->valid_wakeup = false;
__unset_cpu_idle(vcpu);
vcpu->srcu_idx = srcu_read_lock(&vcpu->kvm->srcu);
diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c
index 9653e4075b11..8f577c76fcd3 100644
--- a/arch/s390/kvm/kvm-s390.c
+++ b/arch/s390/kvm/kvm-s390.c
@@ -5049,7 +5049,7 @@ static inline unsigned long nonhyp_mask(int i)
void kvm_arch_vcpu_block_finish(struct kvm_vcpu *vcpu)
{
- vcpu->valid_wakeup = false;
+
}
static int __init kvm_s390_init(void)