aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHeiko Carstens <heiko.carstens@de.ibm.com>2014-01-01 10:36:07 -0500
committerChristian Borntraeger <borntraeger@de.ibm.com>2014-04-22 07:24:40 -0400
commit81480cc19c56efb573c63d89c46797d34fe58f27 (patch)
treeb8a70fa523d97fd914629317325e32c5ba5299d2
parent0f9701c6c2b39588971f4634dfcb10199941ce7a (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.c9
-rw-r--r--arch/s390/kvm/kvm-s390.c5
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);