From: dave.martin@linaro.org (Dave Martin)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 2/2] ARM: hyp: simplify __hyp_stub_install epilog
Date: Mon, 7 Jan 2013 12:18:07 +0000 [thread overview]
Message-ID: <20130107121807.GA2050@linaro.org> (raw)
In-Reply-To: <1357321455-9264-3-git-send-email-marc.zyngier@arm.com>
On Fri, Jan 04, 2013 at 05:44:15PM +0000, Marc Zyngier wrote:
> __hyp_stub_install duplicates quite a bit of safe_svcmode_maskall
> by forcing the CPU back to SVC. This is unnecessary, as
> safe_svcmode_maskall is called just after.
>
> Furthermore, the way we build SPSR_hyp is buggy as we fail to mask
> the interrupts, leading to interesting behaviours on TC2 + UEFI.
>
> The fix is to simply remove this code and rely on safe_svcmode_maskall
> to do the right thing.
>
> Cc: Dave Martin <dave.martin@linaro.org>
> Reported-by: Harry Liebel <harry.liebel@arm.com>
> Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
Although there is clearly a bug here, it looks like interrupts will
promptly get masked afterwards due to save_svcmode_maskall. This would
only fail if there is an interrupts asserted during this hazard ...?
Anyway, There's certainly no sense in trying to drop down to SVC mode
twice, so I agree that it is better to delegate that to the
save_svcmode_maskall macro.
Reviewed-by: Dave Martin <dave.martin@linaro.org>
Cheers
---Dave
> ---
> arch/arm/kernel/hyp-stub.S | 12 +++---------
> 1 file changed, 3 insertions(+), 9 deletions(-)
>
> diff --git a/arch/arm/kernel/hyp-stub.S b/arch/arm/kernel/hyp-stub.S
> index 65b2417..da7e19f 100644
> --- a/arch/arm/kernel/hyp-stub.S
> +++ b/arch/arm/kernel/hyp-stub.S
> @@ -120,7 +120,8 @@ ENTRY(__hyp_stub_install_secondary)
> * Eventually, CPU-specific code might be needed -- assume not for now
> *
> * This code relies on the "eret" instruction to synchronize the
> - * various coprocessor accesses.
> + * various coprocessor accesses. This is done when we switch to SVC
> + * (see safe_svcmode_maskall).
> */
> @ Now install the hypervisor stub:
> adr r7, __hyp_stub_vectors
> @@ -155,14 +156,7 @@ THUMB( orr r7, #(1 << 30) ) @ HSCTLR.TE
> 1:
> #endif
>
> - bic r7, r4, #MODE_MASK
> - orr r7, r7, #SVC_MODE
> -THUMB( orr r7, r7, #PSR_T_BIT )
> - msr spsr_cxsf, r7 @ This is SPSR_hyp.
> -
> - __MSR_ELR_HYP(14) @ msr elr_hyp, lr
> - __ERET @ return, switching to SVC mode
> - @ The boot CPU mode is left in r4.
> + bx lr @ The boot CPU mode is left in r4.
> ENDPROC(__hyp_stub_install_secondary)
>
> __hyp_stub_do_trap:
> --
> 1.8.1
>
>
next prev parent reply other threads:[~2013-01-07 12:18 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-01-04 17:44 [PATCH 0/2] HYP boot mode fixes Marc Zyngier
2013-01-04 17:44 ` [PATCH 1/2] ARM: hyp: boot secondary CPUs through the right entry point Marc Zyngier
2013-01-07 12:26 ` Dave Martin
2013-01-04 17:44 ` [PATCH 2/2] ARM: hyp: simplify __hyp_stub_install epilog Marc Zyngier
2013-01-07 12:18 ` Dave Martin [this message]
2013-01-07 13:27 ` Marc Zyngier
2013-01-07 13:49 ` Dave Martin
2013-01-09 14:46 ` [PATCH 0/2] HYP boot mode fixes Will Deacon
2013-01-09 14:48 ` Marc Zyngier
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=20130107121807.GA2050@linaro.org \
--to=dave.martin@linaro.org \
--cc=linux-arm-kernel@lists.infradead.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.