From d46c47acf9b85b401f2373377b9bf6d84ffd2edd Mon Sep 17 00:00:00 2001 From: Mostafa Saleh Date: Fri, 9 Dec 2022 14:57:13 +0000 Subject: [PATCH] ANDROID: arm64: kvm: Add new module functions used by s2mpu. Add functions needed by S2MPU el2 module: -pkvm_host_donate_hyp/pkvm_hyp_donate_host: get and return SMPT from host kernel. -memcpy/memset: common functions used by s2mpu module. -hyp_pa: convert hyp address to PA, to get DMA address of SMPT. -kern_hyp_va: convert kernel address to hyp VA, used by the module to get the VA of SMPTs allocated from the kernel. Bug: 261857213 Change-Id: Idceccf0ac38444e7f267f50c476b99f01a613372 Signed-off-by: Mostafa Saleh Signed-off-by: Quentin Perret --- arch/arm64/include/asm/kvm_pkvm_module.h | 6 ++++++ arch/arm64/kvm/hyp/nvhe/modules.c | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/arch/arm64/include/asm/kvm_pkvm_module.h b/arch/arm64/include/asm/kvm_pkvm_module.h index a9f7994189a7..2629afaad7cb 100644 --- a/arch/arm64/include/asm/kvm_pkvm_module.h +++ b/arch/arm64/include/asm/kvm_pkvm_module.h @@ -34,6 +34,12 @@ struct pkvm_module_ops { int (*register_illegal_abt_notifier)(void (*cb)(struct kvm_cpu_context *)); int (*register_psci_notifier)(void (*cb)(enum pkvm_psci_notification, struct kvm_cpu_context *)); int (*register_hyp_panic_notifier)(void (*cb)(struct kvm_cpu_context *host_ctxt)); + int (*host_donate_hyp)(u64 pfn, u64 nr_pages); + int (*hyp_donate_host)(u64 pfn, u64 nr_pages); + void* (*memcpy)(void *to, const void *from, size_t count); + void* (*memset)(void *dst, int c, size_t count); + phys_addr_t (*hyp_pa)(void *x); + unsigned long (*kern_hyp_va)(unsigned long x); }; int __pkvm_load_el2_module(struct module *this, unsigned long *token); diff --git a/arch/arm64/kvm/hyp/nvhe/modules.c b/arch/arm64/kvm/hyp/nvhe/modules.c index 075dfc2b142d..bfbb7362144e 100644 --- a/arch/arm64/kvm/hyp/nvhe/modules.c +++ b/arch/arm64/kvm/hyp/nvhe/modules.c @@ -110,6 +110,12 @@ const struct pkvm_module_ops module_ops = { .register_illegal_abt_notifier = __pkvm_register_illegal_abt_notifier, .register_psci_notifier = __pkvm_register_psci_notifier, .register_hyp_panic_notifier = __pkvm_register_hyp_panic_notifier, + .host_donate_hyp = __pkvm_host_donate_hyp, + .hyp_donate_host = __pkvm_hyp_donate_host, + .memcpy = memcpy, + .memset = memset, + .hyp_pa = hyp_virt_to_phys, + .kern_hyp_va = __kern_hyp_va, }; int __pkvm_init_module(void *module_init)