Hi all, On Mon, 13 Jul 2020 14:40:36 +1000 Stephen Rothwell 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