From: Marc Zyngier <marc.zyngier@arm.com> To: linux-arm-kernel@lists.infradead.org, kvm@vger.kernel.org, kvmarm@lists.cs.columbia.edu Cc: Russell King <linux@arm.linux.org.uk>, Christoffer Dall <christoffer.dall@linaro.org>, Mark Rutland <mark.rutland@arm.com>, Catalin Marinas <catalin.marinas@arm.com>, James Morse <james.morse@arm.com> Subject: [PATCH 20/20] arm/arm64: Add hyp-stub API documentation Date: Fri, 17 Feb 2017 15:44:29 +0000 [thread overview] Message-ID: <20170217154429.5000-21-marc.zyngier@arm.com> (raw) In-Reply-To: <20170217154429.5000-1-marc.zyngier@arm.com> 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 as with any form of documentation, I expect it to become obsolete and completely misleading within 20 minutes after having being merged. Signed-off-by: Marc Zyngier <marc.zyngier@arm.com> --- Documentation/virtual/kvm/arm/hyp-abi.txt | 48 +++++++++++++++++++++++++++++++ 1 file changed, 48 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..ad3e16fe723c --- /dev/null +++ b/Documentation/virtual/kvm/arm/hyp-abi.txt @@ -0,0 +1,48 @@ +* 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_GET_VECTORS + + Return the current value of HVBAR/VBAR_EL2 in r0/x0. + +* r0/x0 = HVC_SET_VECTORS + r1/x1 = vectors + + Set HVBAR/VBAR_EL2 to 'vectors' to enable a hypervisor. Only + implemented by the initial stubs. + +* 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. + +* r0/x0 = HVC_SOFT_RESTART + r1/x1 = restart address + x2 = x0's value when entering the next payload (arm64) + x3 = x1's value when entering the next payload (arm64) + x4 = x2's value when entering the next payload (arm64) + + Mask all exceptions, disable the MMU, move the arguments into place + (arm64 only), and jump to the restart address while at HYP/EL2. This + hypercall is not expected to return to its caller. + +Any other value of r0/x0 triggers a hypervisor-specific handling, +which is not documented here. -- 2.11.0
WARNING: multiple messages have this Message-ID (diff)
From: marc.zyngier@arm.com (Marc Zyngier) To: linux-arm-kernel@lists.infradead.org Subject: [PATCH 20/20] arm/arm64: Add hyp-stub API documentation Date: Fri, 17 Feb 2017 15:44:29 +0000 [thread overview] Message-ID: <20170217154429.5000-21-marc.zyngier@arm.com> (raw) In-Reply-To: <20170217154429.5000-1-marc.zyngier@arm.com> 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 as with any form of documentation, I expect it to become obsolete and completely misleading within 20 minutes after having being merged. Signed-off-by: Marc Zyngier <marc.zyngier@arm.com> --- Documentation/virtual/kvm/arm/hyp-abi.txt | 48 +++++++++++++++++++++++++++++++ 1 file changed, 48 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..ad3e16fe723c --- /dev/null +++ b/Documentation/virtual/kvm/arm/hyp-abi.txt @@ -0,0 +1,48 @@ +* 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_GET_VECTORS + + Return the current value of HVBAR/VBAR_EL2 in r0/x0. + +* r0/x0 = HVC_SET_VECTORS + r1/x1 = vectors + + Set HVBAR/VBAR_EL2 to 'vectors' to enable a hypervisor. Only + implemented by the initial stubs. + +* 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. + +* r0/x0 = HVC_SOFT_RESTART + r1/x1 = restart address + x2 = x0's value when entering the next payload (arm64) + x3 = x1's value when entering the next payload (arm64) + x4 = x2's value when entering the next payload (arm64) + + Mask all exceptions, disable the MMU, move the arguments into place + (arm64 only), and jump to the restart address while at HYP/EL2. This + hypercall is not expected to return to its caller. + +Any other value of r0/x0 triggers a hypervisor-specific handling, +which is not documented here. -- 2.11.0
next prev parent reply other threads:[~2017-02-17 15:45 UTC|newest] Thread overview: 54+ messages / expand[flat|nested] mbox.gz Atom feed top 2017-02-17 15:44 [PATCH 00/20] arm/arm64: KVM: Rework the hyp-stub API Marc Zyngier 2017-02-17 15:44 ` Marc Zyngier 2017-02-17 15:44 ` [PATCH 01/20] arm64: hyp-stub: Implement HVC_RESET_VECTORS stub hypercall Marc Zyngier 2017-02-17 15:44 ` Marc Zyngier 2017-02-17 15:44 ` [PATCH 02/20] arm64: KVM: " Marc Zyngier 2017-02-17 15:44 ` Marc Zyngier 2017-02-20 16:54 ` James Morse 2017-02-20 16:54 ` James Morse 2017-02-17 15:44 ` [PATCH 03/20] arm64: KVM: Implement HVC_GET_VECTORS in the init code Marc Zyngier 2017-02-17 15:44 ` Marc Zyngier 2017-02-17 15:44 ` [PATCH 04/20] arm64: KVM: Allow the main HYP code to use the init hyp stub implementation Marc Zyngier 2017-02-17 15:44 ` Marc Zyngier 2017-02-17 15:44 ` [PATCH 05/20] arm64: KVM: Convert __cpu_reset_hyp_mode to using __hyp_reset_vectors Marc Zyngier 2017-02-17 15:44 ` Marc Zyngier 2017-02-17 15:44 ` [PATCH 06/20] arm64: KVM: Implement HVC_SOFT_RESTART in the init code Marc Zyngier 2017-02-17 15:44 ` Marc Zyngier 2017-02-17 15:44 ` [PATCH 07/20] ARM: hyp-stub: improve ABI Marc Zyngier 2017-02-17 15:44 ` Marc Zyngier 2017-02-17 15:44 ` [PATCH 08/20] ARM: soft-reboot into same mode that we entered the kernel Marc Zyngier 2017-02-17 15:44 ` Marc Zyngier 2017-02-17 15:44 ` [PATCH 09/20] ARM: KVM: Convert KVM to use HVC_GET_VECTORS Marc Zyngier 2017-02-17 15:44 ` Marc Zyngier 2017-02-17 15:44 ` [PATCH 10/20] ARM: hyp-stub: Use r1 for the soft-restart address Marc Zyngier 2017-02-17 15:44 ` Marc Zyngier 2017-02-19 8:22 ` Ard Biesheuvel 2017-02-19 8:22 ` Ard Biesheuvel 2017-02-19 11:09 ` Marc Zyngier 2017-02-19 11:09 ` Marc Zyngier 2017-02-17 15:44 ` [PATCH 11/20] ARM: Expose the VA/IDMAP offset Marc Zyngier 2017-02-17 15:44 ` Marc Zyngier 2017-02-17 15:44 ` [PATCH 12/20] ARM: hyp-stub: Implement HVC_RESET_VECTORS stub hypercall Marc Zyngier 2017-02-17 15:44 ` Marc Zyngier 2017-02-17 15:44 ` [PATCH 13/20] ARM: KVM: " Marc Zyngier 2017-02-17 15:44 ` Marc Zyngier 2017-02-19 8:07 ` Ard Biesheuvel 2017-02-19 8:07 ` Ard Biesheuvel 2017-02-19 11:19 ` Marc Zyngier 2017-02-19 11:19 ` Marc Zyngier 2017-02-19 11:42 ` Ard Biesheuvel 2017-02-19 11:42 ` Ard Biesheuvel 2017-02-17 15:44 ` [PATCH 14/20] ARM: KVM: Implement HVC_GET_VECTORS in the init code Marc Zyngier 2017-02-17 15:44 ` Marc Zyngier 2017-02-17 15:44 ` [PATCH 15/20] ARM: KVM: Allow the main HYP code to use the init hyp stub implementation Marc Zyngier 2017-02-17 15:44 ` Marc Zyngier 2017-02-17 15:44 ` [PATCH 16/20] ARM: KVM: Convert __cpu_reset_hyp_mode to using __hyp_reset_vectors Marc Zyngier 2017-02-17 15:44 ` Marc Zyngier 2017-02-17 15:44 ` [PATCH 17/20] ARM: KVM: Implement HVC_SOFT_RESTART in the init code Marc Zyngier 2017-02-17 15:44 ` Marc Zyngier 2017-02-17 15:44 ` [PATCH 18/20] arm/arm64: KVM: Simplify __cpu_reset_hyp_mode Marc Zyngier 2017-02-17 15:44 ` Marc Zyngier 2017-02-17 15:44 ` [PATCH 19/20] arm/arm64: KVM: Remove kvm_get_idmap_start Marc Zyngier 2017-02-17 15:44 ` Marc Zyngier 2017-02-17 15:44 ` Marc Zyngier [this message] 2017-02-17 15:44 ` [PATCH 20/20] arm/arm64: Add hyp-stub API documentation 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=20170217154429.5000-21-marc.zyngier@arm.com \ --to=marc.zyngier@arm.com \ --cc=catalin.marinas@arm.com \ --cc=christoffer.dall@linaro.org \ --cc=james.morse@arm.com \ --cc=kvm@vger.kernel.org \ --cc=kvmarm@lists.cs.columbia.edu \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux@arm.linux.org.uk \ --cc=mark.rutland@arm.com \ /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: linkBe 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.