From e5d0bed084a863938abf2acd663560f8c79b50ad Mon Sep 17 00:00:00 2001 From: Jaewon Kim Date: Wed, 17 Jul 2024 10:51:09 +0900 Subject: [PATCH] ANDROID: memblock: do not track obsolete_checksetup and do_early_param Originally I've added memsize logic to track memblock memory allocated at the obsolete_checksetup and do_early_param. That showed size with its param name. But nowadays we don't see that big memory allocation in that early param. To simplify memsize code, let me remove related code. Some code like memblock_memsize_free will be remained for the next commits. Bug: 340432773 Signed-off-by: Jaewon Kim Change-Id: If54870c3b9da7a83d47cadde3d05b5ed6ace5b7e --- include/linux/memblock.h | 4 -- init/main.c | 13 +---- mm/memblock.c | 119 +++++++++++---------------------------- 3 files changed, 36 insertions(+), 100 deletions(-) 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) {