All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mike Rapoport <rppt@linux.ibm.com>
To: Anup Patel <Anup.Patel@wdc.com>
Cc: Palmer Dabbelt <palmer@sifive.com>,
	Albert Ou <aou@eecs.berkeley.edu>,
	Atish Patra <Atish.Patra@wdc.com>,
	Paul Walmsley <paul.walmsley@sifive.com>,
	Christoph Hellwig <hch@infradead.org>,
	"linux-riscv@lists.infradead.org"
	<linux-riscv@lists.infradead.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH v6 2/5] RISC-V: Move setup_bootmem() to mm/init.c
Date: Wed, 13 Feb 2019 18:33:04 +0200	[thread overview]
Message-ID: <20190213163304.GB6110@rapoport-lnx> (raw)
In-Reply-To: <20190213115301.103989-3-anup.patel@wdc.com>

On Wed, Feb 13, 2019 at 11:53:37AM +0000, Anup Patel wrote:
> The setup_bootmem() mainly populates memblocks and does early memory
> reservations. The right location for this function is mm/init.c. It
> calls setup_initrd() so we move that as well.
> 
> Signed-off-by: Anup Patel <anup.patel@wdc.com>
> Reviewed-by: Christoph Hellwig <hch@lst.de>
> Reviewed-by: Palmer Dabbelt <palmer@sifive.com>

Reviewed-by: Mike Rapoport <rppt@linux.ibm.com>

> ---
>  arch/riscv/include/asm/pgtable.h |  1 +
>  arch/riscv/kernel/setup.c        | 72 --------------------------------
>  arch/riscv/mm/init.c             | 70 +++++++++++++++++++++++++++++++
>  3 files changed, 71 insertions(+), 72 deletions(-)
> 
> diff --git a/arch/riscv/include/asm/pgtable.h b/arch/riscv/include/asm/pgtable.h
> index 16301966d65b..35893810cba3 100644
> --- a/arch/riscv/include/asm/pgtable.h
> +++ b/arch/riscv/include/asm/pgtable.h
> @@ -404,6 +404,7 @@ static inline int ptep_clear_flush_young(struct vm_area_struct *vma,
>  #define kern_addr_valid(addr)   (1) /* FIXME */
>  #endif
>  
> +extern void setup_bootmem(void);
>  extern void paging_init(void);
>  
>  static inline void pgtable_cache_init(void)
> diff --git a/arch/riscv/kernel/setup.c b/arch/riscv/kernel/setup.c
> index c6e858122815..49bce6692f39 100644
> --- a/arch/riscv/kernel/setup.c
> +++ b/arch/riscv/kernel/setup.c
> @@ -23,7 +23,6 @@
>  #include <linux/mm.h>
>  #include <linux/memblock.h>
>  #include <linux/sched.h>
> -#include <linux/initrd.h>
>  #include <linux/console.h>
>  #include <linux/screen_info.h>
>  #include <linux/of_fdt.h>
> @@ -70,34 +69,6 @@ void __init smp_setup_processor_id(void)
>  	cpuid_to_hartid_map(0) = boot_cpu_hartid;
>  }
>  
> -#ifdef CONFIG_BLK_DEV_INITRD
> -static void __init setup_initrd(void)
> -{
> -	unsigned long size;
> -
> -	if (initrd_start >= initrd_end) {
> -		printk(KERN_INFO "initrd not found or empty");
> -		goto disable;
> -	}
> -	if (__pa(initrd_end) > PFN_PHYS(max_low_pfn)) {
> -		printk(KERN_ERR "initrd extends beyond end of memory");
> -		goto disable;
> -	}
> -
> -	size =  initrd_end - initrd_start;
> -	memblock_reserve(__pa(initrd_start), size);
> -	initrd_below_start_ok = 1;
> -
> -	printk(KERN_INFO "Initial ramdisk at: 0x%p (%lu bytes)\n",
> -		(void *)(initrd_start), size);
> -	return;
> -disable:
> -	pr_cont(" - disabling initrd\n");
> -	initrd_start = 0;
> -	initrd_end = 0;
> -}
> -#endif /* CONFIG_BLK_DEV_INITRD */
> -
>  pgd_t swapper_pg_dir[PTRS_PER_PGD] __page_aligned_bss;
>  pgd_t trampoline_pg_dir[PTRS_PER_PGD] __initdata __aligned(PAGE_SIZE);
>  
> @@ -159,49 +130,6 @@ void __init parse_dtb(unsigned int hartid, void *dtb)
>  #endif
>  }
>  
> -static void __init setup_bootmem(void)
> -{
> -	struct memblock_region *reg;
> -	phys_addr_t mem_size = 0;
> -
> -	/* Find the memory region containing the kernel */
> -	for_each_memblock(memory, reg) {
> -		phys_addr_t vmlinux_end = __pa(_end);
> -		phys_addr_t end = reg->base + reg->size;
> -
> -		if (reg->base <= vmlinux_end && vmlinux_end <= end) {
> -			/*
> -			 * Reserve from the start of the region to the end of
> -			 * the kernel
> -			 */
> -			memblock_reserve(reg->base, vmlinux_end - reg->base);
> -			mem_size = min(reg->size, (phys_addr_t)-PAGE_OFFSET);
> -		}
> -	}
> -	BUG_ON(mem_size == 0);
> -
> -	set_max_mapnr(PFN_DOWN(mem_size));
> -	max_low_pfn = PFN_DOWN(memblock_end_of_DRAM());
> -
> -#ifdef CONFIG_BLK_DEV_INITRD
> -	setup_initrd();
> -#endif /* CONFIG_BLK_DEV_INITRD */
> -
> -	early_init_fdt_reserve_self();
> -	early_init_fdt_scan_reserved_mem();
> -	memblock_allow_resize();
> -	memblock_dump_all();
> -
> -	for_each_memblock(memory, reg) {
> -		unsigned long start_pfn = memblock_region_memory_base_pfn(reg);
> -		unsigned long end_pfn = memblock_region_memory_end_pfn(reg);
> -
> -		memblock_set_node(PFN_PHYS(start_pfn),
> -		                  PFN_PHYS(end_pfn - start_pfn),
> -		                  &memblock.memory, 0);
> -	}
> -}
> -
>  void __init setup_arch(char **cmdline_p)
>  {
>  	init_mm.start_code = (unsigned long) _stext;
> diff --git a/arch/riscv/mm/init.c b/arch/riscv/mm/init.c
> index 658ebf645f42..bedaf04f9c2f 100644
> --- a/arch/riscv/mm/init.c
> +++ b/arch/riscv/mm/init.c
> @@ -17,6 +17,7 @@
>  #include <linux/initrd.h>
>  #include <linux/swap.h>
>  #include <linux/sizes.h>
> +#include <linux/of_fdt.h>
>  
>  #include <asm/tlbflush.h>
>  #include <asm/sections.h>
> @@ -66,7 +67,76 @@ void free_initmem(void)
>  }
>  
>  #ifdef CONFIG_BLK_DEV_INITRD
> +static void __init setup_initrd(void)
> +{
> +	unsigned long size;
> +
> +	if (initrd_start >= initrd_end) {
> +		printk(KERN_INFO "initrd not found or empty");
> +		goto disable;
> +	}
> +	if (__pa(initrd_end) > PFN_PHYS(max_low_pfn)) {
> +		printk(KERN_ERR "initrd extends beyond end of memory");
> +		goto disable;
> +	}
> +
> +	size =  initrd_end - initrd_start;
> +	memblock_reserve(__pa(initrd_start), size);
> +	initrd_below_start_ok = 1;
> +
> +	printk(KERN_INFO "Initial ramdisk at: 0x%p (%lu bytes)\n",
> +		(void *)(initrd_start), size);
> +	return;
> +disable:
> +	pr_cont(" - disabling initrd\n");
> +	initrd_start = 0;
> +	initrd_end = 0;
> +}
> +
>  void free_initrd_mem(unsigned long start, unsigned long end)
>  {
>  }
>  #endif /* CONFIG_BLK_DEV_INITRD */
> +
> +void __init setup_bootmem(void)
> +{
> +	struct memblock_region *reg;
> +	phys_addr_t mem_size = 0;
> +
> +	/* Find the memory region containing the kernel */
> +	for_each_memblock(memory, reg) {
> +		phys_addr_t vmlinux_end = __pa(_end);
> +		phys_addr_t end = reg->base + reg->size;
> +
> +		if (reg->base <= vmlinux_end && vmlinux_end <= end) {
> +			/*
> +			 * Reserve from the start of the region to the end of
> +			 * the kernel
> +			 */
> +			memblock_reserve(reg->base, vmlinux_end - reg->base);
> +			mem_size = min(reg->size, (phys_addr_t)-PAGE_OFFSET);
> +		}
> +	}
> +	BUG_ON(mem_size == 0);
> +
> +	set_max_mapnr(PFN_DOWN(mem_size));
> +	max_low_pfn = PFN_DOWN(memblock_end_of_DRAM());
> +
> +#ifdef CONFIG_BLK_DEV_INITRD
> +	setup_initrd();
> +#endif /* CONFIG_BLK_DEV_INITRD */
> +
> +	early_init_fdt_reserve_self();
> +	early_init_fdt_scan_reserved_mem();
> +	memblock_allow_resize();
> +	memblock_dump_all();
> +
> +	for_each_memblock(memory, reg) {
> +		unsigned long start_pfn = memblock_region_memory_base_pfn(reg);
> +		unsigned long end_pfn = memblock_region_memory_end_pfn(reg);
> +
> +		memblock_set_node(PFN_PHYS(start_pfn),
> +				  PFN_PHYS(end_pfn - start_pfn),
> +				  &memblock.memory, 0);
> +	}
> +}
> -- 
> 2.17.1
> 

-- 
Sincerely yours,
Mike.


WARNING: multiple messages have this Message-ID (diff)
From: Mike Rapoport <rppt@linux.ibm.com>
To: Anup Patel <Anup.Patel@wdc.com>
Cc: Albert Ou <aou@eecs.berkeley.edu>,
	Palmer Dabbelt <palmer@sifive.com>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	Christoph Hellwig <hch@infradead.org>,
	Atish Patra <Atish.Patra@wdc.com>,
	Paul Walmsley <paul.walmsley@sifive.com>,
	"linux-riscv@lists.infradead.org"
	<linux-riscv@lists.infradead.org>
Subject: Re: [PATCH v6 2/5] RISC-V: Move setup_bootmem() to mm/init.c
Date: Wed, 13 Feb 2019 18:33:04 +0200	[thread overview]
Message-ID: <20190213163304.GB6110@rapoport-lnx> (raw)
In-Reply-To: <20190213115301.103989-3-anup.patel@wdc.com>

On Wed, Feb 13, 2019 at 11:53:37AM +0000, Anup Patel wrote:
> The setup_bootmem() mainly populates memblocks and does early memory
> reservations. The right location for this function is mm/init.c. It
> calls setup_initrd() so we move that as well.
> 
> Signed-off-by: Anup Patel <anup.patel@wdc.com>
> Reviewed-by: Christoph Hellwig <hch@lst.de>
> Reviewed-by: Palmer Dabbelt <palmer@sifive.com>

Reviewed-by: Mike Rapoport <rppt@linux.ibm.com>

> ---
>  arch/riscv/include/asm/pgtable.h |  1 +
>  arch/riscv/kernel/setup.c        | 72 --------------------------------
>  arch/riscv/mm/init.c             | 70 +++++++++++++++++++++++++++++++
>  3 files changed, 71 insertions(+), 72 deletions(-)
> 
> diff --git a/arch/riscv/include/asm/pgtable.h b/arch/riscv/include/asm/pgtable.h
> index 16301966d65b..35893810cba3 100644
> --- a/arch/riscv/include/asm/pgtable.h
> +++ b/arch/riscv/include/asm/pgtable.h
> @@ -404,6 +404,7 @@ static inline int ptep_clear_flush_young(struct vm_area_struct *vma,
>  #define kern_addr_valid(addr)   (1) /* FIXME */
>  #endif
>  
> +extern void setup_bootmem(void);
>  extern void paging_init(void);
>  
>  static inline void pgtable_cache_init(void)
> diff --git a/arch/riscv/kernel/setup.c b/arch/riscv/kernel/setup.c
> index c6e858122815..49bce6692f39 100644
> --- a/arch/riscv/kernel/setup.c
> +++ b/arch/riscv/kernel/setup.c
> @@ -23,7 +23,6 @@
>  #include <linux/mm.h>
>  #include <linux/memblock.h>
>  #include <linux/sched.h>
> -#include <linux/initrd.h>
>  #include <linux/console.h>
>  #include <linux/screen_info.h>
>  #include <linux/of_fdt.h>
> @@ -70,34 +69,6 @@ void __init smp_setup_processor_id(void)
>  	cpuid_to_hartid_map(0) = boot_cpu_hartid;
>  }
>  
> -#ifdef CONFIG_BLK_DEV_INITRD
> -static void __init setup_initrd(void)
> -{
> -	unsigned long size;
> -
> -	if (initrd_start >= initrd_end) {
> -		printk(KERN_INFO "initrd not found or empty");
> -		goto disable;
> -	}
> -	if (__pa(initrd_end) > PFN_PHYS(max_low_pfn)) {
> -		printk(KERN_ERR "initrd extends beyond end of memory");
> -		goto disable;
> -	}
> -
> -	size =  initrd_end - initrd_start;
> -	memblock_reserve(__pa(initrd_start), size);
> -	initrd_below_start_ok = 1;
> -
> -	printk(KERN_INFO "Initial ramdisk at: 0x%p (%lu bytes)\n",
> -		(void *)(initrd_start), size);
> -	return;
> -disable:
> -	pr_cont(" - disabling initrd\n");
> -	initrd_start = 0;
> -	initrd_end = 0;
> -}
> -#endif /* CONFIG_BLK_DEV_INITRD */
> -
>  pgd_t swapper_pg_dir[PTRS_PER_PGD] __page_aligned_bss;
>  pgd_t trampoline_pg_dir[PTRS_PER_PGD] __initdata __aligned(PAGE_SIZE);
>  
> @@ -159,49 +130,6 @@ void __init parse_dtb(unsigned int hartid, void *dtb)
>  #endif
>  }
>  
> -static void __init setup_bootmem(void)
> -{
> -	struct memblock_region *reg;
> -	phys_addr_t mem_size = 0;
> -
> -	/* Find the memory region containing the kernel */
> -	for_each_memblock(memory, reg) {
> -		phys_addr_t vmlinux_end = __pa(_end);
> -		phys_addr_t end = reg->base + reg->size;
> -
> -		if (reg->base <= vmlinux_end && vmlinux_end <= end) {
> -			/*
> -			 * Reserve from the start of the region to the end of
> -			 * the kernel
> -			 */
> -			memblock_reserve(reg->base, vmlinux_end - reg->base);
> -			mem_size = min(reg->size, (phys_addr_t)-PAGE_OFFSET);
> -		}
> -	}
> -	BUG_ON(mem_size == 0);
> -
> -	set_max_mapnr(PFN_DOWN(mem_size));
> -	max_low_pfn = PFN_DOWN(memblock_end_of_DRAM());
> -
> -#ifdef CONFIG_BLK_DEV_INITRD
> -	setup_initrd();
> -#endif /* CONFIG_BLK_DEV_INITRD */
> -
> -	early_init_fdt_reserve_self();
> -	early_init_fdt_scan_reserved_mem();
> -	memblock_allow_resize();
> -	memblock_dump_all();
> -
> -	for_each_memblock(memory, reg) {
> -		unsigned long start_pfn = memblock_region_memory_base_pfn(reg);
> -		unsigned long end_pfn = memblock_region_memory_end_pfn(reg);
> -
> -		memblock_set_node(PFN_PHYS(start_pfn),
> -		                  PFN_PHYS(end_pfn - start_pfn),
> -		                  &memblock.memory, 0);
> -	}
> -}
> -
>  void __init setup_arch(char **cmdline_p)
>  {
>  	init_mm.start_code = (unsigned long) _stext;
> diff --git a/arch/riscv/mm/init.c b/arch/riscv/mm/init.c
> index 658ebf645f42..bedaf04f9c2f 100644
> --- a/arch/riscv/mm/init.c
> +++ b/arch/riscv/mm/init.c
> @@ -17,6 +17,7 @@
>  #include <linux/initrd.h>
>  #include <linux/swap.h>
>  #include <linux/sizes.h>
> +#include <linux/of_fdt.h>
>  
>  #include <asm/tlbflush.h>
>  #include <asm/sections.h>
> @@ -66,7 +67,76 @@ void free_initmem(void)
>  }
>  
>  #ifdef CONFIG_BLK_DEV_INITRD
> +static void __init setup_initrd(void)
> +{
> +	unsigned long size;
> +
> +	if (initrd_start >= initrd_end) {
> +		printk(KERN_INFO "initrd not found or empty");
> +		goto disable;
> +	}
> +	if (__pa(initrd_end) > PFN_PHYS(max_low_pfn)) {
> +		printk(KERN_ERR "initrd extends beyond end of memory");
> +		goto disable;
> +	}
> +
> +	size =  initrd_end - initrd_start;
> +	memblock_reserve(__pa(initrd_start), size);
> +	initrd_below_start_ok = 1;
> +
> +	printk(KERN_INFO "Initial ramdisk at: 0x%p (%lu bytes)\n",
> +		(void *)(initrd_start), size);
> +	return;
> +disable:
> +	pr_cont(" - disabling initrd\n");
> +	initrd_start = 0;
> +	initrd_end = 0;
> +}
> +
>  void free_initrd_mem(unsigned long start, unsigned long end)
>  {
>  }
>  #endif /* CONFIG_BLK_DEV_INITRD */
> +
> +void __init setup_bootmem(void)
> +{
> +	struct memblock_region *reg;
> +	phys_addr_t mem_size = 0;
> +
> +	/* Find the memory region containing the kernel */
> +	for_each_memblock(memory, reg) {
> +		phys_addr_t vmlinux_end = __pa(_end);
> +		phys_addr_t end = reg->base + reg->size;
> +
> +		if (reg->base <= vmlinux_end && vmlinux_end <= end) {
> +			/*
> +			 * Reserve from the start of the region to the end of
> +			 * the kernel
> +			 */
> +			memblock_reserve(reg->base, vmlinux_end - reg->base);
> +			mem_size = min(reg->size, (phys_addr_t)-PAGE_OFFSET);
> +		}
> +	}
> +	BUG_ON(mem_size == 0);
> +
> +	set_max_mapnr(PFN_DOWN(mem_size));
> +	max_low_pfn = PFN_DOWN(memblock_end_of_DRAM());
> +
> +#ifdef CONFIG_BLK_DEV_INITRD
> +	setup_initrd();
> +#endif /* CONFIG_BLK_DEV_INITRD */
> +
> +	early_init_fdt_reserve_self();
> +	early_init_fdt_scan_reserved_mem();
> +	memblock_allow_resize();
> +	memblock_dump_all();
> +
> +	for_each_memblock(memory, reg) {
> +		unsigned long start_pfn = memblock_region_memory_base_pfn(reg);
> +		unsigned long end_pfn = memblock_region_memory_end_pfn(reg);
> +
> +		memblock_set_node(PFN_PHYS(start_pfn),
> +				  PFN_PHYS(end_pfn - start_pfn),
> +				  &memblock.memory, 0);
> +	}
> +}
> -- 
> 2.17.1
> 

-- 
Sincerely yours,
Mike.


_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv

  reply	other threads:[~2019-02-13 16:33 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-02-13 11:53 [PATCH v6 0/5] Fixmap support and MM cleanups Anup Patel
2019-02-13 11:53 ` Anup Patel
2019-02-13 11:53 ` [PATCH v6 1/5] RISC-V: Setup init_mm before parse_early_param() Anup Patel
2019-02-13 11:53   ` Anup Patel
2019-02-13 11:53 ` [PATCH v6 2/5] RISC-V: Move setup_bootmem() to mm/init.c Anup Patel
2019-02-13 11:53   ` Anup Patel
2019-02-13 16:33   ` Mike Rapoport [this message]
2019-02-13 16:33     ` Mike Rapoport
2019-02-13 11:53 ` [PATCH v6 3/5] RISC-V: Move setup_vm() " Anup Patel
2019-02-13 11:53   ` Anup Patel
2019-02-13 11:53 ` [PATCH v6 4/5] RISC-V: Implement compile-time fixed mappings Anup Patel
2019-02-13 11:53   ` Anup Patel
2019-02-13 11:53 ` [PATCH v6 5/5] RISC-V: Free-up initrd in free_initrd_mem() Anup Patel
2019-02-13 11:53   ` Anup Patel
2019-02-13 16:33   ` Mike Rapoport
2019-02-13 16:33     ` Mike Rapoport
2019-02-13 17:50   ` Christoph Hellwig
2019-02-13 17:50     ` Christoph Hellwig

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190213163304.GB6110@rapoport-lnx \
    --to=rppt@linux.ibm.com \
    --cc=Anup.Patel@wdc.com \
    --cc=Atish.Patra@wdc.com \
    --cc=aou@eecs.berkeley.edu \
    --cc=hch@infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-riscv@lists.infradead.org \
    --cc=palmer@sifive.com \
    --cc=paul.walmsley@sifive.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.