From 3c064ef0c966fa27d12f25a3a01a818aa7fbd2fb Mon Sep 17 00:00:00 2001 From: Quentin Perret Date: Wed, 4 Jan 2023 16:43:01 +0000 Subject: [PATCH] ANDROID: KVM: arm64: Expose pKVM module mm APIs in module_ops Some partners may need to load plug-ins in their modules, which will require mapping the plugin code in a way that is very similar to how pKVM maps module code. To ease this use-case, expose the pKVM module memory-management APIs in the module_ops struct. Bug: 264070847 Change-Id: I8b30ca50692c6860e3988b847b63ba1553c729cb Signed-off-by: Quentin Perret --- arch/arm64/include/asm/kvm_pkvm_module.h | 2 ++ arch/arm64/kvm/hyp/nvhe/modules.c | 2 ++ 2 files changed, 4 insertions(+) diff --git a/arch/arm64/include/asm/kvm_pkvm_module.h b/arch/arm64/include/asm/kvm_pkvm_module.h index c19511a966a9..074077995a21 100644 --- a/arch/arm64/include/asm/kvm_pkvm_module.h +++ b/arch/arm64/include/asm/kvm_pkvm_module.h @@ -19,6 +19,8 @@ struct pkvm_module_ops { int (*create_private_mapping)(phys_addr_t phys, size_t size, enum kvm_pgtable_prot prot, unsigned long *haddr); + void *(*alloc_module_va)(u64 nr_pages); + int (*map_module_page)(u64 pfn, void *va, enum kvm_pgtable_prot prot); int (*register_serial_driver)(void (*hyp_putc_cb)(char)); void (*puts)(const char *str); void (*putx64)(u64 num); diff --git a/arch/arm64/kvm/hyp/nvhe/modules.c b/arch/arm64/kvm/hyp/nvhe/modules.c index aae93093bb64..70d7009a4961 100644 --- a/arch/arm64/kvm/hyp/nvhe/modules.c +++ b/arch/arm64/kvm/hyp/nvhe/modules.c @@ -95,6 +95,8 @@ int __pkvm_close_module_registration(void) const struct pkvm_module_ops module_ops = { .create_private_mapping = __pkvm_create_private_mapping, + .alloc_module_va = __pkvm_alloc_module_va, + .map_module_page = __pkvm_map_module_page, .register_serial_driver = __pkvm_register_serial_driver, .puts = hyp_puts, .putx64 = hyp_putx64,