Dont uninstall nvhe vector
diff --git a/arch/arm64/kvm/arm.c b/arch/arm64/kvm/arm.c
index 8f6d1d5..8e6d985 100644
--- a/arch/arm64/kvm/arm.c
+++ b/arch/arm64/kvm/arm.c
@@ -63,6 +63,11 @@
DEFINE_STATIC_KEY_FALSE(userspace_irqchip_in_use);
DEFINE_STATIC_KEY_FALSE(kvm_hyp_ready);
+static bool keep_hyp_installed(void)
+{
+ return !is_kernel_in_hyp_mode();
+}
+
int kvm_arch_vcpu_should_kick(struct kvm_vcpu *vcpu)
{
return kvm_vcpu_exiting_guest_mode(vcpu) == IN_GUEST_MODE;
@@ -1425,7 +1430,8 @@
void kvm_arch_hardware_disable(void)
{
- _kvm_arch_hardware_disable(NULL);
+ if (!keep_hyp_installed())
+ _kvm_arch_hardware_disable(NULL);
}
#ifdef CONFIG_CPU_PM
@@ -1468,11 +1474,13 @@
static void __init hyp_cpu_pm_init(void)
{
- cpu_pm_register_notifier(&hyp_init_cpu_pm_nb);
+ if (!keep_hyp_installed())
+ cpu_pm_register_notifier(&hyp_init_cpu_pm_nb);
}
static void __init hyp_cpu_pm_exit(void)
{
- cpu_pm_unregister_notifier(&hyp_init_cpu_pm_nb);
+ if (!keep_hyp_installed())
+ cpu_pm_unregister_notifier(&hyp_init_cpu_pm_nb);
}
#else
static inline void hyp_cpu_pm_init(void)
@@ -1561,7 +1569,8 @@
kvm_coproc_table_init();
out:
- on_each_cpu(_kvm_arch_hardware_disable, NULL, 1);
+ if (!keep_hyp_installed())
+ on_each_cpu(_kvm_arch_hardware_disable, NULL, 1);
return err;
}