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: Heiko Carstens <heiko.carstens@de.ibm.com> Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
This commit is contained in:
parent
81480cc19c
commit
0040e7d20f
@ -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);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user