diff options
author | Heiko Carstens <heiko.carstens@de.ibm.com> | 2014-01-01 10:36:07 -0500 |
---|---|---|
committer | Christian Borntraeger <borntraeger@de.ibm.com> | 2014-04-22 07:24:40 -0400 |
commit | 81480cc19c56efb573c63d89c46797d34fe58f27 (patch) | |
tree | b8a70fa523d97fd914629317325e32c5ba5299d2 | |
parent | 0f9701c6c2b39588971f4634dfcb10199941ce7a (diff) |
KVM: s390: convert pfault code
Convert pfault code to new guest access functions.
Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Reviewed-by: Dominik Dingel <dingel@linux.vnet.ibm.com>
Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
-rw-r--r-- | arch/s390/kvm/diag.c | 9 | ||||
-rw-r--r-- | arch/s390/kvm/kvm-s390.c | 5 |
2 files changed, 7 insertions, 7 deletions
diff --git a/arch/s390/kvm/diag.c b/arch/s390/kvm/diag.c index ff768f1dd337..5521ace8b60d 100644 --- a/arch/s390/kvm/diag.c +++ b/arch/s390/kvm/diag.c | |||
@@ -64,12 +64,12 @@ static int __diag_page_ref_service(struct kvm_vcpu *vcpu) | |||
64 | int rc; | 64 | int rc; |
65 | u16 rx = (vcpu->arch.sie_block->ipa & 0xf0) >> 4; | 65 | u16 rx = (vcpu->arch.sie_block->ipa & 0xf0) >> 4; |
66 | u16 ry = (vcpu->arch.sie_block->ipa & 0x0f); | 66 | u16 ry = (vcpu->arch.sie_block->ipa & 0x0f); |
67 | unsigned long hva_token = KVM_HVA_ERR_BAD; | ||
68 | 67 | ||
69 | if (vcpu->run->s.regs.gprs[rx] & 7) | 68 | if (vcpu->run->s.regs.gprs[rx] & 7) |
70 | return kvm_s390_inject_program_int(vcpu, PGM_SPECIFICATION); | 69 | return kvm_s390_inject_program_int(vcpu, PGM_SPECIFICATION); |
71 | if (copy_from_guest(vcpu, &parm, vcpu->run->s.regs.gprs[rx], sizeof(parm))) | 70 | rc = read_guest(vcpu, vcpu->run->s.regs.gprs[rx], &parm, sizeof(parm)); |
72 | return kvm_s390_inject_program_int(vcpu, PGM_ADDRESSING); | 71 | if (rc) |
72 | return kvm_s390_inject_prog_cond(vcpu, rc); | ||
73 | if (parm.parm_version != 2 || parm.parm_len < 5 || parm.code != 0x258) | 73 | if (parm.parm_version != 2 || parm.parm_len < 5 || parm.code != 0x258) |
74 | return kvm_s390_inject_program_int(vcpu, PGM_SPECIFICATION); | 74 | return kvm_s390_inject_program_int(vcpu, PGM_SPECIFICATION); |
75 | 75 | ||
@@ -89,8 +89,7 @@ static int __diag_page_ref_service(struct kvm_vcpu *vcpu) | |||
89 | parm.token_addr & 7 || parm.zarch != 0x8000000000000000ULL) | 89 | parm.token_addr & 7 || parm.zarch != 0x8000000000000000ULL) |
90 | return kvm_s390_inject_program_int(vcpu, PGM_SPECIFICATION); | 90 | return kvm_s390_inject_program_int(vcpu, PGM_SPECIFICATION); |
91 | 91 | ||
92 | hva_token = gfn_to_hva(vcpu->kvm, gpa_to_gfn(parm.token_addr)); | 92 | if (kvm_is_error_gpa(vcpu->kvm, parm.token_addr)) |
93 | if (kvm_is_error_hva(hva_token)) | ||
94 | return kvm_s390_inject_program_int(vcpu, PGM_ADDRESSING); | 93 | return kvm_s390_inject_program_int(vcpu, PGM_ADDRESSING); |
95 | 94 | ||
96 | vcpu->arch.pfault_token = parm.token_addr; | 95 | vcpu->arch.pfault_token = parm.token_addr; |
diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c index e1dfe2461d4b..6cee19c7ad74 100644 --- a/arch/s390/kvm/kvm-s390.c +++ b/arch/s390/kvm/kvm-s390.c | |||
@@ -1058,8 +1058,9 @@ static int kvm_arch_setup_async_pf(struct kvm_vcpu *vcpu) | |||
1058 | if (!vcpu->arch.gmap->pfault_enabled) | 1058 | if (!vcpu->arch.gmap->pfault_enabled) |
1059 | return 0; | 1059 | return 0; |
1060 | 1060 | ||
1061 | hva = gmap_fault(current->thread.gmap_addr, vcpu->arch.gmap); | 1061 | hva = gfn_to_hva(vcpu->kvm, gpa_to_gfn(current->thread.gmap_addr)); |
1062 | if (copy_from_guest(vcpu, &arch.pfault_token, vcpu->arch.pfault_token, 8)) | 1062 | hva += current->thread.gmap_addr & ~PAGE_MASK; |
1063 | if (read_guest_real(vcpu, vcpu->arch.pfault_token, &arch.pfault_token, 8)) | ||
1063 | return 0; | 1064 | return 0; |
1064 | 1065 | ||
1065 | rc = kvm_setup_async_pf(vcpu, current->thread.gmap_addr, hva, &arch); | 1066 | rc = kvm_setup_async_pf(vcpu, current->thread.gmap_addr, hva, &arch); |