Commit 22d768c3 authored by Janosch Frank's avatar Janosch Frank Committed by Christian Borntraeger

KVM: s390: protvirt: Write sthyi data to instruction data area

STHYI data has to go through the bounce buffer.
Signed-off-by: default avatarJanosch Frank <frankja@linux.ibm.com>
Reviewed-by: default avatarThomas Huth <thuth@redhat.com>
Reviewed-by: default avatarCornelia Huck <cohuck@redhat.com>
[borntraeger@de.ibm.com: patch merging, splitting, fixing]
Signed-off-by: default avatarChristian Borntraeger <borntraeger@de.ibm.com>
parent 53227810
...@@ -392,7 +392,7 @@ int handle_sthyi(struct kvm_vcpu *vcpu) ...@@ -392,7 +392,7 @@ int handle_sthyi(struct kvm_vcpu *vcpu)
goto out; goto out;
} }
if (addr & ~PAGE_MASK) if (!kvm_s390_pv_cpu_is_protected(vcpu) && (addr & ~PAGE_MASK))
return kvm_s390_inject_program_int(vcpu, PGM_SPECIFICATION); return kvm_s390_inject_program_int(vcpu, PGM_SPECIFICATION);
sctns = (void *)get_zeroed_page(GFP_KERNEL); sctns = (void *)get_zeroed_page(GFP_KERNEL);
...@@ -403,10 +403,15 @@ int handle_sthyi(struct kvm_vcpu *vcpu) ...@@ -403,10 +403,15 @@ int handle_sthyi(struct kvm_vcpu *vcpu)
out: out:
if (!cc) { if (!cc) {
r = write_guest(vcpu, addr, reg2, sctns, PAGE_SIZE); if (kvm_s390_pv_cpu_is_protected(vcpu)) {
if (r) { memcpy((void *)(sida_origin(vcpu->arch.sie_block)),
free_page((unsigned long)sctns); sctns, PAGE_SIZE);
return kvm_s390_inject_prog_cond(vcpu, r); } else {
r = write_guest(vcpu, addr, reg2, sctns, PAGE_SIZE);
if (r) {
free_page((unsigned long)sctns);
return kvm_s390_inject_prog_cond(vcpu, r);
}
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment