aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/powerpc/include/asm/kvm_para.h2
-rw-r--r--arch/powerpc/kvm/powerpc.c11
2 files changed, 13 insertions, 0 deletions
diff --git a/arch/powerpc/include/asm/kvm_para.h b/arch/powerpc/include/asm/kvm_para.h
index 0653b0d238b4..7438ab360120 100644
--- a/arch/powerpc/include/asm/kvm_para.h
+++ b/arch/powerpc/include/asm/kvm_para.h
@@ -45,6 +45,8 @@ struct kvm_vcpu_arch_shared {
45#define HC_EV_SUCCESS 0 45#define HC_EV_SUCCESS 0
46#define HC_EV_UNIMPLEMENTED 12 46#define HC_EV_UNIMPLEMENTED 12
47 47
48#define KVM_FEATURE_MAGIC_PAGE 1
49
48#ifdef __KERNEL__ 50#ifdef __KERNEL__
49 51
50#ifdef CONFIG_KVM_GUEST 52#ifdef CONFIG_KVM_GUEST
diff --git a/arch/powerpc/kvm/powerpc.c b/arch/powerpc/kvm/powerpc.c
index a4cf4b47e232..fecfe043458d 100644
--- a/arch/powerpc/kvm/powerpc.c
+++ b/arch/powerpc/kvm/powerpc.c
@@ -61,8 +61,19 @@ int kvmppc_kvm_pv(struct kvm_vcpu *vcpu)
61 } 61 }
62 62
63 switch (nr) { 63 switch (nr) {
64 case HC_VENDOR_KVM | KVM_HC_PPC_MAP_MAGIC_PAGE:
65 {
66 vcpu->arch.magic_page_pa = param1;
67 vcpu->arch.magic_page_ea = param2;
68
69 r = HC_EV_SUCCESS;
70 break;
71 }
64 case HC_VENDOR_KVM | KVM_HC_FEATURES: 72 case HC_VENDOR_KVM | KVM_HC_FEATURES:
65 r = HC_EV_SUCCESS; 73 r = HC_EV_SUCCESS;
74#if defined(CONFIG_PPC_BOOK3S) /* XXX Missing magic page on BookE */
75 r2 |= (1 << KVM_FEATURE_MAGIC_PAGE);
76#endif
66 77
67 /* Second return value is in r4 */ 78 /* Second return value is in r4 */
68 kvmppc_set_gpr(vcpu, 4, r2); 79 kvmppc_set_gpr(vcpu, 4, r2);