]> Pileus Git - ~andy/linux/blobdiff - arch/powerpc/include/asm/kvm_ppc.h
Merge tag 'for-linus' of git://git.kernel.org/pub/scm/virt/kvm/kvm
[~andy/linux] / arch / powerpc / include / asm / kvm_ppc.h
index 326033c993852443af1f36ad5ff378d5c857ec2e..c8317fbf92c470f03842da5cf363efd97aed99b4 100644 (file)
@@ -134,9 +134,11 @@ extern struct page *kvm_alloc_hpt(unsigned long nr_pages);
 extern void kvm_release_hpt(struct page *page, unsigned long nr_pages);
 extern int kvmppc_core_init_vm(struct kvm *kvm);
 extern void kvmppc_core_destroy_vm(struct kvm *kvm);
-extern void kvmppc_core_free_memslot(struct kvm_memory_slot *free,
+extern void kvmppc_core_free_memslot(struct kvm *kvm,
+                                    struct kvm_memory_slot *free,
                                     struct kvm_memory_slot *dont);
-extern int kvmppc_core_create_memslot(struct kvm_memory_slot *slot,
+extern int kvmppc_core_create_memslot(struct kvm *kvm,
+                                     struct kvm_memory_slot *slot,
                                      unsigned long npages);
 extern int kvmppc_core_prepare_memory_region(struct kvm *kvm,
                                struct kvm_memory_slot *memslot,
@@ -180,6 +182,7 @@ union kvmppc_one_reg {
 };
 
 struct kvmppc_ops {
+       struct module *owner;
        int (*get_sregs)(struct kvm_vcpu *vcpu, struct kvm_sregs *sregs);
        int (*set_sregs)(struct kvm_vcpu *vcpu, struct kvm_sregs *sregs);
        int (*get_one_reg)(struct kvm_vcpu *vcpu, u64 id,
@@ -214,7 +217,6 @@ struct kvmppc_ops {
                              unsigned long npages);
        int (*init_vm)(struct kvm *kvm);
        void (*destroy_vm)(struct kvm *kvm);
-       int (*check_processor_compat)(void);
        int (*get_smmu_info)(struct kvm *kvm, struct kvm_ppc_smmu_info *info);
        int (*emulate_op)(struct kvm_run *run, struct kvm_vcpu *vcpu,
                          unsigned int inst, int *advance);
@@ -226,7 +228,13 @@ struct kvmppc_ops {
 
 };
 
-extern struct kvmppc_ops *kvmppc_ops;
+extern struct kvmppc_ops *kvmppc_hv_ops;
+extern struct kvmppc_ops *kvmppc_pr_ops;
+
+static inline bool is_kvmppc_hv_enabled(struct kvm *kvm)
+{
+       return kvm->arch.kvm_ops == kvmppc_hv_ops;
+}
 
 /*
  * Cuts out inst bits with ordering according to spec.
@@ -309,10 +317,10 @@ static inline void kvmppc_set_xics_phys(int cpu, unsigned long addr)
 
 static inline u32 kvmppc_get_xics_latch(void)
 {
-       u32 xirr = get_paca()->kvm_hstate.saved_xirr;
+       u32 xirr;
 
+       xirr = get_paca()->kvm_hstate.saved_xirr;
        get_paca()->kvm_hstate.saved_xirr = 0;
-
        return xirr;
 }
 
@@ -323,7 +331,7 @@ static inline void kvmppc_set_host_ipi(int cpu, u8 host_ipi)
 
 static inline void kvmppc_fast_vcpu_kick(struct kvm_vcpu *vcpu)
 {
-       kvmppc_ops->fast_vcpu_kick(vcpu);
+       vcpu->kvm->arch.kvm_ops->fast_vcpu_kick(vcpu);
 }
 
 #else