summaryrefslogtreecommitdiffstats
path: root/arch/arm64/include/asm/kvm_host.h
diff options
context:
space:
mode:
authorFuad Tabba <tabba@google.com>2022-11-10 19:02:45 +0000
committerMarc Zyngier <maz@kernel.org>2022-11-11 17:16:05 +0000
commita1ec5c70d3f63d8a143fb83cd7f53bd8ff2f72c8 (patch)
treea5402ab73434c6fc7703af7b4900f11c7b0dca04 /arch/arm64/include/asm/kvm_host.h
parent5304002dc3754a5663d75c977bfa2d9e3c08906d (diff)
downloadlinux-stable-a1ec5c70d3f63d8a143fb83cd7f53bd8ff2f72c8.tar.gz
linux-stable-a1ec5c70d3f63d8a143fb83cd7f53bd8ff2f72c8.tar.bz2
linux-stable-a1ec5c70d3f63d8a143fb83cd7f53bd8ff2f72c8.zip
KVM: arm64: Add infrastructure to create and track pKVM instances at EL2
Introduce a global table (and lock) to track pKVM instances at EL2, and provide hypercalls that can be used by the untrusted host to create and destroy pKVM VMs and their vCPUs. pKVM VM/vCPU state is directly accessible only by the trusted hypervisor (EL2). Each pKVM VM is directly associated with an untrusted host KVM instance, and is referenced by the host using an opaque handle. Future patches will provide hypercalls to allow the host to initialize/set/get pKVM VM/vCPU state using the opaque handle. Tested-by: Vincent Donnefort <vdonnefort@google.com> Signed-off-by: Fuad Tabba <tabba@google.com> Co-developed-by: Will Deacon <will@kernel.org> Signed-off-by: Will Deacon <will@kernel.org> [maz: silence warning on unmap_donated_memory_noclear()] Signed-off-by: Marc Zyngier <maz@kernel.org> Link: https://lore.kernel.org/r/20221110190259.26861-13-will@kernel.org
Diffstat (limited to 'arch/arm64/include/asm/kvm_host.h')
-rw-r--r--arch/arm64/include/asm/kvm_host.h8
1 files changed, 8 insertions, 0 deletions
diff --git a/arch/arm64/include/asm/kvm_host.h b/arch/arm64/include/asm/kvm_host.h
index 45e2136322ba..d3dd7ab9c79e 100644
--- a/arch/arm64/include/asm/kvm_host.h
+++ b/arch/arm64/include/asm/kvm_host.h
@@ -115,6 +115,8 @@ struct kvm_smccc_features {
unsigned long vendor_hyp_bmap;
};
+typedef unsigned int pkvm_handle_t;
+
struct kvm_arch {
struct kvm_s2_mmu mmu;
@@ -166,6 +168,12 @@ struct kvm_arch {
/* Hypercall features firmware registers' descriptor */
struct kvm_smccc_features smccc_feat;
+
+ /*
+ * For an untrusted host VM, 'pkvm_handle' is used to lookup
+ * the associated pKVM instance in the hypervisor.
+ */
+ pkvm_handle_t pkvm_handle;
};
struct kvm_vcpu_fault_info {