From: Rusty Russell <rusty at rustcorp.com.au> Simplifies error handling into the parent: all errors mean "can't emulate". Signed-off-by: Rusty Russell <rusty at rustcorp.com.au> --- arch/arm/kvm/emulate.c | 44 ++++++++++++++++++++++---------------------- 1 files changed, 22 insertions(+), 22 deletions(-) diff --git a/arch/arm/kvm/emulate.c b/arch/arm/kvm/emulate.c index 11ab0a9..8208297 100644 --- a/arch/arm/kvm/emulate.c +++ b/arch/arm/kvm/emulate.c @@ -212,8 +212,8 @@ int kvm_handle_cp14_access(struct kvm_vcpu *vcpu, struct kvm_run *run) * @vcpu: The VCPU pointer * @p: The coprocessor parameters struct pointer holding trap inst. details */ -static int emulate_cp15_c9_access(struct kvm_vcpu *vcpu, - const struct coproc_params *p) +static bool emulate_cp15_c9_access(struct kvm_vcpu *vcpu, + const struct coproc_params *p) { BUG_ON(p->CRn != 9); BUG_ON(p->is_64bit); @@ -223,7 +223,7 @@ static int emulate_cp15_c9_access(struct kvm_vcpu *vcpu, u32 l2ctlr, ncores; if (p->is_write) - return 0; + return true; asm volatile("mrc p15, 1, %0, c9, c0, 2\n" : "=r" (l2ctlr)); l2ctlr &= ~(3 << 24); @@ -231,13 +231,13 @@ static int emulate_cp15_c9_access(struct kvm_vcpu *vcpu, l2ctlr |= (ncores & 3) << 24; *vcpu_reg(vcpu, p->Rt1) = l2ctlr; - return 0; + return true; } /* hack alert!!! */ if (!p->is_write) *vcpu_reg(vcpu, p->Rt1) = 0; - return 0; + return true; } /** @@ -250,8 +250,8 @@ static int emulate_cp15_c9_access(struct kvm_vcpu *vcpu, * host/guest PRRR and NMRR memory remap registers and allow guest direct access * to these registers. */ -static int emulate_cp15_c10_access(struct kvm_vcpu *vcpu, - const struct coproc_params *p) +static bool emulate_cp15_c10_access(struct kvm_vcpu *vcpu, + const struct coproc_params *p) { BUG_ON(p->CRn != 10); BUG_ON(p->is_64bit); @@ -259,7 +259,7 @@ static int emulate_cp15_c10_access(struct kvm_vcpu *vcpu, if ((p->CRm == 0 || p->CRm == 1 || p->CRm == 4 || p->CRm == 8) && (p->Op2 <= 7)) { /* TLB Lockdown operations - ignored */ - return 0; + return true; } /* @@ -270,15 +270,15 @@ static int emulate_cp15_c10_access(struct kvm_vcpu *vcpu, if (p->CRm == 2 && p->Op1 == 0 && p->Op2 == 0) { cp15_op(vcpu, p, c10_PRRR); - return 0; + return true; } if (p->CRm == 2 && p->Op1 == 0 && p->Op2 == 1) { cp15_op(vcpu, p, c10_NMRR); - return 0; + return true; } - return -EINVAL; + return false; } /** @@ -292,8 +292,8 @@ static int emulate_cp15_c10_access(struct kvm_vcpu *vcpu, * * This may need to be refined. */ -static int emulate_cp15_c15_access(struct kvm_vcpu *vcpu, - const struct coproc_params *p) +static bool emulate_cp15_c15_access(struct kvm_vcpu *vcpu, + const struct coproc_params *p) { trace_kvm_emulate_cp15_imp(p->Op1, p->Rt1, p->CRn, p->CRm, p->Op2, p->is_write); @@ -301,14 +301,14 @@ static int emulate_cp15_c15_access(struct kvm_vcpu *vcpu, if (!p->is_write) *vcpu_reg(vcpu, p->Rt1) = 0; - return 0; + return true; } static int emulate_cp15(struct kvm_vcpu *vcpu, const struct coproc_params *params) { unsigned long instr_len; - int ret; + bool ok; /* So far no mrrc/mcrr accesses are emulated */ if (params->is_64bit) @@ -316,32 +316,32 @@ static int emulate_cp15(struct kvm_vcpu *vcpu, switch (params->CRn) { case 9: - ret = emulate_cp15_c9_access(vcpu, params); + ok = emulate_cp15_c9_access(vcpu, params); break; case 10: - ret = emulate_cp15_c10_access(vcpu, params); + ok = emulate_cp15_c10_access(vcpu, params); break; case 15: - ret = emulate_cp15_c15_access(vcpu, params); + ok = emulate_cp15_c15_access(vcpu, params); break; default: - ret = -EINVAL; + ok = false; break; } - if (ret) + if (!ok) goto unsupp_err_out; /* Skip instruction, since it was emulated */ instr_len = ((vcpu->arch.hsr >> 25) & 1) ? 4 : 2; *vcpu_reg(vcpu, 15) += instr_len; - return ret; + return 0; unsupp_err_out: kvm_err("Unsupported guest CP15 access at: %08x\n", vcpu->arch.regs.pc); print_cp_instr(params); - return ret; + return -EINVAL; } /**