aboutsummaryrefslogtreecommitdiffstats
path: root/arch/s390/kvm
diff options
context:
space:
mode:
authorDavid Hildenbrand <dahi@linux.vnet.ibm.com>2015-05-12 02:41:40 -0400
committerChristian Borntraeger <borntraeger@de.ibm.com>2015-06-02 03:38:01 -0400
commit61a6df54b64913defc64c87a05d5d258a2020fb5 (patch)
tree7ea9c20fc83b663729d8427924df48e4064aa81a /arch/s390/kvm
parent06b36753a6466239fc945b6756e12d635621ae5f (diff)
KVM: s390: call exit_sie() directly on vcpu block/request
Thinking about it, I can't find a real use case where we want to block a VCPU and not kick it out of SIE. (except if we want to do the same in batch for multiple VCPUs - but that's a micro optimization) So let's simply perform the exit_sie() calls directly when setting the other magic block bits in the SIE. Otherwise e.g. kvm_s390_set_tod_low() still has other VCPUs running after that call, working with a wrong epoch. Fixes: 27406cd50c ("KVM: s390: provide functions for blocking all CPUs") Acked-by: Christian Borntraeger <borntraeger@de.ibm.com> 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')
-rw-r--r--arch/s390/kvm/kvm-s390.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c
index 6bc69ab5b5b4..f37557bc2512 100644
--- a/arch/s390/kvm/kvm-s390.c
+++ b/arch/s390/kvm/kvm-s390.c
@@ -1417,6 +1417,7 @@ int kvm_arch_vcpu_runnable(struct kvm_vcpu *vcpu)
1417void kvm_s390_vcpu_block(struct kvm_vcpu *vcpu) 1417void kvm_s390_vcpu_block(struct kvm_vcpu *vcpu)
1418{ 1418{
1419 atomic_set_mask(PROG_BLOCK_SIE, &vcpu->arch.sie_block->prog20); 1419 atomic_set_mask(PROG_BLOCK_SIE, &vcpu->arch.sie_block->prog20);
1420 exit_sie(vcpu);
1420} 1421}
1421 1422
1422void kvm_s390_vcpu_unblock(struct kvm_vcpu *vcpu) 1423void kvm_s390_vcpu_unblock(struct kvm_vcpu *vcpu)
@@ -1427,6 +1428,7 @@ void kvm_s390_vcpu_unblock(struct kvm_vcpu *vcpu)
1427static void kvm_s390_vcpu_request(struct kvm_vcpu *vcpu) 1428static void kvm_s390_vcpu_request(struct kvm_vcpu *vcpu)
1428{ 1429{
1429 atomic_set_mask(PROG_REQUEST, &vcpu->arch.sie_block->prog20); 1430 atomic_set_mask(PROG_REQUEST, &vcpu->arch.sie_block->prog20);
1431 exit_sie(vcpu);
1430} 1432}
1431 1433
1432static void kvm_s390_vcpu_request_handled(struct kvm_vcpu *vcpu) 1434static void kvm_s390_vcpu_request_handled(struct kvm_vcpu *vcpu)
@@ -1450,7 +1452,6 @@ void kvm_s390_sync_request(int req, struct kvm_vcpu *vcpu)
1450{ 1452{
1451 kvm_make_request(req, vcpu); 1453 kvm_make_request(req, vcpu);
1452 kvm_s390_vcpu_request(vcpu); 1454 kvm_s390_vcpu_request(vcpu);
1453 exit_sie(vcpu);
1454} 1455}
1455 1456
1456static void kvm_gmap_notifier(struct gmap *gmap, unsigned long address) 1457static void kvm_gmap_notifier(struct gmap *gmap, unsigned long address)