提交 0040e7d2 编写于 作者: H Heiko Carstens 提交者: Christian Borntraeger

KVM: s390: convert handle_prog()

Convert handle_prog() to new guest access functions.
Also make the code a bit more readable and look at the return code
of write_guest_lc() which was missing before.
Signed-off-by: NHeiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: NChristian Borntraeger <borntraeger@de.ibm.com>
上级 81480cc1
...@@ -111,18 +111,22 @@ static int handle_instruction(struct kvm_vcpu *vcpu) ...@@ -111,18 +111,22 @@ static int handle_instruction(struct kvm_vcpu *vcpu)
static int handle_prog(struct kvm_vcpu *vcpu) static int handle_prog(struct kvm_vcpu *vcpu)
{ {
struct kvm_s390_itdb *itdb;
int rc;
vcpu->stat.exit_program_interruption++; vcpu->stat.exit_program_interruption++;
/* Restore ITDB to Program-Interruption TDB in guest memory */ /* Restore ITDB to Program-Interruption TDB in guest memory */
if (IS_TE_ENABLED(vcpu) && if (!IS_TE_ENABLED(vcpu) || !IS_ITDB_VALID(vcpu))
!(current->thread.per_flags & PER_FLAG_NO_TE) && goto skip_itdb;
IS_ITDB_VALID(vcpu)) { if (current->thread.per_flags & PER_FLAG_NO_TE)
copy_to_guest(vcpu, TDB_ADDR, vcpu->arch.sie_block->itdba, goto skip_itdb;
sizeof(struct kvm_s390_itdb)); itdb = (struct kvm_s390_itdb *)vcpu->arch.sie_block->itdba;
memset((void *) vcpu->arch.sie_block->itdba, 0, rc = write_guest_lc(vcpu, TDB_ADDR, itdb, sizeof(*itdb));
sizeof(struct kvm_s390_itdb)); if (rc)
} return rc;
memset(itdb, 0, sizeof(*itdb));
skip_itdb:
trace_kvm_s390_intercept_prog(vcpu, vcpu->arch.sie_block->iprcc); trace_kvm_s390_intercept_prog(vcpu, vcpu->arch.sie_block->iprcc);
return kvm_s390_inject_program_int(vcpu, vcpu->arch.sie_block->iprcc); return kvm_s390_inject_program_int(vcpu, vcpu->arch.sie_block->iprcc);
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册