Re: linux-next: manual merge of the akpm-current tree with the risc-v tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, 2020-10-06 at 21:32 -0700, Palmer Dabbelt wrote:
> On Tue, 06 Oct 2020 03:39:06 PDT (-0700), Stephen Rothwell wrote:
> > Hi all,
> > 
> > Today's linux-next merge of the akpm-current tree got a conflict
> > in:
> > 
> >   arch/riscv/mm/init.c
> > 
> > between commit:
> > 
> >   c29c38fa2a8b ("RISC-V: Remove any memblock representing unusable
> > memory area")
> > 
> > from the risc-v tree and commits:
> > 
> >   3520eeb79142 ("arch, drivers: replace for_each_membock() with
> > for_each_mem_range()")
> > 
> > from the akpm-current 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.
> > 
> > It also looks like there is a bug in that risc-v tree patch:
> > mem_start
> > is used uninitialised in setup_bootmem().
> > -- 
> > Cheers,
> > Stephen Rothwell
> > 
> > diff --cc arch/riscv/mm/init.c
> > index 812a48c91a95,bc72bb6b5fe0..000000000000
> > --- a/arch/riscv/mm/init.c
> > +++ b/arch/riscv/mm/init.c
> > @@@ -152,20 -141,25 +152,20 @@@ disable
> >   }
> >   #endif /* CONFIG_BLK_DEV_INITRD */
> >   
> >  -static phys_addr_t dtb_early_pa __initdata;
> >  -
> >   void __init setup_bootmem(void)
> >   {
> > - 	struct memblock_region *reg;
> > - 	phys_addr_t mem_start, end = 0;
> >  -	phys_addr_t mem_size = 0;
> >  -	phys_addr_t total_mem = 0;
> > + 	phys_addr_t mem_start, start, end = 0;
> >   	phys_addr_t vmlinux_end = __pa_symbol(&_end);
> >   	phys_addr_t vmlinux_start = __pa_symbol(&_start);
> > + 	u64 i;
> >   
> >   	/* Find the memory region containing the kernel */
> > - 	for_each_memblock(memory, reg) {
> > - 		end = reg->base + reg->size;
> > + 	for_each_mem_range(i, &start, &end) {
> > + 		phys_addr_t size = end - start;
> >  -		if (!total_mem)
> >  +		if (!mem_start)
> > - 			mem_start = reg->base;
> > - 		if (reg->base <= vmlinux_start && vmlinux_end <= end)
> > - 			BUG_ON(reg->size == 0);
> > + 			mem_start = start;
> > + 		if (start <= vmlinux_start && vmlinux_end <= end)
> > + 			BUG_ON(size == 0);
> >  -		total_mem = total_mem + size;
> >   	}
> >   
> >   	/*
> > @@@ -542,18 -455,11 +533,18 @@@ static void __init
> > setup_vm_final(void
> >   {
> >   	uintptr_t va, map_size;
> >   	phys_addr_t pa, start, end;
> > - 	struct memblock_region *reg;
> > + 	u64 i;
> >   
> >  -	/* Set mmu_enabled flag */
> >  -	mmu_enabled = true;
> >  -
> >  +	/**
> >  +	 * MMU is enabled at this point. But page table setup is not
> > complete yet.
> >  +	 * fixmap page table alloc functions should be used at this
> > point
> >  +	 */
> >  +	pt_ops.alloc_pte = alloc_pte_fixmap;
> >  +	pt_ops.get_pte_virt = get_pte_virt_fixmap;
> >  +#ifndef __PAGETABLE_PMD_FOLDED
> >  +	pt_ops.alloc_pmd = alloc_pmd_fixmap;
> >  +	pt_ops.get_pmd_virt = get_pmd_virt_fixmap;
> >  +#endif
> >   	/* Setup swapper PGD for fixmap */
> >   	create_pgd_mapping(swapper_pg_dir, FIXADDR_START,
> >   			   __pa_symbol(fixmap_pgd_next),
> 
> Thanks for pointing this out.  Given that this is the tip of my for-
> next I'm
> just going to drop it, we'll sort out the bug and the conflict.

Thanks. I will rebase on top of next after fixing the bug and resend.

-- 
Regards,
Atish




[Index of Archives]     [Linux Kernel]     [Linux USB Development]     [Yosemite News]     [Linux SCSI]

  Powered by Linux