Hi all,

On Mon, 13 Jul 2020 14:40:36 +1000 Stephen Rothwell <s...@canb.auug.org.au> 
wrote:
>
> Today's linux-next merge of the kvm-arm tree got a conflict in:
> 
>   arch/arm64/kvm/mmu.c
> 
> between commit:
> 
>   c1a33aebe91d ("KVM: arm64: Use common KVM implementation of MMU memory 
> caches")
> 
> from the kvm tree and commit:
> 
>   a0e50aa3f4a8 ("KVM: arm64: Factor out stage 2 page table data from struct 
> kvm")
> 
> from the kvm-arm tree.
> 
> I fixed it up (see below) and can carry the fix as necessary. This
> is now fixed as far as linux-next is concerned, but any non trivial
> conflicts should be mentioned to your upstream maintainer when your tree
> is submitted for merging.  You may also want to consider cooperating
> with the maintainer of the conflicting tree to minimise any particularly
> complex conflicts.
> 
> diff --cc arch/arm64/kvm/mmu.c
> index 838aad520f1c,cd14c831d56f..000000000000
> --- a/arch/arm64/kvm/mmu.c
> +++ b/arch/arm64/kvm/mmu.c
> @@@ -124,11 -127,44 +127,12 @@@ static void stage2_dissolve_pud(struct 
>       put_page(virt_to_page(pudp));
>   }
>   
> - static void clear_stage2_pgd_entry(struct kvm *kvm, pgd_t *pgd, phys_addr_t 
> addr)
>  -static int mmu_topup_memory_cache(struct kvm_mmu_memory_cache *cache,
>  -                              int min, int max)
>  -{
>  -    void *page;
>  -
>  -    BUG_ON(max > KVM_NR_MEM_OBJS);
>  -    if (cache->nobjs >= min)
>  -            return 0;
>  -    while (cache->nobjs < max) {
>  -            page = (void *)__get_free_page(GFP_PGTABLE_USER);
>  -            if (!page)
>  -                    return -ENOMEM;
>  -            cache->objects[cache->nobjs++] = page;
>  -    }
>  -    return 0;
>  -}
>  -
>  -static void mmu_free_memory_cache(struct kvm_mmu_memory_cache *mc)
>  -{
>  -    while (mc->nobjs)
>  -            free_page((unsigned long)mc->objects[--mc->nobjs]);
>  -}
>  -
>  -static void *mmu_memory_cache_alloc(struct kvm_mmu_memory_cache *mc)
>  -{
>  -    void *p;
>  -
>  -    BUG_ON(!mc || !mc->nobjs);
>  -    p = mc->objects[--mc->nobjs];
>  -    return p;
>  -}
>  -
> + static void clear_stage2_pgd_entry(struct kvm_s2_mmu *mmu, pgd_t *pgd, 
> phys_addr_t addr)
>   {
> +     struct kvm *kvm = mmu->kvm;
>       p4d_t *p4d_table __maybe_unused = stage2_p4d_offset(kvm, pgd, 0UL);
>       stage2_pgd_clear(kvm, pgd);
> -     kvm_tlb_flush_vmid_ipa(kvm, addr);
> +     kvm_tlb_flush_vmid_ipa(mmu, addr, S2_NO_LEVEL_HINT);
>       stage2_p4d_free(kvm, p4d_table);
>       put_page(virt_to_page(pgd));
>   }

This is now a conflict between the kvm-arm tree and Linus' tree.

-- 
Cheers,
Stephen Rothwell

Attachment: pgpOv5NIHwSwj.pgp
Description: OpenPGP digital signature

Reply via email to