qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH 4/5] arm: boot: Use cpu_set_pc


From: Peter Maydell
Subject: Re: [Qemu-devel] [PATCH 4/5] arm: boot: Use cpu_set_pc
Date: Mon, 15 Jun 2015 08:37:55 +0100

On 15 June 2015 at 04:48, Peter Crosthwaite <address@hidden> wrote:
> Use cpu_set_pc across the board for setting program counters. This
> removes instances of system level code having to reach into the CPU
> env.
>
> Signed-off-by: Peter Crosthwaite <address@hidden>
> ---
>  hw/arm/boot.c | 16 ++++------------
>  1 file changed, 4 insertions(+), 12 deletions(-)
>
> diff --git a/hw/arm/boot.c b/hw/arm/boot.c
> index d036624..324ba6d 100644
> --- a/hw/arm/boot.c
> +++ b/hw/arm/boot.c
> @@ -168,11 +168,9 @@ static void default_write_secondary(ARMCPU *cpu,
>  static void default_reset_secondary(ARMCPU *cpu,
>                                      const struct arm_boot_info *info)
>  {
> -    CPUARMState *env = &cpu->env;
> -
>      address_space_stl_notdirty(&address_space_memory, info->smp_bootreg_addr,
>                                 0, MEMTXATTRS_UNSPECIFIED, NULL);
> -    env->regs[15] = info->smp_loader_start;
> +    cpu_set_pc(CPU(cpu), info->smp_loader_start, &error_abort);
>  }
>
>  static inline bool have_dtb(const struct arm_boot_info *info)
> @@ -452,12 +450,10 @@ static void do_cpu_reset(void *opaque)
>      if (info) {
>          if (!info->is_linux) {
>              /* Jump to the entry point.  */
> -            if (env->aarch64) {
> -                env->pc = info->entry;
> -            } else {
> -                env->regs[15] = info->entry & 0xfffffffe;
> +            if (!env->aarch64) {
>                  env->thumb = info->entry & 1;
>              }
> +            cpu_set_pc(CPU(cpu), info->entry, &error_abort);

Code like this is really wanting to call a "set PC and Thumb"
function, ie an interworking-aware set-pc.

-- PMM



reply via email to

[Prev in Thread] Current Thread [Next in Thread]