From: "Edgar E. Iglesias" <edgar.iglesias@gmail.com>
To: Peter Maydell <peter.maydell@linaro.org>
Cc: qemu-arm <qemu-arm@nongnu.org>,
Adam Lackorzynski <adam.lackorzynski@kernkonzept.com>,
QEMU Developers <qemu-devel@nongnu.org>,
"patches@linaro.org" <patches@linaro.org>
Subject: Re: [Qemu-devel] [Qemu-arm] [PATCH 1/2] target/arm: Hyp mode R14 is shared with User and System
Date: Mon, 12 Nov 2018 12:13:58 +0100 [thread overview]
Message-ID: <20181112111358.GE1148@toto> (raw)
In-Reply-To: <CAFEAcA8pbw-D_9P3RYGMZbFXBFD6PzFNgrVLEb_RYQ11YuFdOQ@mail.gmail.com>
On Fri, Nov 09, 2018 at 06:15:20PM +0000, Peter Maydell wrote:
> On 9 November 2018 at 17:35, Peter Maydell <peter.maydell@linaro.org> wrote:
> > Hyp mode is an exception to the general rule that each AArch32
> > mode has its own r13, r14 and SPSR -- it has a banked r13 and
> > SPSR but shares its r14 with User and System mode. We were
> > incorrectly implementing it as banked, which meant that on
> > entry to Hyp mode r14 was 0 rather than the USR/SYS r14.
> >
> > We provide a new function r14_bank_number() which is like
> > the existing bank_number() but provides the index into
> > env->banked_r14[]; bank_number() provides the index to use
> > for env->banked_r13[] and env->banked_cpsr[].
> >
> > All the points in the code that were using bank_number()
> > to index into env->banked_r14[] are updated for consintency:
> > * switch_mode() -- this is the only place where we fix
> > an actual bug
> > * aarch64_sync_32_to_64() and aarch64_sync_64_to_32():
> > no behavioural change as we already special-cased Hyp R14
> > * kvm32.c: no behavioural change since the guest can't ever
> > be in Hyp mode, but conceptually the right thing to do
> > * msr_banked()/mrs_banked(): we can never get to the case
> > that accesses banked_r14[] with tgtmode == ARM_CPU_MODE_HYP,
> > so no behavioural change
> >
> > Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
> > ---
> > target/arm/internals.h | 16 ++++++++++++++++
> > target/arm/helper.c | 29 +++++++++++++++--------------
> > target/arm/kvm32.c | 4 ++--
> > target/arm/op_helper.c | 2 +-
> > 4 files changed, 34 insertions(+), 17 deletions(-)
>
> Rats, this bit accidentally didn't make it into this patch:
>
> diff --git a/target/arm/op_helper.c b/target/arm/op_helper.c
> index 2b62c53f5b5..eb6fb82fb81 100644
> --- a/target/arm/op_helper.c
> +++ b/target/arm/op_helper.c
> @@ -725,7 +725,7 @@ uint32_t HELPER(mrs_banked)(CPUARMState *env,
> uint32_t tgtmode, uint32_t regno)
> case 13:
> return env->banked_r13[bank_number(tgtmode)];
> case 14:
> - return env->banked_r14[bank_number(tgtmode)];
> + return env->banked_r14[r14_bank_number(tgtmode)];
> case 8 ... 12:
> switch (tgtmode) {
> case ARM_CPU_MODE_USR:
>
>
> (it's one of the "no behavioural change" bits).
>
Reviewed-by: Edgar E. Iglesias <edgar.iglesias@xilinx.com>
WARNING: multiple messages have this Message-ID (diff)
From: "Edgar E. Iglesias" <edgar.iglesias@gmail.com>
To: Peter Maydell <peter.maydell@linaro.org>
Cc: qemu-arm <qemu-arm@nongnu.org>,
QEMU Developers <qemu-devel@nongnu.org>,
Adam Lackorzynski <adam.lackorzynski@kernkonzept.com>,
"patches@linaro.org" <patches@linaro.org>
Subject: Re: [Qemu-devel] [Qemu-arm] [PATCH 1/2] target/arm: Hyp mode R14 is shared with User and System
Date: Mon, 12 Nov 2018 12:13:58 +0100 [thread overview]
Message-ID: <20181112111358.GE1148@toto> (raw)
In-Reply-To: <CAFEAcA8pbw-D_9P3RYGMZbFXBFD6PzFNgrVLEb_RYQ11YuFdOQ@mail.gmail.com>
On Fri, Nov 09, 2018 at 06:15:20PM +0000, Peter Maydell wrote:
> On 9 November 2018 at 17:35, Peter Maydell <peter.maydell@linaro.org> wrote:
> > Hyp mode is an exception to the general rule that each AArch32
> > mode has its own r13, r14 and SPSR -- it has a banked r13 and
> > SPSR but shares its r14 with User and System mode. We were
> > incorrectly implementing it as banked, which meant that on
> > entry to Hyp mode r14 was 0 rather than the USR/SYS r14.
> >
> > We provide a new function r14_bank_number() which is like
> > the existing bank_number() but provides the index into
> > env->banked_r14[]; bank_number() provides the index to use
> > for env->banked_r13[] and env->banked_cpsr[].
> >
> > All the points in the code that were using bank_number()
> > to index into env->banked_r14[] are updated for consintency:
> > * switch_mode() -- this is the only place where we fix
> > an actual bug
> > * aarch64_sync_32_to_64() and aarch64_sync_64_to_32():
> > no behavioural change as we already special-cased Hyp R14
> > * kvm32.c: no behavioural change since the guest can't ever
> > be in Hyp mode, but conceptually the right thing to do
> > * msr_banked()/mrs_banked(): we can never get to the case
> > that accesses banked_r14[] with tgtmode == ARM_CPU_MODE_HYP,
> > so no behavioural change
> >
> > Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
> > ---
> > target/arm/internals.h | 16 ++++++++++++++++
> > target/arm/helper.c | 29 +++++++++++++++--------------
> > target/arm/kvm32.c | 4 ++--
> > target/arm/op_helper.c | 2 +-
> > 4 files changed, 34 insertions(+), 17 deletions(-)
>
> Rats, this bit accidentally didn't make it into this patch:
>
> diff --git a/target/arm/op_helper.c b/target/arm/op_helper.c
> index 2b62c53f5b5..eb6fb82fb81 100644
> --- a/target/arm/op_helper.c
> +++ b/target/arm/op_helper.c
> @@ -725,7 +725,7 @@ uint32_t HELPER(mrs_banked)(CPUARMState *env,
> uint32_t tgtmode, uint32_t regno)
> case 13:
> return env->banked_r13[bank_number(tgtmode)];
> case 14:
> - return env->banked_r14[bank_number(tgtmode)];
> + return env->banked_r14[r14_bank_number(tgtmode)];
> case 8 ... 12:
> switch (tgtmode) {
> case ARM_CPU_MODE_USR:
>
>
> (it's one of the "no behavioural change" bits).
>
Reviewed-by: Edgar E. Iglesias <edgar.iglesias@xilinx.com>
next prev parent reply other threads:[~2018-11-12 11:14 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-11-09 17:35 [Qemu-arm] [PATCH 0/2] Fix the last Hyp mode bug and turn it on for A7, A15 Peter Maydell
2018-11-09 17:35 ` [Qemu-devel] " Peter Maydell
2018-11-09 17:35 ` [Qemu-arm] [PATCH 1/2] target/arm: Hyp mode R14 is shared with User and System Peter Maydell
2018-11-09 17:35 ` [Qemu-devel] " Peter Maydell
2018-11-09 18:15 ` [Qemu-arm] " Peter Maydell
2018-11-09 18:15 ` [Qemu-devel] " Peter Maydell
2018-11-10 19:26 ` Philippe Mathieu-Daudé
2018-11-10 19:26 ` [Qemu-devel] " Philippe Mathieu-Daudé
2018-11-12 11:13 ` Edgar E. Iglesias [this message]
2018-11-12 11:13 ` Edgar E. Iglesias
2018-11-12 11:41 ` Alex Bennée
2018-11-12 11:41 ` [Qemu-devel] " Alex Bennée
2018-11-12 11:09 ` Edgar E. Iglesias
2018-11-12 11:09 ` [Qemu-devel] " Edgar E. Iglesias
2018-11-09 17:35 ` [Qemu-arm] [PATCH 2/2] target/arm/cpu: Give Cortex-A15 and -A7 the EL2 feature Peter Maydell
2018-11-09 17:35 ` [Qemu-devel] " Peter Maydell
2018-11-12 0:24 ` [Qemu-arm] " Philippe Mathieu-Daudé
2018-11-12 0:24 ` [Qemu-devel] " Philippe Mathieu-Daudé
2018-11-12 11:10 ` Edgar E. Iglesias
2018-11-12 11:10 ` [Qemu-devel] " Edgar E. Iglesias
2018-11-12 0:32 ` [Qemu-arm] [PATCH 0/2] Fix the last Hyp mode bug and turn it on for A7, A15 Philippe Mathieu-Daudé
2018-11-12 0:32 ` [Qemu-devel] " Philippe Mathieu-Daudé
2018-11-12 9:05 ` [Qemu-arm] [Qemu-devel] " Richard Henderson
2018-11-12 9:05 ` Richard Henderson
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=20181112111358.GE1148@toto \
--to=edgar.iglesias@gmail.com \
--cc=adam.lackorzynski@kernkonzept.com \
--cc=patches@linaro.org \
--cc=peter.maydell@linaro.org \
--cc=qemu-arm@nongnu.org \
--cc=qemu-devel@nongnu.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.