linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
From: cdall@linaro.org (Christoffer Dall)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v4 28/28] arm/arm64: Add hyp-stub API documentation
Date: Fri, 24 Mar 2017 17:03:35 +0100	[thread overview]
Message-ID: <20170324160335.GI25903@cbox> (raw)
In-Reply-To: <ea653ce3-e85a-a42a-9b4f-a5d1daabf871@arm.com>

On Fri, Mar 24, 2017 at 03:57:41PM +0000, Marc Zyngier wrote:
> On 24/03/17 15:23, Christoffer Dall wrote:
> > On Fri, Mar 24, 2017 at 02:42:13PM +0000, Marc Zyngier wrote:
> >> On 24/03/17 14:33, Christoffer Dall wrote:
> >>> On Tue, Mar 21, 2017 at 07:20:58PM +0000, Marc Zyngier wrote:
> >>>> In order to help people understanding the hyp-stub API that exists
> >>>> between the host kernel and the hypervisor mode (whether a hypervisor
> >>>> has been installed or not), let's document said API.
> >>>>
> >>>> As with any form of documentation, I expect it to become obsolete
> >>>> and completely misleading within 20 minutes after having being merged.
> >>>
> >>> I don't think this last sentence belongs in the commit message.
> >>>
> >>>>
> >>>> Acked-by: Russell King <rmk+kernel@armlinux.org.uk>
> >>>> Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
> >>>> ---
> >>>>  Documentation/virtual/kvm/arm/hyp-abi.txt | 45 +++++++++++++++++++++++++++++++
> >>>>  1 file changed, 45 insertions(+)
> >>>>  create mode 100644 Documentation/virtual/kvm/arm/hyp-abi.txt
> >>>>
> >>>> diff --git a/Documentation/virtual/kvm/arm/hyp-abi.txt b/Documentation/virtual/kvm/arm/hyp-abi.txt
> >>>> new file mode 100644
> >>>> index 000000000000..a1e0314d2249
> >>>> --- /dev/null
> >>>> +++ b/Documentation/virtual/kvm/arm/hyp-abi.txt
> >>>> @@ -0,0 +1,45 @@
> >>>> +* Internal ABI between the kernel and HYP
> >>>> +
> >>>> +This file documents the interaction between the Linux kernel and the
> >>>> +hypervisor layer when running Linux as a hypervisor (for example
> >>>> +KVM). It doesn't cover the interaction of the kernel with the
> >>>> +hypervisor when running as a guest (under Xen, KVM or any other
> >>>> +hypervisor), or any hypervisor-specific interaction when the kernel is
> >>>> +used as a host.
> >>>> +
> >>>> +On arm and arm64 (without VHE), the kernel doesn't run in hypervisor
> >>>> +mode, but still needs to interact with it, allowing a built-in
> >>>> +hypervisor to be either installed or torn down.
> >>>> +
> >>>> +In order to achieve this, the kernel must be booted at HYP (arm) or
> >>>> +EL2 (arm64), allowing it to install a set of stubs before dropping to
> >>>> +SVC/EL1. These stubs are accessible by using a 'hvc #0' instruction,
> >>>> +and only act on individual CPUs.
> >>>> +
> >>>> +Unless specified otherwise, any built-in hypervisor must implement
> >>>> +these functions (see arch/arm{,64}/include/asm/virt.h):
> >>>> +
> >>>> +* r0/x0 = HVC_SET_VECTORS
> >>>> +  r1/x1 = vectors
> >>>> +
> >>>> +  Set HVBAR/VBAR_EL2 to 'vectors' to enable a hypervisor. 'vectors'
> >>>> +  must be a physical address, and respect the alignment requirements
> >>>> +  of the architecture. Only implemented by the initial stubs.
> >>>
> >>> Does this last sentence mean that KVM doesn't implement this function?
> >>
> >> Indeed. 
> > 
> > I think the wording could be improved to "Only implemented by the
> > initial stubs, not by Linux hypervisors."
> 
> Looks good to me, I'll use that.
> 
> >> Directly setting the vectors is inherently unsafe (MMU could
> >> still be ON, for example), hence the HVC_SET_VECTORS operation that
> >> allow this to be done safely (RESET followed by SET).
> >>
> > 
> > Hmm, is it any less safe than setting the vectors using the hyp stubs?
> > In the initial case, we're relying on the caller knowing that the MMU is
> > off, and that the stubs are in place, otherwise it doesn't make sense.
> 
> That's why I was implying here that RESET+SET is the safe way of doing
> it. Another solution may be to make SET imply RESET, and keep it
> implemented always?
> 

Meh, I think these patches are as stable as is required for the use
cases at hand, so let's not introduce more churn in these patches.

> > But I think the point is just that we don't have a need to change the
> > vector from within KVM; we only have a need to set the vector when going
> > from stub->kvm, and we have a need to reset the whole thing (including
> > turning off the MMU) when going from kvm->stub.
> 
> Exactly. The current API doesn't try to cater for all possible cases. It
> just make sure that KVM can be installed and torn down safely.
> 

Fair enough.

> > Anyhow, my comment was just about the wording, as I had some nagging
> > doubt when I read the patch.
> > 
> >>>
> >>>> +
> >>>> +* r0/x0 = HVC_RESET_VECTORS
> >>>> +
> >>>> +  Turn HYP/EL2 MMU off, and reset HVBAR/VBAR_EL2 to the default
> >>>> +  value. This effectively disables an existing hypervisor.
> >>>
> >>> What's the 'default value' ?  Could we say to the physical address of
> >>> the hypervisor stub's exception vector?
> >>
> >> Shouldn't that be the kernel stub's exception vector?
> >>
> > 
> > Yeah, the "initials stubs' exception vector" is probably the most
> > coherent thing we can use here.
> 
> I'll use that when respinning it.
> 

Thanks,
-Christoffer

  reply	other threads:[~2017-03-24 16:03 UTC|newest]

Thread overview: 56+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-03-21 19:20 [PATCH v4 00/28] arm/arm64: KVM: Rework the hyp-stub API Marc Zyngier
2017-03-21 19:20 ` [PATCH v4 01/28] arm64: hyp-stub: Stop pointlessly clobbering lr Marc Zyngier
2017-03-21 19:20 ` [PATCH v4 02/28] arm64: KVM: Move lr save/restore to do_el2_call Marc Zyngier
2017-03-23 11:57   ` Marc Zyngier
2017-03-21 19:20 ` [PATCH v4 03/28] arm64: hyp-stub: Don't save lr in the EL1 code Marc Zyngier
2017-03-21 19:20 ` [PATCH v4 04/28] arm64: hyp-stub: Implement HVC_RESET_VECTORS stub hypercall Marc Zyngier
2017-03-21 19:20 ` [PATCH v4 05/28] arm64: KVM: Implement HVC_RESET_VECTORS stub hypercall in the init code Marc Zyngier
2017-03-24 14:33   ` Christoffer Dall
2017-03-24 14:45     ` Marc Zyngier
2017-03-21 19:20 ` [PATCH v4 06/28] arm64: KVM: Implement HVC_GET_VECTORS " Marc Zyngier
2017-03-21 19:20 ` [PATCH v4 07/28] arm64: KVM: Allow the main HYP code to use the init hyp stub implementation Marc Zyngier
2017-03-24 14:33   ` Christoffer Dall
2017-03-24 14:56     ` Marc Zyngier
2017-04-03 17:28       ` Christoffer Dall
2017-03-21 19:20 ` [PATCH v4 08/28] arm64: KVM: Convert __cpu_reset_hyp_mode to using __hyp_reset_vectors Marc Zyngier
2017-03-21 19:20 ` [PATCH v4 09/28] arm64: KVM: Implement HVC_SOFT_RESTART in the init code Marc Zyngier
2017-03-21 19:20 ` [PATCH v4 10/28] ARM: hyp-stub: improve ABI Marc Zyngier
2017-03-21 19:20 ` [PATCH v4 11/28] ARM: soft-reboot into same mode that we entered the kernel Marc Zyngier
2017-03-21 19:20 ` [PATCH v4 12/28] ARM: KVM: Convert KVM to use HVC_GET_VECTORS Marc Zyngier
2017-03-21 19:20 ` [PATCH v4 13/28] ARM: Update cpu_v7_reset documentation Marc Zyngier
2017-03-21 19:20 ` [PATCH v4 14/28] ARM: hyp-stub: Use r1 for the soft-restart address Marc Zyngier
2017-03-21 19:20 ` [PATCH v4 15/28] ARM: Expose the VA/IDMAP offset Marc Zyngier
2017-03-21 19:20 ` [PATCH v4 16/28] ARM: hyp-stub: Implement HVC_RESET_VECTORS stub hypercall Marc Zyngier
2017-03-21 19:20 ` [PATCH v4 17/28] ARM: KVM: Implement HVC_RESET_VECTORS stub hypercall in the init code Marc Zyngier
2017-03-21 19:20 ` [PATCH v4 18/28] ARM: KVM: Implement HVC_GET_VECTORS " Marc Zyngier
2017-03-21 19:20 ` [PATCH v4 19/28] ARM: KVM: Allow the main HYP code to use the init hyp stub implementation Marc Zyngier
2017-03-24 14:34   ` Christoffer Dall
2017-03-24 15:01     ` Marc Zyngier
2017-04-03 17:32       ` Christoffer Dall
2017-04-03 17:51         ` Marc Zyngier
2017-04-04  7:36           ` Christoffer Dall
2017-03-21 19:20 ` [PATCH v4 20/28] ARM: KVM: Convert __cpu_reset_hyp_mode to using __hyp_reset_vectors Marc Zyngier
2017-03-21 19:20 ` [PATCH v4 21/28] ARM: KVM: Implement HVC_SOFT_RESTART in the init code Marc Zyngier
2017-03-21 19:20 ` [PATCH v4 22/28] arm/arm64: KVM: Use __hyp_reset_vectors() directly Marc Zyngier
2017-03-21 19:20 ` [PATCH v4 23/28] arm/arm64: KVM: Remove kvm_get_idmap_start Marc Zyngier
2017-03-21 19:20 ` [PATCH v4 24/28] arm/arm64: KVM: Use HVC_RESET_VECTORS to reinit HYP mode Marc Zyngier
2017-03-21 19:20 ` [PATCH v4 25/28] ARM: decompressor: Remove __hyp_get_vectors usage Marc Zyngier
2017-03-24 14:34   ` Christoffer Dall
2017-03-24 15:26     ` Marc Zyngier
2017-03-21 19:20 ` [PATCH v4 26/28] ARM: hyp-stub/KVM: Kill __hyp_get_vectors Marc Zyngier
2017-03-21 19:20 ` [PATCH v4 27/28] arm64: " Marc Zyngier
2017-03-21 19:20 ` [PATCH v4 28/28] arm/arm64: Add hyp-stub API documentation Marc Zyngier
2017-03-24 14:33   ` Christoffer Dall
2017-03-24 14:42     ` Marc Zyngier
2017-03-24 15:23       ` Christoffer Dall
2017-03-24 15:57         ` Marc Zyngier
2017-03-24 16:03           ` Christoffer Dall [this message]
2017-03-22 13:37 ` [PATCH v4 00/28] arm/arm64: KVM: Rework the hyp-stub API Christoffer Dall
2017-03-22 16:14   ` Marc Zyngier
2017-03-22 17:27     ` Christoffer Dall
2017-03-23 10:53       ` Marc Zyngier
2017-03-23 14:39         ` Christoffer Dall
2017-03-23 15:16           ` Marc Zyngier
2017-03-23 15:45             ` Christoffer Dall
2017-03-22 16:20 ` Catalin Marinas
2017-03-24 14:36 ` Christoffer Dall

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=20170324160335.GI25903@cbox \
    --to=cdall@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 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).