From 71ecd86274b8f0979dae89aefd66b0a947d8e1d6 Mon Sep 17 00:00:00 2001 From: David Brazdil Date: Tue, 29 Jun 2021 19:14:45 +0000 Subject: [PATCH] ANDROID: KVM: arm64: Add 'host_smc_handler' to kvm_iommu_ops IOMMU drivers need to intercept power management SMCs between the host and EL3. Add a hook to hyp's 'handle_host_smc'. Test: builds, boots Bug: 190463801 Change-Id: Ied34b60d4bb0e5ae0fbf03f8ce1dc22a09679e37 Signed-off-by: David Brazdil (cherry picked from commit d2efcdcb2b1874ad0d701cdb6d9ae4517fc0e117) Signed-off-by: Mostafa Saleh --- arch/arm64/include/asm/kvm_hyp.h | 1 + arch/arm64/kvm/hyp/nvhe/hyp-main.c | 2 ++ 2 files changed, 3 insertions(+) diff --git a/arch/arm64/include/asm/kvm_hyp.h b/arch/arm64/include/asm/kvm_hyp.h index bf1ca0e6b97f..92a614b36625 100644 --- a/arch/arm64/include/asm/kvm_hyp.h +++ b/arch/arm64/include/asm/kvm_hyp.h @@ -133,6 +133,7 @@ extern unsigned int kvm_nvhe_sym(kvm_arm_vmid_bits); extern bool kvm_nvhe_sym(smccc_trng_available); struct kvm_iommu_ops { int (*init)(void); + bool (*host_smc_handler)(struct kvm_cpu_context *host_ctxt); }; extern struct kvm_iommu_ops kvm_iommu_ops; diff --git a/arch/arm64/kvm/hyp/nvhe/hyp-main.c b/arch/arm64/kvm/hyp/nvhe/hyp-main.c index cf14b4ed6a83..9e4dd62c1c58 100644 --- a/arch/arm64/kvm/hyp/nvhe/hyp-main.c +++ b/arch/arm64/kvm/hyp/nvhe/hyp-main.c @@ -1194,6 +1194,8 @@ static void handle_host_smc(struct kvm_cpu_context *host_ctxt) bool handled; handled = kvm_host_psci_handler(host_ctxt); + if (!handled && kvm_iommu_ops.host_smc_handler) + handled = kvm_iommu_ops.host_smc_handler(host_ctxt); if (!handled) handled = kvm_host_ffa_handler(host_ctxt); if (!handled)