From mboxrd@z Thu Jan 1 00:00:00 1970 From: Marek Szyprowski Subject: Re: [PATCHv3 2/2] arm: Get rid of meminfo Date: Wed, 12 Feb 2014 09:27:33 +0100 Message-ID: <52FB3075.2060308@samsung.com> References: <1392153265-14439-1-git-send-email-lauraa@codeaurora.org> <1392153265-14439-3-git-send-email-lauraa@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Return-path: In-reply-to: <1392153265-14439-3-git-send-email-lauraa@codeaurora.org> Sender: owner-linux-mm@kvack.org To: Laura Abbott , Russell King , David Brown , Daniel Walker , Jason Cooper , Andrew Lunn , Sebastian Hesselbarth , Eric Miao , Haojian Zhuang , Ben Dooks , Kukjin Kim , linux-arm-kernel@lists.infradead.org Cc: linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, Leif Lindholm , Grygorii Strashko , Catalin Marinas , Rob Herring , Ard Biesheuvel , Will Deacon , Nicolas Pitre , Santosh Shilimkar , linux-mm@kvack.org, Andrew Morton , Courtney Cavin , Grant Likely List-Id: linux-arm-msm@vger.kernel.org Hello, On 2014-02-11 22:14, Laura Abbott wrote: > memblock is now fully integrated into the kernel and is the prefered > method for tracking memory. Rather than reinvent the wheel with > meminfo, migrate to using memblock directly instead of meminfo as > an intermediate. > > Acked-by: Jason Cooper > Acked-by: Catalin Marinas > Acked-by: Santosh Shilimkar > Tested-by: Leif Lindholm > Signed-off-by: Laura Abbott Tested-by: Marek Szyprowski > --- > arch/arm/include/asm/mach/arch.h | 4 +- > arch/arm/include/asm/memblock.h | 3 +- > arch/arm/include/asm/setup.h | 23 ------ > arch/arm/kernel/atags_parse.c | 5 +- > arch/arm/kernel/devtree.c | 5 -- > arch/arm/kernel/setup.c | 30 ++------ > arch/arm/mach-clps711x/board-clep7312.c | 7 +- > arch/arm/mach-clps711x/board-edb7211.c | 10 +-- > arch/arm/mach-clps711x/board-p720t.c | 2 +- > arch/arm/mach-footbridge/cats-hw.c | 2 +- > arch/arm/mach-footbridge/netwinder-hw.c | 2 +- > arch/arm/mach-msm/board-halibut.c | 6 -- > arch/arm/mach-msm/board-mahimahi.c | 13 +--- > arch/arm/mach-msm/board-msm7x30.c | 3 +- > arch/arm/mach-msm/board-sapphire.c | 13 ++-- > arch/arm/mach-msm/board-trout.c | 8 +-- > arch/arm/mach-orion5x/common.c | 3 +- > arch/arm/mach-orion5x/common.h | 3 +- > arch/arm/mach-pxa/cm-x300.c | 3 +- > arch/arm/mach-pxa/corgi.c | 10 +-- > arch/arm/mach-pxa/eseries.c | 9 +-- > arch/arm/mach-pxa/poodle.c | 8 +-- > arch/arm/mach-pxa/spitz.c | 8 +-- > arch/arm/mach-pxa/tosa.c | 8 +-- > arch/arm/mach-realview/core.c | 11 +-- > arch/arm/mach-realview/core.h | 3 +- > arch/arm/mach-realview/realview_pb1176.c | 8 +-- > arch/arm/mach-realview/realview_pbx.c | 17 ++--- > arch/arm/mach-s3c24xx/mach-smdk2413.c | 8 +-- > arch/arm/mach-s3c24xx/mach-vstms.c | 8 +-- > arch/arm/mach-sa1100/assabet.c | 2 +- > arch/arm/mm/init.c | 67 +++++++----------- > arch/arm/mm/mmu.c | 115 +++++++++--------------------- > 33 files changed, 136 insertions(+), 291 deletions(-) > > diff --git a/arch/arm/include/asm/mach/arch.h b/arch/arm/include/asm/mach/arch.h > index 17a3fa2..c43473a 100644 > --- a/arch/arm/include/asm/mach/arch.h > +++ b/arch/arm/include/asm/mach/arch.h > @@ -14,7 +14,6 @@ > #include > > struct tag; > -struct meminfo; > struct pt_regs; > struct smp_operations; > #ifdef CONFIG_SMP > @@ -47,8 +46,7 @@ struct machine_desc { > enum reboot_mode reboot_mode; /* default restart mode */ > struct smp_operations *smp; /* SMP operations */ > bool (*smp_init)(void); > - void (*fixup)(struct tag *, char **, > - struct meminfo *); > + void (*fixup)(struct tag *, char **); > void (*init_meminfo)(void); > void (*reserve)(void);/* reserve mem blocks */ > void (*map_io)(void);/* IO mapping function */ > diff --git a/arch/arm/include/asm/memblock.h b/arch/arm/include/asm/memblock.h > index c2f5102..bf47a6c 100644 > --- a/arch/arm/include/asm/memblock.h > +++ b/arch/arm/include/asm/memblock.h > @@ -1,10 +1,9 @@ > #ifndef _ASM_ARM_MEMBLOCK_H > #define _ASM_ARM_MEMBLOCK_H > > -struct meminfo; > struct machine_desc; > > -void arm_memblock_init(struct meminfo *, const struct machine_desc *); > +void arm_memblock_init(const struct machine_desc *); > phys_addr_t arm_memblock_steal(phys_addr_t size, phys_addr_t align); > > #endif > diff --git a/arch/arm/include/asm/setup.h b/arch/arm/include/asm/setup.h > index 8d6a089..0196091 100644 > --- a/arch/arm/include/asm/setup.h > +++ b/arch/arm/include/asm/setup.h > @@ -26,29 +26,6 @@ static const struct tagtable __tagtable_##fn __tag = { tag, fn } > */ > #define NR_BANKS CONFIG_ARM_NR_BANKS > > -struct membank { > - phys_addr_t start; > - phys_addr_t size; > - unsigned int highmem; > -}; > - > -struct meminfo { > - int nr_banks; > - struct membank bank[NR_BANKS]; > -}; > - > -extern struct meminfo meminfo; > - > -#define for_each_bank(iter,mi) \ > - for (iter = 0; iter < (mi)->nr_banks; iter++) > - > -#define bank_pfn_start(bank) __phys_to_pfn((bank)->start) > -#define bank_pfn_end(bank) __phys_to_pfn((bank)->start + (bank)->size) > -#define bank_pfn_size(bank) ((bank)->size >> PAGE_SHIFT) > -#define bank_phys_start(bank) (bank)->start > -#define bank_phys_end(bank) ((bank)->start + (bank)->size) > -#define bank_phys_size(bank) (bank)->size > - > extern int arm_add_memory(u64 start, u64 size); > extern void early_print(const char *str, ...); > extern void dump_machine_table(void); > diff --git a/arch/arm/kernel/atags_parse.c b/arch/arm/kernel/atags_parse.c > index 8c14de8..7807ef5 100644 > --- a/arch/arm/kernel/atags_parse.c > +++ b/arch/arm/kernel/atags_parse.c > @@ -22,6 +22,7 @@ > #include > #include > #include > +#include > > #include > #include > @@ -222,10 +223,10 @@ setup_machine_tags(phys_addr_t __atags_pointer, unsigned int machine_nr) > } > > if (mdesc->fixup) > - mdesc->fixup(tags, &from, &meminfo); > + mdesc->fixup(tags, &from); > > if (tags->hdr.tag == ATAG_CORE) { > - if (meminfo.nr_banks != 0) > + if (memblock_phys_mem_size()) > squash_mem_tags(tags); > save_atags(tags); > parse_tags(tags); > diff --git a/arch/arm/kernel/devtree.c b/arch/arm/kernel/devtree.c > index f751714..398cd5f 100644 > --- a/arch/arm/kernel/devtree.c > +++ b/arch/arm/kernel/devtree.c > @@ -26,11 +26,6 @@ > #include > #include > > -void __init early_init_dt_add_memory_arch(u64 base, u64 size) > -{ > - arm_add_memory(base, size); > -} > - > void * __init early_init_dt_alloc_memory_arch(u64 size, u64 align) > { > return memblock_virt_alloc(size, align); > diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c > index 1e8b030..7dd83d0 100644 > --- a/arch/arm/kernel/setup.c > +++ b/arch/arm/kernel/setup.c > @@ -625,15 +625,8 @@ void __init dump_machine_table(void) > > int __init arm_add_memory(u64 start, u64 size) > { > - struct membank *bank = &meminfo.bank[meminfo.nr_banks]; > u64 aligned_start; > > - if (meminfo.nr_banks >= NR_BANKS) { > - pr_crit("NR_BANKS too low, ignoring memory at 0x%08llx\n", > - (long long)start); > - return -EINVAL; > - } > - > /* > * Ensure that start/size are aligned to a page boundary. > * Size is appropriately rounded down, start is rounded up. > @@ -674,17 +667,17 @@ int __init arm_add_memory(u64 start, u64 size) > aligned_start = PHYS_OFFSET; > } > > - bank->start = aligned_start; > - bank->size = size & ~(phys_addr_t)(PAGE_SIZE - 1); > + start = aligned_start; > + size = size & ~(phys_addr_t)(PAGE_SIZE - 1); > > /* > * Check whether this memory region has non-zero size or > * invalid node number. > */ > - if (bank->size == 0) > + if (size == 0) > return -EINVAL; > > - meminfo.nr_banks++; > + memblock_add(start, size); > return 0; > } > > @@ -692,6 +685,7 @@ int __init arm_add_memory(u64 start, u64 size) > * Pick out the memory size. We look for mem=size@start, > * where start and size are "size[KkMm]" > */ > + > static int __init early_mem(char *p) > { > static int usermem __initdata = 0; > @@ -706,7 +700,8 @@ static int __init early_mem(char *p) > */ > if (usermem == 0) { > usermem = 1; > - meminfo.nr_banks = 0; > + memblock_remove(memblock_start_of_DRAM(), > + memblock_end_of_DRAM() - memblock_start_of_DRAM()); > } > > start = PHYS_OFFSET; > @@ -851,13 +846,6 @@ static void __init reserve_crashkernel(void) > static inline void reserve_crashkernel(void) {} > #endif /* CONFIG_KEXEC */ > > -static int __init meminfo_cmp(const void *_a, const void *_b) > -{ > - const struct membank *a = _a, *b = _b; > - long cmp = bank_pfn_start(a) - bank_pfn_start(b); > - return cmp < 0 ? -1 : cmp > 0 ? 1 : 0; > -} > - > void __init hyp_mode_check(void) > { > #ifdef CONFIG_ARM_VIRT_EXT > @@ -900,12 +888,10 @@ void __init setup_arch(char **cmdline_p) > > parse_early_param(); > > - sort(&meminfo.bank, meminfo.nr_banks, sizeof(meminfo.bank[0]), meminfo_cmp, NULL); > - > early_paging_init(mdesc, lookup_processor_type(read_cpuid_id())); > setup_dma_zone(mdesc); > sanity_check_meminfo(); > - arm_memblock_init(&meminfo, mdesc); > + arm_memblock_init(mdesc); > > paging_init(mdesc); > request_standard_resources(mdesc); > diff --git a/arch/arm/mach-clps711x/board-clep7312.c b/arch/arm/mach-clps711x/board-clep7312.c > index b476424..4d04b91 100644 > --- a/arch/arm/mach-clps711x/board-clep7312.c > +++ b/arch/arm/mach-clps711x/board-clep7312.c > @@ -18,6 +18,7 @@ > #include > #include > #include > +#include > > #include > #include > @@ -26,11 +27,9 @@ > #include "common.h" > > static void __init > -fixup_clep7312(struct tag *tags, char **cmdline, struct meminfo *mi) > +fixup_clep7312(struct tag *tags, char **cmdline) > { > - mi->nr_banks=1; > - mi->bank[0].start = 0xc0000000; > - mi->bank[0].size = 0x01000000; > + memblock_add(0xc0000000, 0x01000000); > } > > MACHINE_START(CLEP7212, "Cirrus Logic 7212/7312") > diff --git a/arch/arm/mach-clps711x/board-edb7211.c b/arch/arm/mach-clps711x/board-edb7211.c > index fe6184e..b617aa2 100644 > --- a/arch/arm/mach-clps711x/board-edb7211.c > +++ b/arch/arm/mach-clps711x/board-edb7211.c > @@ -16,6 +16,7 @@ > #include > #include > #include > +#include > > #include > #include > @@ -133,7 +134,7 @@ static void __init edb7211_reserve(void) > } > > static void __init > -fixup_edb7211(struct tag *tags, char **cmdline, struct meminfo *mi) > +fixup_edb7211(struct tag *tags, char **cmdline) > { > /* > * Bank start addresses are not present in the information > @@ -143,11 +144,8 @@ fixup_edb7211(struct tag *tags, char **cmdline, struct meminfo *mi) > * Banks sizes _are_ present in the param block, but we're > * not using that information yet. > */ > - mi->bank[0].start = 0xc0000000; > - mi->bank[0].size = SZ_8M; > - mi->bank[1].start = 0xc1000000; > - mi->bank[1].size = SZ_8M; > - mi->nr_banks = 2; > + memblock_add(0xc0000000, SZ_8M); > + memblock_add(0xc1000000, SZ_8M); > } > > static void __init edb7211_init(void) > diff --git a/arch/arm/mach-clps711x/board-p720t.c b/arch/arm/mach-clps711x/board-p720t.c > index dd81b06..c1c6729 100644 > --- a/arch/arm/mach-clps711x/board-p720t.c > +++ b/arch/arm/mach-clps711x/board-p720t.c > @@ -295,7 +295,7 @@ static struct generic_bl_info p720t_lcd_backlight_pdata = { > }; > > static void __init > -fixup_p720t(struct tag *tag, char **cmdline, struct meminfo *mi) > +fixup_p720t(struct tag *tag, char **cmdline) > { > /* > * Our bootloader doesn't setup any tags (yet). > diff --git a/arch/arm/mach-footbridge/cats-hw.c b/arch/arm/mach-footbridge/cats-hw.c > index 9669cc0..de86ab6 100644 > --- a/arch/arm/mach-footbridge/cats-hw.c > +++ b/arch/arm/mach-footbridge/cats-hw.c > @@ -76,7 +76,7 @@ __initcall(cats_hw_init); > * hard reboots fail on early boards. > */ > static void __init > -fixup_cats(struct tag *tags, char **cmdline, struct meminfo *mi) > +fixup_cats(struct tag *tags, char **cmdline) > { > screen_info.orig_video_lines = 25; > screen_info.orig_video_points = 16; > diff --git a/arch/arm/mach-footbridge/netwinder-hw.c b/arch/arm/mach-footbridge/netwinder-hw.c > index eb1fa5c..cdee08c 100644 > --- a/arch/arm/mach-footbridge/netwinder-hw.c > +++ b/arch/arm/mach-footbridge/netwinder-hw.c > @@ -620,7 +620,7 @@ __initcall(nw_hw_init); > * the parameter page. > */ > static void __init > -fixup_netwinder(struct tag *tags, char **cmdline, struct meminfo *mi) > +fixup_netwinder(struct tag *tags, char **cmdline) > { > #ifdef CONFIG_ISAPNP > extern int isapnp_disable; > diff --git a/arch/arm/mach-msm/board-halibut.c b/arch/arm/mach-msm/board-halibut.c > index a775298..61bfe58 100644 > --- a/arch/arm/mach-msm/board-halibut.c > +++ b/arch/arm/mach-msm/board-halibut.c > @@ -83,11 +83,6 @@ static void __init halibut_init(void) > platform_add_devices(devices, ARRAY_SIZE(devices)); > } > > -static void __init halibut_fixup(struct tag *tags, char **cmdline, > - struct meminfo *mi) > -{ > -} > - > static void __init halibut_map_io(void) > { > msm_map_common_io(); > @@ -100,7 +95,6 @@ static void __init halibut_init_late(void) > > MACHINE_START(HALIBUT, "Halibut Board (QCT SURF7200A)") > .atag_offset = 0x100, > - .fixup = halibut_fixup, > .map_io = halibut_map_io, > .init_early = halibut_init_early, > .init_irq = halibut_init_irq, > diff --git a/arch/arm/mach-msm/board-mahimahi.c b/arch/arm/mach-msm/board-mahimahi.c > index 7d9981c..873c3ca 100644 > --- a/arch/arm/mach-msm/board-mahimahi.c > +++ b/arch/arm/mach-msm/board-mahimahi.c > @@ -22,6 +22,7 @@ > #include > #include > #include > +#include > > #include > #include > @@ -52,16 +53,10 @@ static void __init mahimahi_init(void) > platform_add_devices(devices, ARRAY_SIZE(devices)); > } > > -static void __init mahimahi_fixup(struct tag *tags, char **cmdline, > - struct meminfo *mi) > +static void __init mahimahi_fixup(struct tag *tags, char **cmdline) > { > - mi->nr_banks = 2; > - mi->bank[0].start = PHYS_OFFSET; > - mi->bank[0].node = PHYS_TO_NID(PHYS_OFFSET); > - mi->bank[0].size = (219*1024*1024); > - mi->bank[1].start = MSM_HIGHMEM_BASE; > - mi->bank[1].node = PHYS_TO_NID(MSM_HIGHMEM_BASE); > - mi->bank[1].size = MSM_HIGHMEM_SIZE; > + memblock_add(PHYS_OFFSET, 219*SZ_1M); > + memblock_add(MSM_HIGHMEM_BASE, MSM_HIGHMEM_SIZE); > } > > static void __init mahimahi_map_io(void) > diff --git a/arch/arm/mach-msm/board-msm7x30.c b/arch/arm/mach-msm/board-msm7x30.c > index 46de789..b621b23 100644 > --- a/arch/arm/mach-msm/board-msm7x30.c > +++ b/arch/arm/mach-msm/board-msm7x30.c > @@ -40,8 +40,7 @@ > #include "proc_comm.h" > #include "common.h" > > -static void __init msm7x30_fixup(struct tag *tag, char **cmdline, > - struct meminfo *mi) > +static void __init msm7x30_fixup(struct tag *tag, char **cmdline) > { > for (; tag->hdr.size; tag = tag_next(tag)) > if (tag->hdr.tag == ATAG_MEM && tag->u.mem.start == 0x200000) { > diff --git a/arch/arm/mach-msm/board-sapphire.c b/arch/arm/mach-msm/board-sapphire.c > index 3276051..e509679 100644 > --- a/arch/arm/mach-msm/board-sapphire.c > +++ b/arch/arm/mach-msm/board-sapphire.c > @@ -35,6 +35,7 @@ > > #include > #include > +#include > > #include "gpio_chip.h" > #include "board-sapphire.h" > @@ -74,22 +75,18 @@ static struct map_desc sapphire_io_desc[] __initdata = { > } > }; > > -static void __init sapphire_fixup(struct tag *tags, char **cmdline, > - struct meminfo *mi) > +static void __init sapphire_fixup(struct tag *tags, char **cmdline) > { > int smi_sz = parse_tag_smi((const struct tag *)tags); > > - mi->nr_banks = 1; > - mi->bank[0].start = PHYS_OFFSET; > - mi->bank[0].node = PHYS_TO_NID(PHYS_OFFSET); > if (smi_sz == 32) { > - mi->bank[0].size = (84*1024*1024); > + memblock_add(PHYS_OFFSET, 84*SZ_1M); > } else if (smi_sz == 64) { > - mi->bank[0].size = (101*1024*1024); > + memblock_add(PHYS_OFFSET, 101*SZ_1M); > } else { > + memblock_add(PHYS_OFFSET, 101*SZ_1M); > /* Give a default value when not get smi size */ > smi_sz = 64; > - mi->bank[0].size = (101*1024*1024); > } > } > > diff --git a/arch/arm/mach-msm/board-trout.c b/arch/arm/mach-msm/board-trout.c > index 015d544..58826cf 100644 > --- a/arch/arm/mach-msm/board-trout.c > +++ b/arch/arm/mach-msm/board-trout.c > @@ -19,6 +19,7 @@ > #include > #include > #include > +#include > > #include > #include > @@ -55,12 +56,9 @@ static void __init trout_init_irq(void) > msm_init_irq(); > } > > -static void __init trout_fixup(struct tag *tags, char **cmdline, > - struct meminfo *mi) > +static void __init trout_fixup(struct tag *tags, char **cmdline) > { > - mi->nr_banks = 1; > - mi->bank[0].start = PHYS_OFFSET; > - mi->bank[0].size = (101*1024*1024); > + memblock_add(PHYS_OFFSET, 101*SZ_1M); > } > > static void __init trout_init(void) > diff --git a/arch/arm/mach-orion5x/common.c b/arch/arm/mach-orion5x/common.c > index 3f1de11..6bbb7b5 100644 > --- a/arch/arm/mach-orion5x/common.c > +++ b/arch/arm/mach-orion5x/common.c > @@ -365,8 +365,7 @@ void orion5x_restart(enum reboot_mode mode, const char *cmd) > * Many orion-based systems have buggy bootloader implementations. > * This is a common fixup for bogus memory tags. > */ > -void __init tag_fixup_mem32(struct tag *t, char **from, > - struct meminfo *meminfo) > +void __init tag_fixup_mem32(struct tag *t, char **from) > { > for (; t->hdr.size; t = tag_next(t)) > if (t->hdr.tag == ATAG_MEM && > diff --git a/arch/arm/mach-orion5x/common.h b/arch/arm/mach-orion5x/common.h > index f565f99..175ec4c 100644 > --- a/arch/arm/mach-orion5x/common.h > +++ b/arch/arm/mach-orion5x/common.h > @@ -71,9 +71,8 @@ void edmini_v2_init(void); > static inline void edmini_v2_init(void) {}; > #endif > > -struct meminfo; > struct tag; > -extern void __init tag_fixup_mem32(struct tag *, char **, struct meminfo *); > +extern void __init tag_fixup_mem32(struct tag *, char **); > > /***************************************************************************** > * Helpers to access Orion registers > diff --git a/arch/arm/mach-pxa/cm-x300.c b/arch/arm/mach-pxa/cm-x300.c > index 584439bf..4d3588d 100644 > --- a/arch/arm/mach-pxa/cm-x300.c > +++ b/arch/arm/mach-pxa/cm-x300.c > @@ -837,8 +837,7 @@ static void __init cm_x300_init(void) > cm_x300_init_bl(); > } > > -static void __init cm_x300_fixup(struct tag *tags, char **cmdline, > - struct meminfo *mi) > +static void __init cm_x300_fixup(struct tag *tags, char **cmdline) > { > /* Make sure that mi->bank[0].start = PHYS_ADDR */ > for (; tags->hdr.size; tags = tag_next(tags)) > diff --git a/arch/arm/mach-pxa/corgi.c b/arch/arm/mach-pxa/corgi.c > index f162f1b..a763744 100644 > --- a/arch/arm/mach-pxa/corgi.c > +++ b/arch/arm/mach-pxa/corgi.c > @@ -33,6 +33,7 @@ > #include > #include > #include > +#include > #include