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
next prev parent 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: linkBe 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.