|
@@ -17,6 +17,7 @@
|
|
|
*/
|
|
|
|
|
|
#include <linux/cpu.h>
|
|
|
+#include <linux/cpu_pm.h>
|
|
|
#include <linux/errno.h>
|
|
|
#include <linux/err.h>
|
|
|
#include <linux/kvm_host.h>
|
|
@@ -853,6 +854,33 @@ static struct notifier_block hyp_init_cpu_nb = {
|
|
|
.notifier_call = hyp_init_cpu_notify,
|
|
|
};
|
|
|
|
|
|
+#ifdef CONFIG_CPU_PM
|
|
|
+static int hyp_init_cpu_pm_notifier(struct notifier_block *self,
|
|
|
+ unsigned long cmd,
|
|
|
+ void *v)
|
|
|
+{
|
|
|
+ if (cmd == CPU_PM_EXIT) {
|
|
|
+ cpu_init_hyp_mode(NULL);
|
|
|
+ return NOTIFY_OK;
|
|
|
+ }
|
|
|
+
|
|
|
+ return NOTIFY_DONE;
|
|
|
+}
|
|
|
+
|
|
|
+static struct notifier_block hyp_init_cpu_pm_nb = {
|
|
|
+ .notifier_call = hyp_init_cpu_pm_notifier,
|
|
|
+};
|
|
|
+
|
|
|
+static void __init hyp_cpu_pm_init(void)
|
|
|
+{
|
|
|
+ cpu_pm_register_notifier(&hyp_init_cpu_pm_nb);
|
|
|
+}
|
|
|
+#else
|
|
|
+static inline void hyp_cpu_pm_init(void)
|
|
|
+{
|
|
|
+}
|
|
|
+#endif
|
|
|
+
|
|
|
/**
|
|
|
* Inits Hyp-mode on all online CPUs
|
|
|
*/
|
|
@@ -1013,6 +1041,8 @@ int kvm_arch_init(void *opaque)
|
|
|
goto out_err;
|
|
|
}
|
|
|
|
|
|
+ hyp_cpu_pm_init();
|
|
|
+
|
|
|
kvm_coproc_table_init();
|
|
|
return 0;
|
|
|
out_err:
|