From: Christoffer Dall <cdall-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
To: James Morse <james.morse-5wv7dgnIgG8@public.gmane.org>
Cc: linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org,
Will Deacon <will.deacon-5wv7dgnIgG8@public.gmane.org>,
Catalin Marinas <catalin.marinas-5wv7dgnIgG8@public.gmane.org>,
kvmarm-FPEHb7Xf0XXUo1n7N8X6UoWGPAHP3yOg@public.gmane.org,
Marc Zyngier <marc.zyngier-5wv7dgnIgG8@public.gmane.org>,
Christoffer Dall
<christoffer.dall-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>,
Rob Herring <robh+dt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>,
Mark Rutland <mark.rutland-5wv7dgnIgG8@public.gmane.org>,
devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Subject: Re: [PATCH 03/11] KVM: arm64: Change hyp_panic()s dependency on tpidr_el2
Date: Thu, 8 Jun 2017 12:34:38 +0200 [thread overview]
Message-ID: <20170608103438.GD7657@cbox> (raw)
In-Reply-To: <593925BB.30503-5wv7dgnIgG8@public.gmane.org>
On Thu, Jun 08, 2017 at 11:23:55AM +0100, James Morse wrote:
> Hi Christoffer,
>
> On 06/06/17 20:45, Christoffer Dall wrote:
> > On Mon, May 15, 2017 at 06:43:51PM +0100, James Morse wrote:
> >> KVM calls hyp_panic() when anything unexpected happens. This may occur
> >> while a guest owns the EL1 registers. KVM stashes the vcpu pointer in
> >> tpidr_el2, which it uses to find the host context in order to restore
> >> the host EL1 registers before parachuting into the host's panic().
> >>
> >> The host context is a struct kvm_cpu_context allocated in the per-cpu
> >> area, and mapped to hyp. Given the per-cpu offset for this CPU, this is
> >> easy to find. Change hyp_panic() to take a pointer to the
> >> struct kvm_cpu_context. Wrap these calls with an asm function that
> >> retrieves the struct kvm_cpu_context from the host's per-cpu area.
> >>
> >> Copy the per-cpu offset from the hosts tpidr_el1 into tpidr_el2 during
> >> kvm init. (Later patches will make this unnecessary for VHE hosts)
> >>
> >> We print out the vcpu pointer as part of the panic message. Add a back
> >> reference to the 'running vcpu' in the host cpu context to preserve this.
>
> >> diff --git a/arch/arm64/kvm/hyp/hyp-entry.S b/arch/arm64/kvm/hyp/hyp-entry.S
> >> index fce7cc507e0a..0f83e7e402ad 100644
> >> --- a/arch/arm64/kvm/hyp/hyp-entry.S
> >> +++ b/arch/arm64/kvm/hyp/hyp-entry.S
> >> @@ -163,6 +163,13 @@ ENTRY(__hyp_do_panic)
> >> eret
> >> ENDPROC(__hyp_do_panic)
> >>
> >> +ENTRY(__hyp_panic)
> >> + ldr x0, =kvm_host_cpu_state
> >
> > Why is this guaranteed to give us a valid EL2 address?
>
> ... it doesn't. Its a host address from the constant pool which is used by
> hyp-panic as __host_ctxt:
> > void __hyp_text __noreturn hyp_panic(struct kvm_cpu_context *__host_ctxt);
>
> and fixed up with:
> > host_ctxt = kern_hyp_va(__host_ctxt);
>
Ah, right, we only dereference the pointer inside the function, I missed
that.
> to give us the EL2 address before we access it.
> For VHE the last step is a nop as the host address can be accessed directly.
>
> I will add a comment here explaining this.
>
>
Thanks!
-Christoffer
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
WARNING: multiple messages have this Message-ID (diff)
From: cdall@linaro.org (Christoffer Dall)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 03/11] KVM: arm64: Change hyp_panic()s dependency on tpidr_el2
Date: Thu, 8 Jun 2017 12:34:38 +0200 [thread overview]
Message-ID: <20170608103438.GD7657@cbox> (raw)
In-Reply-To: <593925BB.30503@arm.com>
On Thu, Jun 08, 2017 at 11:23:55AM +0100, James Morse wrote:
> Hi Christoffer,
>
> On 06/06/17 20:45, Christoffer Dall wrote:
> > On Mon, May 15, 2017 at 06:43:51PM +0100, James Morse wrote:
> >> KVM calls hyp_panic() when anything unexpected happens. This may occur
> >> while a guest owns the EL1 registers. KVM stashes the vcpu pointer in
> >> tpidr_el2, which it uses to find the host context in order to restore
> >> the host EL1 registers before parachuting into the host's panic().
> >>
> >> The host context is a struct kvm_cpu_context allocated in the per-cpu
> >> area, and mapped to hyp. Given the per-cpu offset for this CPU, this is
> >> easy to find. Change hyp_panic() to take a pointer to the
> >> struct kvm_cpu_context. Wrap these calls with an asm function that
> >> retrieves the struct kvm_cpu_context from the host's per-cpu area.
> >>
> >> Copy the per-cpu offset from the hosts tpidr_el1 into tpidr_el2 during
> >> kvm init. (Later patches will make this unnecessary for VHE hosts)
> >>
> >> We print out the vcpu pointer as part of the panic message. Add a back
> >> reference to the 'running vcpu' in the host cpu context to preserve this.
>
> >> diff --git a/arch/arm64/kvm/hyp/hyp-entry.S b/arch/arm64/kvm/hyp/hyp-entry.S
> >> index fce7cc507e0a..0f83e7e402ad 100644
> >> --- a/arch/arm64/kvm/hyp/hyp-entry.S
> >> +++ b/arch/arm64/kvm/hyp/hyp-entry.S
> >> @@ -163,6 +163,13 @@ ENTRY(__hyp_do_panic)
> >> eret
> >> ENDPROC(__hyp_do_panic)
> >>
> >> +ENTRY(__hyp_panic)
> >> + ldr x0, =kvm_host_cpu_state
> >
> > Why is this guaranteed to give us a valid EL2 address?
>
> ... it doesn't. Its a host address from the constant pool which is used by
> hyp-panic as __host_ctxt:
> > void __hyp_text __noreturn hyp_panic(struct kvm_cpu_context *__host_ctxt);
>
> and fixed up with:
> > host_ctxt = kern_hyp_va(__host_ctxt);
>
Ah, right, we only dereference the pointer inside the function, I missed
that.
> to give us the EL2 address before we access it.
> For VHE the last step is a nop as the host address can be accessed directly.
>
> I will add a comment here explaining this.
>
>
Thanks!
-Christoffer
next prev parent reply other threads:[~2017-06-08 10:34 UTC|newest]
Thread overview: 60+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-05-15 17:43 [PATCH 00/11] arm64/firmware: Software Delegated Exception Interface James Morse
2017-05-15 17:43 ` James Morse
2017-05-15 17:43 ` [PATCH 01/11] KVM: arm64: Store vcpu on the stack during __guest_enter() James Morse
2017-05-15 17:43 ` James Morse
[not found] ` <20170515174400.29735-2-james.morse-5wv7dgnIgG8@public.gmane.org>
2017-06-06 19:59 ` Christoffer Dall
2017-06-06 19:59 ` Christoffer Dall
2017-08-08 16:48 ` James Morse
2017-08-08 16:48 ` James Morse
[not found] ` <5989EB5D.6-5wv7dgnIgG8@public.gmane.org>
2017-08-09 8:48 ` Christoffer Dall
2017-08-09 8:48 ` Christoffer Dall
[not found] ` <20170515174400.29735-1-james.morse-5wv7dgnIgG8@public.gmane.org>
2017-05-15 17:43 ` [PATCH 02/11] KVM: arm/arm64: Convert kvm_host_cpu_state to a static per-cpu allocation James Morse
2017-05-15 17:43 ` James Morse
[not found] ` <20170515174400.29735-3-james.morse-5wv7dgnIgG8@public.gmane.org>
2017-06-06 19:59 ` Christoffer Dall
2017-06-06 19:59 ` Christoffer Dall
2017-05-15 17:43 ` [PATCH 03/11] KVM: arm64: Change hyp_panic()s dependency on tpidr_el2 James Morse
2017-05-15 17:43 ` James Morse
2017-06-06 19:45 ` Christoffer Dall
2017-06-06 19:45 ` Christoffer Dall
2017-06-08 10:23 ` James Morse
2017-06-08 10:23 ` James Morse
[not found] ` <593925BB.30503-5wv7dgnIgG8@public.gmane.org>
2017-06-08 10:34 ` Christoffer Dall [this message]
2017-06-08 10:34 ` Christoffer Dall
2017-05-15 17:43 ` [PATCH 04/11] arm64: alternatives: use tpidr_el2 on VHE hosts James Morse
2017-05-15 17:43 ` James Morse
2017-05-15 17:43 ` [PATCH 06/11] dt-bindings: add devicetree binding for describing arm64 SDEI firmware James Morse
2017-05-15 17:43 ` James Morse
2017-05-19 1:48 ` Rob Herring
2017-05-19 1:48 ` Rob Herring
2017-06-07 8:28 ` James Morse
2017-06-07 8:28 ` James Morse
2017-05-15 17:43 ` [PATCH 08/11] arm64: kernel: Add arch-specific SDEI entry code and CPU masking James Morse
2017-05-15 17:43 ` James Morse
2017-05-15 17:43 ` [PATCH 09/11] firmware: arm_sdei: Add support for CPU and system power states James Morse
2017-05-15 17:43 ` James Morse
2017-05-15 17:43 ` [PATCH 10/11] firmware: arm_sdei: add support for CPU private events James Morse
2017-05-15 17:43 ` James Morse
2017-05-15 17:43 ` [PATCH 11/11] KVM: arm64: Delegate support for SDEI to userspace James Morse
2017-05-15 17:43 ` James Morse
[not found] ` <20170515174400.29735-12-james.morse-5wv7dgnIgG8@public.gmane.org>
2017-06-06 19:58 ` Christoffer Dall
2017-06-06 19:58 ` Christoffer Dall
2017-07-26 17:00 ` James Morse
2017-07-26 17:00 ` James Morse
[not found] ` <5978CA93.5090600-5wv7dgnIgG8@public.gmane.org>
2017-07-27 7:49 ` Christoffer Dall
2017-07-27 7:49 ` Christoffer Dall
2017-06-06 19:59 ` [PATCH 00/11] arm64/firmware: Software Delegated Exception Interface Christoffer Dall
2017-06-06 19:59 ` Christoffer Dall
2017-06-07 9:45 ` James Morse
2017-06-07 9:45 ` James Morse
2017-06-07 9:53 ` Christoffer Dall
2017-06-07 9:53 ` Christoffer Dall
2017-05-15 17:43 ` [PATCH 05/11] arm64: KVM: Stop save/restoring host tpidr_el1 on VHE James Morse
2017-05-15 17:43 ` James Morse
[not found] ` <20170515174400.29735-6-james.morse-5wv7dgnIgG8@public.gmane.org>
2017-06-06 20:00 ` Christoffer Dall
2017-06-06 20:00 ` Christoffer Dall
2017-05-15 17:43 ` [PATCH 07/11] firmware: arm_sdei: Add driver for Software Delegated Exceptions James Morse
2017-05-15 17:43 ` James Morse
[not found] ` <20170515174400.29735-8-james.morse-5wv7dgnIgG8@public.gmane.org>
2017-07-19 13:52 ` Dave Martin
2017-07-19 13:52 ` Dave Martin
[not found] ` <20170719135213.GA1538-M5GwZQ6tE7x5pKCnmE3YQBJ8xKzm50AiAL8bYrjMMd8@public.gmane.org>
2017-08-08 16:48 ` James Morse
2017-08-08 16:48 ` James Morse
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=20170608103438.GD7657@cbox \
--to=cdall-qsej5fyqhm4dnm+yrofe0a@public.gmane.org \
--cc=catalin.marinas-5wv7dgnIgG8@public.gmane.org \
--cc=christoffer.dall-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org \
--cc=devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=james.morse-5wv7dgnIgG8@public.gmane.org \
--cc=kvmarm-FPEHb7Xf0XXUo1n7N8X6UoWGPAHP3yOg@public.gmane.org \
--cc=linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org \
--cc=marc.zyngier-5wv7dgnIgG8@public.gmane.org \
--cc=mark.rutland-5wv7dgnIgG8@public.gmane.org \
--cc=robh+dt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
--cc=will.deacon-5wv7dgnIgG8@public.gmane.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.