Re: [PATCH 3/7] ARM: KVM: enforce use of vcpu_pc/vcpu_cpsr

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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


[Index of Archives]     [Linux KVM]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux