diff --git a/include/linux/memblock.h b/include/linux/memblock.h index 8d7472eae454..e2b3a75f8ac7 100644 --- a/include/linux/memblock.h +++ b/include/linux/memblock.h @@ -597,14 +597,10 @@ static inline void memtest_report_meminfo(struct seq_file *m) { } extern void __init_memblock memblock_memsize_record(const char *name, phys_addr_t base, phys_addr_t size, bool nomap, bool reusable); extern void __init memblock_memsize_detect_hole(void); -extern void __init memblock_memsize_set_name(const char *name); -extern void __init memblock_memsize_unset_name(void); #else static inline void __init_memblock memblock_memsize_record(const char *name, phys_addr_t base, phys_addr_t size, bool nomap, bool reusable) { } static inline void __init memblock_memsize_detect_hole(void) { } -static inline void __init memblock_memsize_set_name(const char *name) { } -static inline void __init memblock_memsize_unset_name(void) { } #endif #endif /* _LINUX_MEMBLOCK_H */ diff --git a/init/main.c b/init/main.c index 54492f0956f1..f241ce702dbb 100644 --- a/init/main.c +++ b/init/main.c @@ -212,15 +212,8 @@ static bool __init obsolete_checksetup(char *line) pr_warn("Parameter %s is obsolete, ignored\n", p->str); return true; - } else { - int ret; - - memblock_memsize_set_name(p->str); - ret = p->setup_func(line + n); - memblock_memsize_unset_name(); - if (ret) - return true; - } + } else if (p->setup_func(line + n)) + return true; } p++; } while (p < __setup_end); @@ -765,10 +758,8 @@ static int __init do_early_param(char *param, char *val, (strcmp(param, "console") == 0 && strcmp(p->str, "earlycon") == 0) ) { - memblock_memsize_set_name(p->str); if (p->setup_func(val) != 0) pr_warn("Malformed early option '%s'\n", param); - memblock_memsize_unset_name(); } } /* We accept everything at this stage. */ diff --git a/mm/memblock.c b/mm/memblock.c index eafb277c2a81..0fe2c1dcdd92 100644 --- a/mm/memblock.c +++ b/mm/memblock.c @@ -175,18 +175,6 @@ static inline phys_addr_t memblock_cap_size(phys_addr_t base, phys_addr_t *size) return *size = min(*size, PHYS_ADDR_MAX - base); } -#ifdef CONFIG_MEMBLOCK_MEMSIZE -static void memblock_memsize_record_add(struct memblock_type *type, - phys_addr_t base, phys_addr_t size); -static void memblock_memsize_record_remove(struct memblock_type *type, - phys_addr_t base, phys_addr_t size); -#else -static inline void memblock_memsize_record_add(struct memblock_type *type, - phys_addr_t base, phys_addr_t size) { } -static inline void memblock_memsize_record_remove(struct memblock_type *type, - phys_addr_t base, phys_addr_t size) { } -#endif - /* * Address comparison utilities */ @@ -702,8 +690,6 @@ repeat: memblock_merge_regions(type, start_rgn, end_rgn); } done: - if (new_size == size) - memblock_memsize_record_add(type, obase, size); return 0; } @@ -875,7 +861,6 @@ static int __init_memblock memblock_remove_range(struct memblock_type *type, for (i = end_rgn - 1; i >= start_rgn; i--) memblock_remove_region(type, i); - memblock_memsize_record_remove(type, base, size); return 0; } @@ -2069,7 +2054,6 @@ struct memsize_rgn_struct { static struct memsize_rgn_struct memsize_rgn[CONFIG_MAX_MEMBLOCK_MEMSIZE] __initdata_memblock; static int memsize_rgn_count __initdata_memblock; -static const char *memblock_memsize_name __initdata_memblock; static void __init_memblock memsize_get_valid_name(char *valid_name, const char *name) { @@ -2266,75 +2250,6 @@ void __init memblock_memsize_detect_hole(void) } } } - -/* assume that freeing region is NOT bigger than the previous region */ -static void __init_memblock memblock_memsize_free(phys_addr_t free_base, - phys_addr_t free_size) -{ - int i; - struct memsize_rgn_struct *rgn; - phys_addr_t free_end, end; - - free_end = free_base + free_size - 1; - memblock_dbg("%s %pa..%pa\n", - __func__, &free_base, &free_end); - - for (i = 0; i < memsize_rgn_count; i++) { - rgn = &memsize_rgn[i]; - - end = rgn->base + rgn->size; - if (free_base < rgn->base || - free_base >= end) - continue; - - free_end = free_base + free_size; - if (free_base == rgn->base) { - rgn->size -= free_size; - if (rgn->size != 0) - rgn->base += free_size; - } else if (free_end == end) { - rgn->size -= free_size; - } else { - memblock_memsize_record(rgn->name, free_end, - end - free_end, rgn->nomap, rgn->reusable); - rgn->size = free_base - rgn->base; - } - } -} - -void __init memblock_memsize_set_name(const char *name) -{ - memblock_memsize_name = name; -} - -void __init memblock_memsize_unset_name(void) -{ - memblock_memsize_name = NULL; -} - -static void __init_memblock memblock_memsize_record_add(struct memblock_type *type, - phys_addr_t base, phys_addr_t size) -{ - if (memblock_memsize_name) { - if (type == &memblock.reserved) - memblock_memsize_record(memblock_memsize_name, - base, size, false, false); - else if (type == &memblock.memory) - memblock_memsize_free(base, size); - } -} - -static void __init_memblock memblock_memsize_record_remove(struct memblock_type *type, - phys_addr_t base, phys_addr_t size) -{ - if (memblock_memsize_name) { - if (type == &memblock.reserved) - memblock_memsize_free(base, size); - else if (type == &memblock.memory) - memblock_memsize_record(memblock_memsize_name, - base, size, true, false); - } -} #endif /* MEMBLOCK_MEMSIZE */ static void __init free_memmap(unsigned long start_pfn, unsigned long end_pfn) @@ -2719,6 +2634,40 @@ static int memblock_debug_show(struct seq_file *m, void *private) DEFINE_SHOW_ATTRIBUTE(memblock_debug); #ifdef CONFIG_MEMBLOCK_MEMSIZE +/* assume that freeing region is NOT bigger than the previous region */ +static void __maybe_unused memblock_memsize_free(phys_addr_t free_base, + phys_addr_t free_size) +{ + int i; + struct memsize_rgn_struct *rgn; + phys_addr_t free_end, end; + + free_end = free_base + free_size - 1; + memblock_dbg("%s %pa..%pa\n", + __func__, &free_base, &free_end); + + for (i = 0; i < memsize_rgn_count; i++) { + rgn = &memsize_rgn[i]; + + end = rgn->base + rgn->size; + if (free_base < rgn->base || + free_base >= end) + continue; + + free_end = free_base + free_size; + if (free_base == rgn->base) { + rgn->size -= free_size; + if (rgn->size != 0) + rgn->base += free_size; + } else if (free_end == end) { + rgn->size -= free_size; + } else { + memblock_memsize_record(rgn->name, free_end, + end - free_end, rgn->nomap, rgn->reusable); + rgn->size = free_base - rgn->base; + } + } +} static int memsize_rgn_cmp(const void *a, const void *b) {