On Wed, Oct 17, 2012 at 10:12 AM, Marc Zyngier <marc.zyngier@xxxxxxx> wrote: > 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 > looks good, thanks. _______________________________________________ kvmarm mailing list kvmarm@xxxxxxxxxxxxxxxxxxxxx https://lists.cs.columbia.edu/cucslists/listinfo/kvmarm