Instead of directly accessing PC and CPSR in the register structure, use the defined accessors. Signed-off-by: Marc Zyngier <marc.zyngier@xxxxxxx> --- arch/arm/kvm/arm.c | 8 ++++---- arch/arm/kvm/coproc.c | 2 +- arch/arm/kvm/coproc.h | 4 ++-- arch/arm/kvm/emulate.c | 7 +++---- arch/arm/kvm/mmu.c | 6 +++--- 5 files changed, 13 insertions(+), 14 deletions(-) diff --git a/arch/arm/kvm/arm.c b/arch/arm/kvm/arm.c index 0606759..79ea0b5 100644 --- a/arch/arm/kvm/arm.c +++ b/arch/arm/kvm/arm.c @@ -471,7 +471,7 @@ static int handle_hvc(struct kvm_vcpu *vcpu, struct kvm_run *run) * Let it know we don't want that by injecting an undefined exception. */ kvm_debug("hvc: %x (at %08lx)", vcpu->arch.hsr & ((1 << 16) - 1), - vcpu->arch.regs.usr_regs.ARM_pc); + *vcpu_pc(vcpu)); kvm_debug(" HSR: %8x", vcpu->arch.hsr); kvm_inject_undefined(vcpu); return 1; @@ -480,7 +480,7 @@ static int handle_hvc(struct kvm_vcpu *vcpu, struct kvm_run *run) static int handle_smc(struct kvm_vcpu *vcpu, struct kvm_run *run) { /* We don't support SMC; don't do that. */ - kvm_debug("smc: at %08lx", vcpu->arch.regs.usr_regs.ARM_pc); + kvm_debug("smc: at %08lx", *vcpu_pc(vcpu)); kvm_inject_undefined(vcpu); return 1; } @@ -675,7 +675,7 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu, struct kvm_run *run) /************************************************************** * Enter the guest */ - trace_kvm_entry(vcpu->arch.regs.usr_regs.ARM_pc); + trace_kvm_entry(*vcpu_pc(vcpu)); kvm_guest_enter(); vcpu->mode = IN_GUEST_MODE; @@ -690,7 +690,7 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu, struct kvm_run *run) vcpu->mode = OUTSIDE_GUEST_MODE; vcpu->arch.last_pcpu = smp_processor_id(); kvm_guest_exit(); - trace_kvm_exit(vcpu->arch.regs.usr_regs.ARM_pc); + trace_kvm_exit(*vcpu_pc(vcpu)); /* * We may have taken a host interrupt in HYP mode (ie * while executing the guest). This interrupt is still diff --git a/arch/arm/kvm/coproc.c b/arch/arm/kvm/coproc.c index 7006c55..ea646ae 100644 --- a/arch/arm/kvm/coproc.c +++ b/arch/arm/kvm/coproc.c @@ -295,7 +295,7 @@ static int emulate_cp15(struct kvm_vcpu *vcpu, /* If access function fails, it should complain. */ } else { kvm_err("Unsupported guest CP15 access at: %08lx\n", - vcpu->arch.regs.usr_regs.ARM_pc); + *vcpu_pc(vcpu)); print_cp_instr(params); } kvm_inject_undefined(vcpu); diff --git a/arch/arm/kvm/coproc.h b/arch/arm/kvm/coproc.h index 0f4bf0b..b7301d3 100644 --- a/arch/arm/kvm/coproc.h +++ b/arch/arm/kvm/coproc.h @@ -85,7 +85,7 @@ static inline bool write_to_read_only(struct kvm_vcpu *vcpu, const struct coproc_params *params) { kvm_debug("CP15 write to read-only register at: %08lx\n", - vcpu->arch.regs.usr_regs.ARM_pc); + *vcpu_pc(vcpu)); print_cp_instr(params); return false; } @@ -94,7 +94,7 @@ static inline bool read_from_write_only(struct kvm_vcpu *vcpu, const struct coproc_params *params) { kvm_debug("CP15 read to write-only register at: %08lx\n", - vcpu->arch.regs.usr_regs.ARM_pc); + *vcpu_pc(vcpu)); print_cp_instr(params); return false; } diff --git a/arch/arm/kvm/emulate.c b/arch/arm/kvm/emulate.c index 995c59f..5c80265 100644 --- a/arch/arm/kvm/emulate.c +++ b/arch/arm/kvm/emulate.c @@ -171,7 +171,7 @@ u32 *vcpu_spsr(struct kvm_vcpu *vcpu) */ int kvm_handle_wfi(struct kvm_vcpu *vcpu, struct kvm_run *run) { - trace_kvm_wfi(vcpu->arch.regs.usr_regs.ARM_pc); + trace_kvm_wfi(*vcpu_pc(vcpu)); kvm_vcpu_block(vcpu); return 1; } @@ -332,8 +332,7 @@ static unsigned long ls_word_calc_offset(struct kvm_vcpu *vcpu, break; case SCALE_SHIFT_ROR_RRX: if (shift_imm == 0) { - u32 C = (vcpu->arch.regs.usr_regs.ARM_cpsr & - (1U << PSR_BIT_C)); + u32 C = (*vcpu_cpsr(vcpu) & (1U << PSR_BIT_C)); offset = (C << 31) | offset >> 1; } else { /* Ensure arithmetic shift */ @@ -594,7 +593,7 @@ int kvm_emulate_mmio_ls(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa, { bool is_thumb; - trace_kvm_mmio_emulate(vcpu->arch.regs.usr_regs.ARM_pc, instr, vcpu->arch.regs.usr_regs.ARM_cpsr); + trace_kvm_mmio_emulate(*vcpu_pc(vcpu), instr, *vcpu_cpsr(vcpu)); mmio->phys_addr = fault_ipa; is_thumb = !!(*vcpu_cpsr(vcpu) & PSR_T_BIT); diff --git a/arch/arm/kvm/mmu.c b/arch/arm/kvm/mmu.c index e5226e6..d41b60d 100644 --- a/arch/arm/kvm/mmu.c +++ b/arch/arm/kvm/mmu.c @@ -703,10 +703,10 @@ static bool copy_current_insn(struct kvm_vcpu *vcpu, unsigned long *instr) is_thumb = !!(*vcpu_cpsr(vcpu) & PSR_T_BIT); instr_len = (is_thumb) ? 2 : 4; - BUG_ON(!is_thumb && vcpu->arch.regs.usr_regs.ARM_pc & 0x3); + BUG_ON(!is_thumb && *vcpu_pc(vcpu) & 0x3); /* Now guest isn't running, we can va->pa map and copy atomically. */ - ret = copy_from_guest_va(vcpu, instr, vcpu->arch.regs.usr_regs.ARM_pc, instr_len, + ret = copy_from_guest_va(vcpu, instr, *vcpu_pc(vcpu), instr_len, vcpu_mode_priv(vcpu)); if (!ret) goto out; @@ -714,7 +714,7 @@ static bool copy_current_insn(struct kvm_vcpu *vcpu, unsigned long *instr) /* A 32-bit thumb2 instruction can actually go over a page boundary! */ if (is_thumb && is_wide_instruction(*instr)) { *instr = *instr << 16; - ret = copy_from_guest_va(vcpu, instr, vcpu->arch.regs.usr_regs.ARM_pc + 2, 2, + ret = copy_from_guest_va(vcpu, instr, *vcpu_pc(vcpu) + 2, 2, vcpu_mode_priv(vcpu)); } -- 1.7.12 _______________________________________________ kvmarm mailing list kvmarm@xxxxxxxxxxxxxxxxxxxxx https://lists.cs.columbia.edu/cucslists/listinfo/kvmarm