diff options
author | Martin Schwidefsky <schwidefsky@de.ibm.com> | 2013-05-17 12:41:32 (GMT) |
---|---|---|
committer | Gleb Natapov <gleb@redhat.com> | 2013-05-21 08:55:18 (GMT) |
commit | dfcf7dc64237dbe1acc2147ad3552f793003874b (patch) | |
tree | 024f9b943d766bdc67990588643034887c7db135 | |
parent | eed3b1e55be07a057ee41a24f04abffeda7b885f (diff) | |
download | linux-dfcf7dc64237dbe1acc2147ad3552f793003874b.tar.xz |
s390/kvm: fix psw rewinding in handle_skey
The PSW can wrap if the guest has been running in the 24 bit or 31 bit
addressing mode. Use __rewind_psw to find the correct address.
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
Signed-off-by: Gleb Natapov <gleb@redhat.com>
-rw-r--r-- | arch/s390/kvm/priv.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/arch/s390/kvm/priv.c b/arch/s390/kvm/priv.c index 6bbd7b5..ecc58a6 100644 --- a/arch/s390/kvm/priv.c +++ b/arch/s390/kvm/priv.c @@ -105,7 +105,8 @@ static int handle_store_cpu_address(struct kvm_vcpu *vcpu) static int handle_skey(struct kvm_vcpu *vcpu) { vcpu->stat.instruction_storage_key++; - vcpu->arch.sie_block->gpsw.addr -= 4; + vcpu->arch.sie_block->gpsw.addr = + __rewind_psw(vcpu->arch.sie_block->gpsw, 4); VCPU_EVENT(vcpu, 4, "%s", "retrying storage key operation"); return 0; } |