Re: linux-next: manual merge of the kvm-arm tree with the kvm tree
From: Stephen Rothwell
Date: Sun Aug 09 2020 - 04:55:52 EST
Hi all,
On Mon, 13 Jul 2020 14:40:36 +1000 Stephen Rothwell <sfr@xxxxxxxxxxxxxxxx> 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:
pgp5uQKY1DWcW.pgp
Description: OpenPGP digital signature