diff options
author | David Hildenbrand <dahi@linux.vnet.ibm.com> | 2014-10-09 09:01:38 -0400 |
---|---|---|
committer | Christian Borntraeger <borntraeger@de.ibm.com> | 2015-01-23 07:25:36 -0500 |
commit | 9fbd80828cef1b1bba5a293609a021047bb86a7e (patch) | |
tree | ec495e61c2574c9bb76c21840a9c15b50ddec018 /arch/s390/kvm | |
parent | ea5f496925755bc5e13adbdcfcb841bc2848913b (diff) |
KVM: s390: clear the pfault queue if user space sets the invalid token
We need a way to clear the async pfault queue from user space (e.g.
for resets and SIGP SET ARCHITECTURE).
This patch simply clears the queue as soon as user space sets the
invalid pfault token. The definition of the invalid token is moved
to uapi.
Signed-off-by: David Hildenbrand <dahi@linux.vnet.ibm.com>
Acked-by: Cornelia Huck <cornelia.huck@de.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.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c index 9bdc9f927e82..bfb2b990da9b 100644 --- a/arch/s390/kvm/kvm-s390.c +++ b/arch/s390/kvm/kvm-s390.c | |||
@@ -936,6 +936,8 @@ static int kvm_arch_vcpu_ioctl_set_one_reg(struct kvm_vcpu *vcpu, | |||
936 | case KVM_REG_S390_PFTOKEN: | 936 | case KVM_REG_S390_PFTOKEN: |
937 | r = get_user(vcpu->arch.pfault_token, | 937 | r = get_user(vcpu->arch.pfault_token, |
938 | (u64 __user *)reg->addr); | 938 | (u64 __user *)reg->addr); |
939 | if (vcpu->arch.pfault_token == KVM_S390_PFAULT_TOKEN_INVALID) | ||
940 | kvm_clear_async_pf_completion_queue(vcpu); | ||
939 | break; | 941 | break; |
940 | case KVM_REG_S390_PFCOMPARE: | 942 | case KVM_REG_S390_PFCOMPARE: |
941 | r = get_user(vcpu->arch.pfault_compare, | 943 | r = get_user(vcpu->arch.pfault_compare, |
@@ -1408,6 +1410,8 @@ static void sync_regs(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run) | |||
1408 | vcpu->arch.pfault_token = kvm_run->s.regs.pft; | 1410 | vcpu->arch.pfault_token = kvm_run->s.regs.pft; |
1409 | vcpu->arch.pfault_select = kvm_run->s.regs.pfs; | 1411 | vcpu->arch.pfault_select = kvm_run->s.regs.pfs; |
1410 | vcpu->arch.pfault_compare = kvm_run->s.regs.pfc; | 1412 | vcpu->arch.pfault_compare = kvm_run->s.regs.pfc; |
1413 | if (vcpu->arch.pfault_token == KVM_S390_PFAULT_TOKEN_INVALID) | ||
1414 | kvm_clear_async_pf_completion_queue(vcpu); | ||
1411 | } | 1415 | } |
1412 | kvm_run->kvm_dirty_regs = 0; | 1416 | kvm_run->kvm_dirty_regs = 0; |
1413 | } | 1417 | } |