]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/blobdiff - arch/powerpc/kvm/book3s_64_mmu_host.c
Merge tag 'for-linus' of git://git.kernel.org/pub/scm/virt/kvm/kvm
[mirror_ubuntu-artful-kernel.git] / arch / powerpc / kvm / book3s_64_mmu_host.c
index 74b0153780e39da60446e8bd747e50d8287f7b78..9a4614cd0e533f58757a4ed29f9ad7cb24ef691b 100644 (file)
@@ -145,6 +145,8 @@ int kvmppc_mmu_map_page(struct kvm_vcpu *vcpu, struct kvmppc_pte *orig_pte,
        else
                kvmppc_mmu_flush_icache(pfn);
 
+       rflags = (rflags & ~HPTE_R_WIMG) | orig_pte->wimg;
+
        /*
         * Use 64K pages if possible; otherwise, on 64K page kernels,
         * we need to transfer 4 more bits from guest real to host real addr.
@@ -177,12 +179,15 @@ map_again:
        ret = mmu_hash_ops.hpte_insert(hpteg, vpn, hpaddr, rflags, vflags,
                                       hpsize, hpsize, MMU_SEGSIZE_256M);
 
-       if (ret < 0) {
+       if (ret == -1) {
                /* If we couldn't map a primary PTE, try a secondary */
                hash = ~hash;
                vflags ^= HPTE_V_SECONDARY;
                attempt++;
                goto map_again;
+       } else if (ret < 0) {
+               r = -EIO;
+               goto out_unlock;
        } else {
                trace_kvm_book3s_64_mmu_map(rflags, hpteg,
                                            vpn, hpaddr, orig_pte);