Change ssbd hyp calls to params

Signed-off-by: David Brazdil <dbrazdil@google.com>
diff --git a/arch/arm64/include/asm/kvm_asm.h b/arch/arm64/include/asm/kvm_asm.h
index 8858589..de99715 100644
--- a/arch/arm64/include/asm/kvm_asm.h
+++ b/arch/arm64/include/asm/kvm_asm.h
@@ -53,15 +53,13 @@
 #define __KVM_HOST_SMCCC_FUNC___kvm_tlb_flush_local_vmid	4
 #define __KVM_HOST_SMCCC_FUNC___kvm_timer_set_cntvoff		5
 #define __KVM_HOST_SMCCC_FUNC___kvm_vcpu_run			6
-#define __KVM_HOST_SMCCC_FUNC___kvm_set_ssbd_callback_required	7
-#define __KVM_HOST_SMCCC_FUNC___kvm_enable_ssbs			8
-#define __KVM_HOST_SMCCC_FUNC___vgic_v3_get_ich_vtr_el2		9
-#define __KVM_HOST_SMCCC_FUNC___vgic_v3_read_vmcr		10
-#define __KVM_HOST_SMCCC_FUNC___vgic_v3_write_vmcr		11
-#define __KVM_HOST_SMCCC_FUNC___vgic_v3_init_lrs		12
-#define __KVM_HOST_SMCCC_FUNC___kvm_get_mdcr_el2		13
-#define __KVM_HOST_SMCCC_FUNC___vgic_v3_save_aprs		14
-#define __KVM_HOST_SMCCC_FUNC___vgic_v3_restore_aprs		15
+#define __KVM_HOST_SMCCC_FUNC___vgic_v3_get_ich_vtr_el2		7
+#define __KVM_HOST_SMCCC_FUNC___vgic_v3_read_vmcr		8
+#define __KVM_HOST_SMCCC_FUNC___vgic_v3_write_vmcr		9
+#define __KVM_HOST_SMCCC_FUNC___vgic_v3_init_lrs		10
+#define __KVM_HOST_SMCCC_FUNC___kvm_get_mdcr_el2		11
+#define __KVM_HOST_SMCCC_FUNC___vgic_v3_save_aprs		12
+#define __KVM_HOST_SMCCC_FUNC___vgic_v3_restore_aprs		13
 
 #ifndef __ASSEMBLY__
 
@@ -116,7 +114,6 @@
 extern void __kvm_tlb_flush_local_vmid(struct kvm_vcpu *vcpu);
 extern void __kvm_timer_set_cntvoff(u64 cntvoff);
 extern int __kvm_vcpu_run(struct kvm_vcpu *vcpu);
-extern void __kvm_set_ssbd_callback_required(void);
 extern void __kvm_enable_ssbs(void);
 extern u64 __vgic_v3_get_ich_vtr_el2(void);
 extern u64 __vgic_v3_read_vmcr(void);
diff --git a/arch/arm64/include/asm/kvm_hyp.h b/arch/arm64/include/asm/kvm_hyp.h
index a89de29..b773a0c 100644
--- a/arch/arm64/include/asm/kvm_hyp.h
+++ b/arch/arm64/include/asm/kvm_hyp.h
@@ -9,12 +9,15 @@
 
 #include <linux/compiler.h>
 #include <linux/kvm_host.h>
+#include <linux/types.h>
 #include <asm/alternative.h>
 #include <asm/sysreg.h>
 
 struct kvm_nvhe_hyp_params {
 	void *hyp_stack_ptr;
 	void *vector_ptr;
+	bool ssbd_callback_required;
+	bool enable_ssbd;
 };
 
 #define read_sysreg_elx(r,nvh,vh)					\
diff --git a/arch/arm64/kvm/arm.c b/arch/arm64/kvm/arm.c
index c6899e3..2ff11bc 100644
--- a/arch/arm64/kvm/arm.c
+++ b/arch/arm64/kvm/arm.c
@@ -1318,6 +1318,9 @@
 		.hyp_stack_ptr = kern_hyp_va(page_address(stack_page)
 					     + PAGE_SIZE),
 		.vector_ptr = kvm_get_hyp_vector(),
+		.ssbd_callback_required = this_cpu_read(arm64_ssbd_callback_required),
+		.enable_ssbd = this_cpu_has_cap(ARM64_SSBS) &&
+			       arm64_get_ssbd_state() == ARM64_SSBD_FORCE_DISABLE,
 	};
 
 	/*
@@ -1328,19 +1331,6 @@
 	 */
 	BUG_ON(!system_capabilities_finalized());
 	__kvm_call_hyp_init(pgd_ptr, tpidr_el2, start_hyp);
-
-	/* Copy the arm64_ssbd_callback_required information to hyp. */
-	if (this_cpu_read(arm64_ssbd_callback_required))
-		kvm_call_hyp(__kvm_set_ssbd_callback_required);
-
-	/*
-	 * Disabling SSBD on a non-VHE system requires us to enable SSBS
-	 * at EL2.
-	 */
-	if (this_cpu_has_cap(ARM64_SSBS) &&
-	    arm64_get_ssbd_state() == ARM64_SSBD_FORCE_DISABLE) {
-		kvm_call_hyp(__kvm_enable_ssbs);
-	}
 }
 
 static void cpu_hyp_reset(void)
diff --git a/arch/arm64/kvm/hyp/nvhe/hyp-main.c b/arch/arm64/kvm/hyp/nvhe/hyp-main.c
index fa9bbd0..57bf267 100644
--- a/arch/arm64/kvm/hyp/nvhe/hyp-main.c
+++ b/arch/arm64/kvm/hyp/nvhe/hyp-main.c
@@ -57,9 +57,6 @@
 			ret = __kvm_vcpu_run(vcpu);
 			break;
 		}
-	case KVM_HOST_SMCCC_FUNC(__kvm_enable_ssbs):
-		__kvm_enable_ssbs();
-		break;
 	case KVM_HOST_SMCCC_FUNC(__vgic_v3_get_ich_vtr_el2):
 		ret = __vgic_v3_get_ich_vtr_el2();
 		break;
@@ -119,6 +116,14 @@
 
 	__sysreg_save_state_nvhe(&host_vcpu->arch.ctxt);
 
+	/* Handle init params */
+#ifdef CONFIG_ARM64_SSBD
+	if (params->ssbd_callback_required)
+		__this_cpu_write(arm64_ssbd_callback_required, 1);
+#endif
+	if (params->enable_ssbd)
+		__kvm_enable_ssbs();
+
 	while (true) {
 		u64 exit_code;
 
diff --git a/arch/arm64/kvm/hyp/nvhe/sysreg-sr.c b/arch/arm64/kvm/hyp/nvhe/sysreg-sr.c
index cd3bd58..daa7ef8 100644
--- a/arch/arm64/kvm/hyp/nvhe/sysreg-sr.c
+++ b/arch/arm64/kvm/hyp/nvhe/sysreg-sr.c
@@ -63,10 +63,3 @@
 	"msr	sctlr_el2, %0"
 	: "=&r" (tmp) : "L" (SCTLR_ELx_DSSBS));
 }
-
-void __kvm_set_ssbd_callback_required(void)
-{
-#ifdef CONFIG_ARM64_SSBD
-	__this_cpu_write(arm64_ssbd_callback_required, 1);
-#endif
-}
diff --git a/arch/arm64/kvm/hyp/sysreg-sr.c b/arch/arm64/kvm/hyp/sysreg-sr.c
index 8928977..7392873 100644
--- a/arch/arm64/kvm/hyp/sysreg-sr.c
+++ b/arch/arm64/kvm/hyp/sysreg-sr.c
@@ -60,22 +60,6 @@
 	___sysreg32_restore_state(vcpu);
 }
 
-void __kvm_enable_ssbs(void)
-{
-	/*
-	 * Nothing to do on VHE. Needed because VHE and nVHE hyp code
-	 * must expose the same interface.
-	 */
-}
-
-void __kvm_set_ssbd_callback_required(void)
-{
-	/*
-	 * Nothing to do on VHE. Needed because VHE and nVHE hyp code
-	 * must expose the same interface.
-	 */
-}
-
 /**
  * kvm_vcpu_load_sysregs - Load guest system registers to the physical CPU
  *