From: "Edgar E. Iglesias" <edgar.iglesias@gmail.com>
To: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
Cc: "Peter Maydell" <peter.maydell@linaro.org>,
"Rob Herring" <rob.herring@linaro.org>,
"Alexander Graf" <agraf@suse.de>,
"qemu-devel@nongnu.org Developers" <qemu-devel@nongnu.org>,
"John Williams" <john.williams@xilinx.com>,
"Alex Bennée" <alex.bennee@linaro.org>
Subject: Re: [Qemu-devel] [PATCH v1 02/22] target-arm: Make elr_el1 an array
Date: Thu, 8 May 2014 00:13:28 +0000 [thread overview]
Message-ID: <20140508001328.GE7381@hostname> (raw)
In-Reply-To: <CAEgOgz4nRUmK8_h+qOYu_EKDeyN3_Ha3oi7ZoRUQ3C8ThUfxSQ@mail.gmail.com>
On Wed, May 07, 2014 at 03:10:54PM +1000, Peter Crosthwaite wrote:
> On Tue, May 6, 2014 at 4:08 PM, Edgar E. Iglesias
> <edgar.iglesias@gmail.com> wrote:
> > From: "Edgar E. Iglesias" <edgar.iglesias@xilinx.com>
> >
> > No functional change.
> > Prepares for future additions of the EL2 and 3 versions of this reg.
> >
> > Signed-off-by: Edgar E. Iglesias <edgar.iglesias@xilinx.com>
> > ---
> > target-arm/cpu.h | 3 ++-
> > target-arm/helper-a64.c | 4 ++--
> > target-arm/helper.c | 3 ++-
> > target-arm/kvm64.c | 4 ++--
> > target-arm/machine.c | 2 +-
> > target-arm/op_helper.c | 6 +++---
> > 6 files changed, 12 insertions(+), 10 deletions(-)
> >
> > diff --git a/target-arm/cpu.h b/target-arm/cpu.h
> > index c83f249..eb7a0f5 100644
> > --- a/target-arm/cpu.h
> > +++ b/target-arm/cpu.h
> > @@ -162,7 +162,8 @@ typedef struct CPUARMState {
> > uint32_t condexec_bits; /* IT bits. cpsr[15:10,26:25]. */
> > uint64_t daif; /* exception masks, in the bits they are in in PSTATE */
> >
> > - uint64_t elr_el1; /* AArch64 ELR_EL1 */
> > +#define ELR_EL_IDX(x) (x - 1)
> > + uint64_t elr_el[1]; /* AArch64 exception link regs */
>
> Is it perhaps just easier to waste the space and always pad these
> EL-banked CP arrays out to length 4 you can just use literal numbers
> in the code? Probably make life easier when introspecting the CPU
> state in GDB too.
Thanks Peter,
I've fixed all your comments except this one. I considered this
pattern but avoided it due to the bloating of CPUARMState. Anyway,
I'm happy to change to this full array allocation if others agree.
PMM, what is your preference on this?
Best regards,
Edgar
>
> Regards,
> Peter
>
> > uint64_t sp_el[2]; /* AArch64 banked stack pointers */
> >
> > /* System control coprocessor (cp15) */
> > diff --git a/target-arm/helper-a64.c b/target-arm/helper-a64.c
> > index bf921cc..5adf2b5 100644
> > --- a/target-arm/helper-a64.c
> > +++ b/target-arm/helper-a64.c
> > @@ -491,13 +491,13 @@ void aarch64_cpu_do_interrupt(CPUState *cs)
> > env->banked_spsr[0] = pstate_read(env);
> > env->sp_el[arm_current_pl(env)] = env->xregs[31];
> > env->xregs[31] = env->sp_el[1];
> > - env->elr_el1 = env->pc;
> > + env->elr_el[ELR_EL_IDX(1)] = env->pc;
> > } else {
> > env->banked_spsr[0] = cpsr_read(env);
> > if (!env->thumb) {
> > env->cp15.esr_el1 |= 1 << 25;
> > }
> > - env->elr_el1 = env->regs[15];
> > + env->elr_el[ELR_EL_IDX(1)] = env->regs[15];
> >
> > for (i = 0; i < 15; i++) {
> > env->xregs[i] = env->regs[i];
> > diff --git a/target-arm/helper.c b/target-arm/helper.c
> > index 3be917c..3457d3e 100644
> > --- a/target-arm/helper.c
> > +++ b/target-arm/helper.c
> > @@ -2055,7 +2055,8 @@ static const ARMCPRegInfo v8_cp_reginfo[] = {
> > { .name = "ELR_EL1", .state = ARM_CP_STATE_AA64,
> > .type = ARM_CP_NO_MIGRATE,
> > .opc0 = 3, .opc1 = 0, .crn = 4, .crm = 0, .opc2 = 1,
> > - .access = PL1_RW, .fieldoffset = offsetof(CPUARMState, elr_el1) },
> > + .access = PL1_RW,
> > + .fieldoffset = offsetof(CPUARMState, elr_el[ELR_EL_IDX(1)]) },
> > { .name = "SPSR_EL1", .state = ARM_CP_STATE_AA64,
> > .type = ARM_CP_NO_MIGRATE,
> > .opc0 = 3, .opc1 = 0, .crn = 4, .crm = 0, .opc2 = 0,
> > diff --git a/target-arm/kvm64.c b/target-arm/kvm64.c
> > index e115879..da376cf 100644
> > --- a/target-arm/kvm64.c
> > +++ b/target-arm/kvm64.c
> > @@ -161,7 +161,7 @@ int kvm_arch_put_registers(CPUState *cs, int level)
> > }
> >
> > reg.id = AARCH64_CORE_REG(elr_el1);
> > - reg.addr = (uintptr_t) &env->elr_el1;
> > + reg.addr = (uintptr_t) &env->elr_el[ELR_EL_IDX(1)];
> > ret = kvm_vcpu_ioctl(cs, KVM_SET_ONE_REG, ®);
> > if (ret) {
> > return ret;
> > @@ -241,7 +241,7 @@ int kvm_arch_get_registers(CPUState *cs)
> > }
> >
> > reg.id = AARCH64_CORE_REG(elr_el1);
> > - reg.addr = (uintptr_t) &env->elr_el1;
> > + reg.addr = (uintptr_t) &env->elr_el[ELR_EL_IDX(1)];
> > ret = kvm_vcpu_ioctl(cs, KVM_GET_ONE_REG, ®);
> > if (ret) {
> > return ret;
> > diff --git a/target-arm/machine.c b/target-arm/machine.c
> > index b967223..8b299a0 100644
> > --- a/target-arm/machine.c
> > +++ b/target-arm/machine.c
> > @@ -243,7 +243,7 @@ const VMStateDescription vmstate_arm_cpu = {
> > VMSTATE_UINT32_ARRAY(env.banked_r14, ARMCPU, 6),
> > VMSTATE_UINT32_ARRAY(env.usr_regs, ARMCPU, 5),
> > VMSTATE_UINT32_ARRAY(env.fiq_regs, ARMCPU, 5),
> > - VMSTATE_UINT64(env.elr_el1, ARMCPU),
> > + VMSTATE_UINT64(env.elr_el[ELR_EL_IDX(1)], ARMCPU),
> > VMSTATE_UINT64_ARRAY(env.sp_el, ARMCPU, 2),
> > /* The length-check must come before the arrays to avoid
> > * incoming data possibly overflowing the array.
> > diff --git a/target-arm/op_helper.c b/target-arm/op_helper.c
> > index fb90676..21545d0 100644
> > --- a/target-arm/op_helper.c
> > +++ b/target-arm/op_helper.c
> > @@ -406,7 +406,7 @@ void HELPER(exception_return)(CPUARMState *env)
> > env->regs[i] = env->xregs[i];
> > }
> >
> > - env->regs[15] = env->elr_el1 & ~0x1;
> > + env->regs[15] = env->elr_el[ELR_EL_IDX(1)] & ~0x1;
> > } else {
> > new_el = extract32(spsr, 2, 2);
> > if (new_el > 1) {
> > @@ -424,7 +424,7 @@ void HELPER(exception_return)(CPUARMState *env)
> > env->aarch64 = 1;
> > pstate_write(env, spsr);
> > env->xregs[31] = env->sp_el[new_el];
> > - env->pc = env->elr_el1;
> > + env->pc = env->elr_el[ELR_EL_IDX(1)];
> > }
> >
> > return;
> > @@ -438,7 +438,7 @@ illegal_return:
> > * no change to exception level, execution state or stack pointer
> > */
> > env->pstate |= PSTATE_IL;
> > - env->pc = env->elr_el1;
> > + env->pc = env->elr_el[ELR_EL_IDX(1)];
> > spsr &= PSTATE_NZCV | PSTATE_DAIF;
> > spsr |= pstate_read(env) & ~(PSTATE_NZCV | PSTATE_DAIF);
> > pstate_write(env, spsr);
> > --
> > 1.8.3.2
> >
> >
next prev parent reply other threads:[~2014-05-08 0:13 UTC|newest]
Thread overview: 74+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-05-06 6:08 [Qemu-devel] [PATCH v1 00/22] target-arm: Preparations for A64 EL2 and 3 Edgar E. Iglesias
2014-05-06 6:08 ` [Qemu-devel] [PATCH v1 01/22] target-arm: A64: Add friendly logging of PSTATE A and I flags Edgar E. Iglesias
2014-05-07 5:32 ` Peter Crosthwaite
2014-05-07 8:50 ` Peter Maydell
2014-05-08 0:08 ` Edgar E. Iglesias
2014-05-06 6:08 ` [Qemu-devel] [PATCH v1 02/22] target-arm: Make elr_el1 an array Edgar E. Iglesias
2014-05-07 5:10 ` Peter Crosthwaite
2014-05-08 0:13 ` Edgar E. Iglesias [this message]
2014-05-16 14:19 ` Peter Maydell
2014-05-16 22:19 ` Edgar E. Iglesias
2014-05-16 14:22 ` Peter Maydell
2014-05-16 22:18 ` Edgar E. Iglesias
2014-05-06 6:08 ` [Qemu-devel] [PATCH v1 03/22] target-arm: Make esr_el1 " Edgar E. Iglesias
2014-05-06 6:08 ` [Qemu-devel] [PATCH v1 04/22] target-arm: c12_vbar -> vbar_el[] Edgar E. Iglesias
2014-05-06 6:08 ` [Qemu-devel] [PATCH v1 05/22] target-arm: Add arm_el_to_mmu_idx() Edgar E. Iglesias
2014-05-07 5:43 ` Peter Crosthwaite
2014-05-16 14:24 ` Peter Maydell
2014-05-16 22:10 ` Edgar E. Iglesias
2014-05-16 22:13 ` Alexander Graf
2014-05-17 1:41 ` Edgar E. Iglesias
2014-05-06 6:08 ` [Qemu-devel] [PATCH v1 06/22] target-arm: Move get_mem_index to translate.h Edgar E. Iglesias
2014-05-06 6:08 ` [Qemu-devel] [PATCH v1 07/22] target-arm: A64: Add SP entries for EL2 and 3 Edgar E. Iglesias
2014-05-06 6:08 ` [Qemu-devel] [PATCH v1 08/22] target-arm: A64: Add ELR " Edgar E. Iglesias
2014-05-06 6:08 ` [Qemu-devel] [PATCH v1 09/22] target-arm: Add SPSR entries for EL2/HYP and EL3/MON Edgar E. Iglesias
2014-05-07 5:31 ` Edgar E. Iglesias
2014-05-06 6:08 ` [Qemu-devel] [PATCH v1 10/22] target-arm: A64: Introduce arm64_banked_spsr_index() Edgar E. Iglesias
2014-05-07 5:50 ` Peter Crosthwaite
2014-05-16 14:31 ` Peter Maydell
2014-05-17 2:21 ` Edgar E. Iglesias
2014-05-06 6:08 ` [Qemu-devel] [PATCH v1 11/22] target-arm: Add a feature flag for EL2 Edgar E. Iglesias
2014-05-07 5:50 ` Peter Crosthwaite
2014-05-06 6:08 ` [Qemu-devel] [PATCH v1 12/22] target-arm: Add a feature flag for EL3 Edgar E. Iglesias
2014-05-07 5:51 ` Peter Crosthwaite
2014-05-06 6:08 ` [Qemu-devel] [PATCH v1 13/22] target-arm: Register EL2 versions of ELR and SPSR Edgar E. Iglesias
2014-05-07 6:02 ` Peter Crosthwaite
2014-05-16 14:36 ` Peter Maydell
2014-05-06 6:08 ` [Qemu-devel] [PATCH v1 14/22] target-arm: Register EL3 " Edgar E. Iglesias
2014-05-07 6:02 ` Peter Crosthwaite
2014-05-06 6:08 ` [Qemu-devel] [PATCH v1 15/22] target-arm: A64: Forbid ERET to increase the EL Edgar E. Iglesias
2014-05-07 6:03 ` Peter Crosthwaite
2014-05-06 6:08 ` [Qemu-devel] [PATCH v1 16/22] target-arm: A64: Forbid ERET to unimplemented ELs Edgar E. Iglesias
2014-05-07 6:04 ` Peter Crosthwaite
2014-05-07 9:00 ` Peter Maydell
2014-05-08 0:14 ` Edgar E. Iglesias
2014-05-06 6:08 ` [Qemu-devel] [PATCH v1 17/22] target-arm: A64: Generalize ERET to various ELs Edgar E. Iglesias
2014-05-07 6:09 ` Peter Crosthwaite
2014-05-06 6:08 ` [Qemu-devel] [PATCH v1 18/22] target-arm: A64: Generalize update_spsel for the " Edgar E. Iglesias
2014-05-07 6:13 ` Peter Crosthwaite
2014-05-13 17:32 ` Richard Henderson
2014-05-14 1:18 ` Edgar E. Iglesias
2014-05-14 15:57 ` Richard Henderson
2014-05-06 6:08 ` [Qemu-devel] [PATCH v1 19/22] target-arm: Add storage for VBAR_EL2 and 3 Edgar E. Iglesias
2014-05-16 14:40 ` Peter Maydell
2014-05-17 1:42 ` Edgar E. Iglesias
2014-05-06 6:08 ` [Qemu-devel] [PATCH v1 20/22] target-arm: Make vbar_write writeback to any CPREG Edgar E. Iglesias
2014-05-07 6:19 ` Peter Crosthwaite
2014-05-06 6:08 ` [Qemu-devel] [PATCH v1 21/22] target-arm: A64: Register VBAR_EL2 Edgar E. Iglesias
2014-05-07 6:22 ` Peter Crosthwaite
2014-05-16 14:43 ` Peter Maydell
2014-05-06 6:08 ` [Qemu-devel] [PATCH v1 22/22] target-arm: A64: Register VBAR_EL3 Edgar E. Iglesias
2014-05-07 6:23 ` Peter Crosthwaite
2014-05-06 7:58 ` [Qemu-devel] [PATCH v1 00/22] target-arm: Preparations for A64 EL2 and 3 Peter Maydell
2014-05-07 3:46 ` Edgar E. Iglesias
2014-05-12 19:13 ` Aggeler Fabian
2014-05-12 20:39 ` Peter Maydell
2014-05-14 8:58 ` Aggeler Fabian
2014-05-14 13:55 ` Greg Bellows
2014-05-15 9:28 ` Aggeler Fabian
2014-05-15 9:45 ` Sergey Fedorov
2014-05-15 12:44 ` Christopher Covington
2014-05-14 14:56 ` Edgar E. Iglesias
2014-05-12 23:41 ` Peter Crosthwaite
2014-05-13 3:31 ` Edgar E. Iglesias
2014-05-06 8:24 ` Alexander Graf
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20140508001328.GE7381@hostname \
--to=edgar.iglesias@gmail.com \
--cc=agraf@suse.de \
--cc=alex.bennee@linaro.org \
--cc=john.williams@xilinx.com \
--cc=peter.crosthwaite@xilinx.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.org \
--cc=rob.herring@linaro.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).