Missed a commit of my working tree, so accidentally sent out the wrong patch. This fixes it. Signed-off-by: Christoffer Dall <c.dall@xxxxxxxxxxxxxxxxxxxxxx> --- arch/arm/kvm/mmu.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/arch/arm/kvm/mmu.c b/arch/arm/kvm/mmu.c index e5ace0e..cb03d45 100644 --- a/arch/arm/kvm/mmu.c +++ b/arch/arm/kvm/mmu.c @@ -421,8 +421,8 @@ static void stage2_clear_pte(struct kvm *kvm, phys_addr_t addr) kvm_tlb_flush_vmid(kvm); } -static void stage2_set_pte(struct kvm *kvm, struct kvm_mmu_memory_cache *cache, - phys_addr_t addr, const pte_t *new_pte, bool iomap) +static int stage2_set_pte(struct kvm *kvm, struct kvm_mmu_memory_cache *cache, + phys_addr_t addr, const pte_t *new_pte, bool iomap) { pgd_t *pgd; pud_t *pud; @@ -434,7 +434,7 @@ static void stage2_set_pte(struct kvm *kvm, struct kvm_mmu_memory_cache *cache, pud = pud_offset(pgd, addr); if (pud_none(*pud)) { if (!cache) - return; /* ignore calls from kvm_set_spte_hva */ + return 0; /* ignore calls from kvm_set_spte_hva */ pmd = mmu_memory_cache_alloc(cache); pud_populate(NULL, pud, pmd); pmd += pmd_index(addr); @@ -445,7 +445,7 @@ static void stage2_set_pte(struct kvm *kvm, struct kvm_mmu_memory_cache *cache, /* Create 2nd stage page table mapping - Level 2 */ if (pmd_none(*pmd)) { if (!cache) - return; /* ignore calls from kvm_set_spte_hva */ + return 0; /* ignore calls from kvm_set_spte_hva */ pte = mmu_memory_cache_alloc(cache); clean_pte_table(pte); pmd_populate_kernel(NULL, pmd, pte); @@ -454,7 +454,7 @@ static void stage2_set_pte(struct kvm *kvm, struct kvm_mmu_memory_cache *cache, } else pte = pte_offset_kernel(pmd, addr); - if (iomap && pte_present(old_pte)) + if (iomap && pte_present(*pte)) return -EFAULT; /* Create 2nd stage page table mapping - Level 3 */ @@ -464,6 +464,8 @@ static void stage2_set_pte(struct kvm *kvm, struct kvm_mmu_memory_cache *cache, kvm_tlb_flush_vmid(kvm); else get_page(virt_to_page(pte)); + + return 0; } /** @@ -492,8 +494,10 @@ int kvm_phys_addr_ioremap(struct kvm *kvm, phys_addr_t guest_ipa, if (ret) goto out; spin_lock(&kvm->mmu_lock); - stage2_set_pte(kvm, &cache, addr, &pte, true); + ret = stage2_set_pte(kvm, &cache, addr, &pte, true); spin_unlock(&kvm->mmu_lock); + if (ret) + goto out; pfn++; } -- 1.7.9.5 -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html