From: mark.rutland@arm.com (Mark Rutland)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH V2] ARM/ARM64: KVM: Nuke Hyp-mode tlbs before enabling MMU
Date: Fri, 22 Aug 2014 11:23:15 +0100 [thread overview]
Message-ID: <20140822102315.GQ21734@leverpostej> (raw)
In-Reply-To: <1406789604-10533-1-git-send-email-pranavkumar@linaro.org>
Hi Pranav,
On Thu, Jul 31, 2014 at 07:53:23AM +0100, Pranavkumar Sawargaonkar wrote:
> X-Gene u-boot runs in EL2 mode with MMU enabled hence we might
> have stale EL2 tlb enteris when we enable EL2 MMU on each host CPU.
Nit: entries
> This can happen on any ARM/ARM64 board running bootloader in
> Hyp-mode (or EL2-mode) with MMU enabled.
>
> This patch ensures that we flush all Hyp-mode (or EL2-mode) TLBs
> on each host CPU before enabling Hyp-mode (or EL2-mode) MMU.
I hit a similar issue intermittently on a Juno board when I boot Linux
as an EFI application, where CPU0 would get stuck in a recursive
exception at EL2 while initialising hyp. We don't nuke the TLBs in
efi_stub_entry nor do we do so in el2_setup, so there's the possibility
of stale EL2 TLB entries lying around from UEFI.
With this patch applied I'm unable to reproduce the issue (with ~30
boots so far). So:
Tested-by: Mark Rutland <mark.rutland@arm.com>
It would be nice to see this hit mainline soon.
Thanks,
Mark.
>
> Changelog:
>
> V2:
> - Flush Hyp-mode TLBs for both KVM ARM32 and KVM ARM64 at boot time
>
> V1:
> - Initial patch with only arm64 change
>
> Signed-off-by: Pranavkumar Sawargaonkar <pranavkumar@linaro.org>
> Signed-off-by: Anup Patel <anup.patel@linaro.org>
> ---
> arch/arm/kvm/init.S | 4 ++++
> arch/arm64/kvm/hyp-init.S | 4 ++++
> 2 files changed, 8 insertions(+)
>
> diff --git a/arch/arm/kvm/init.S b/arch/arm/kvm/init.S
> index 1b9844d..ee4f744 100644
> --- a/arch/arm/kvm/init.S
> +++ b/arch/arm/kvm/init.S
> @@ -98,6 +98,10 @@ __do_hyp_init:
> mrc p15, 0, r0, c10, c2, 1
> mcr p15, 4, r0, c10, c2, 1
>
> + @ Invalidate the stale TLBs from Bootloader
> + mcr p15, 4, r0, c8, c7, 0 @ TLBIALLH
> + dsb ish
> +
> @ Set the HSCTLR to:
> @ - ARM/THUMB exceptions: Kernel config (Thumb-2 kernel)
> @ - Endianness: Kernel config
> diff --git a/arch/arm64/kvm/hyp-init.S b/arch/arm64/kvm/hyp-init.S
> index d968796..c319116 100644
> --- a/arch/arm64/kvm/hyp-init.S
> +++ b/arch/arm64/kvm/hyp-init.S
> @@ -80,6 +80,10 @@ __do_hyp_init:
> msr mair_el2, x4
> isb
>
> + /* Invalidate the stale TLBs from Bootloader */
> + tlbi alle2
> + dsb sy
> +
> mrs x4, sctlr_el2
> and x4, x4, #SCTLR_EL2_EE // preserve endianness of EL2
> ldr x5, =SCTLR_EL2_FLAGS
> --
> 1.7.9.5
>
>
> _______________________________________________
> linux-arm-kernel mailing list
> linux-arm-kernel at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
>
next prev parent reply other threads:[~2014-08-22 10:23 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-07-31 6:53 [PATCH V2] ARM/ARM64: KVM: Nuke Hyp-mode tlbs before enabling MMU Pranavkumar Sawargaonkar
2014-08-04 12:06 ` Christoffer Dall
2014-08-22 9:03 ` Marc Zyngier
2014-08-04 13:26 ` Marc Zyngier
2014-08-22 10:23 ` Mark Rutland [this message]
2014-08-22 10:41 ` 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=20140822102315.GQ21734@leverpostej \
--to=mark.rutland@arm.com \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox