]> Pileus Git - ~andy/linux/blobdiff - arch/powerpc/include/asm/kvm_ppc.h
KVM: PPC: cache flush for kernel managed pages
[~andy/linux] / arch / powerpc / include / asm / kvm_ppc.h
index 44a657adf41606c3219a0577ac78952ee6b9c64a..4794de6ea3796a3c5294fc52f1c4b1e74812e2a6 100644 (file)
@@ -104,8 +104,7 @@ extern void kvmppc_core_queue_dec(struct kvm_vcpu *vcpu);
 extern void kvmppc_core_dequeue_dec(struct kvm_vcpu *vcpu);
 extern void kvmppc_core_queue_external(struct kvm_vcpu *vcpu,
                                        struct kvm_interrupt *irq);
-extern void kvmppc_core_dequeue_external(struct kvm_vcpu *vcpu,
-                                         struct kvm_interrupt *irq);
+extern void kvmppc_core_dequeue_external(struct kvm_vcpu *vcpu);
 extern void kvmppc_core_flush_tlb(struct kvm_vcpu *vcpu);
 
 extern int kvmppc_core_emulate_op(struct kvm_run *run, struct kvm_vcpu *vcpu,
@@ -152,7 +151,7 @@ extern int kvmppc_core_prepare_memory_region(struct kvm *kvm,
                                struct kvm_userspace_memory_region *mem);
 extern void kvmppc_core_commit_memory_region(struct kvm *kvm,
                                struct kvm_userspace_memory_region *mem,
-                               struct kvm_memory_slot old);
+                               const struct kvm_memory_slot *old);
 extern int kvm_vm_ioctl_get_smmu_info(struct kvm *kvm,
                                      struct kvm_ppc_smmu_info *info);
 extern void kvmppc_core_flush_memslot(struct kvm *kvm,
@@ -283,8 +282,15 @@ void kvmppc_init_lpid(unsigned long nr_lpids);
 
 static inline void kvmppc_mmu_flush_icache(pfn_t pfn)
 {
-       /* Clear i-cache for new pages */
        struct page *page;
+       /*
+        * We can only access pages that the kernel maps
+        * as memory. Bail out for unmapped ones.
+        */
+       if (!pfn_valid(pfn))
+               return;
+
+       /* Clear i-cache for new pages */
        page = pfn_to_page(pfn);
        if (!test_bit(PG_arch_1, &page->flags)) {
                flush_dcache_icache_page(page);