aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/arm/kvm/arm.c30
1 files changed, 30 insertions, 0 deletions
diff --git a/arch/arm/kvm/arm.c b/arch/arm/kvm/arm.c
index 2a700e00528d..b18165ca1d38 100644
--- a/arch/arm/kvm/arm.c
+++ b/arch/arm/kvm/arm.c
@@ -17,6 +17,7 @@
17 */ 17 */
18 18
19#include <linux/cpu.h> 19#include <linux/cpu.h>
20#include <linux/cpu_pm.h>
20#include <linux/errno.h> 21#include <linux/errno.h>
21#include <linux/err.h> 22#include <linux/err.h>
22#include <linux/kvm_host.h> 23#include <linux/kvm_host.h>
@@ -853,6 +854,33 @@ static struct notifier_block hyp_init_cpu_nb = {
853 .notifier_call = hyp_init_cpu_notify, 854 .notifier_call = hyp_init_cpu_notify,
854}; 855};
855 856
857#ifdef CONFIG_CPU_PM
858static int hyp_init_cpu_pm_notifier(struct notifier_block *self,
859 unsigned long cmd,
860 void *v)
861{
862 if (cmd == CPU_PM_EXIT) {
863 cpu_init_hyp_mode(NULL);
864 return NOTIFY_OK;
865 }
866
867 return NOTIFY_DONE;
868}
869
870static struct notifier_block hyp_init_cpu_pm_nb = {
871 .notifier_call = hyp_init_cpu_pm_notifier,
872};
873
874static void __init hyp_cpu_pm_init(void)
875{
876 cpu_pm_register_notifier(&hyp_init_cpu_pm_nb);
877}
878#else
879static inline void hyp_cpu_pm_init(void)
880{
881}
882#endif
883
856/** 884/**
857 * Inits Hyp-mode on all online CPUs 885 * Inits Hyp-mode on all online CPUs
858 */ 886 */
@@ -1013,6 +1041,8 @@ int kvm_arch_init(void *opaque)
1013 goto out_err; 1041 goto out_err;
1014 } 1042 }
1015 1043
1044 hyp_cpu_pm_init();
1045
1016 kvm_coproc_table_init(); 1046 kvm_coproc_table_init();
1017 return 0; 1047 return 0;
1018out_err: 1048out_err: