Re: [PATCH v1 0/2] mm/highmem: don't track highmem pages manually

Wei Yang
2024-06-08T00:45:08Z

On Fri, Jun 07, 2024 at 10:37:09AM +0200, David Hildenbrand wrote:
>Let's remove highmem special-casing from adjust_managed_page_count(),
>to result in less confusion why memblock manually adjusts
>totalram_pages, and __free_pages_core() only adjusts the zone's
>managed pages -- what about the highmem pages that
>adjust_managed_page_count() updates?
>

Thanks David

I have looked into this function and willing to get rid of it, but not found a
good way.

Your change really look nice.

>Now, we only maintain totalram_pages and a zone's managed pages
>independent of highmem support. We can derive the number of highmem pages
>simply by looking at the relevant zone's managed pages. I don't think
>there is any particular fast path that needs a maximum-efficient
>totalhigh_pages() implementation.
>
>Note that highmem memory is currently initialized using
>free_highmem_page()->free_reserved_page(), not __free_pages_core(). In the
>future we might want to also use __free_pages_core() to initialize
>highmem memory, to make that less special, and consider moving
>totalram_pages updates into __free_pages_core() [1], so we can just use
>adjust_managed_page_count() in there as well.
>
>Booting a simple kernel in QEMU reveals no highmem accounting change:
>
>Before:
> Memory: 3095448K/3145208K available (14802K kernel code, 2073K rwdata,
> 5000K rodata, 740K init, 556K bss, 49760K reserved, 0K cma-reserved,
> 2244488K highmem)
>
>After:
> Memory: 3095276K/3145208K available (14802K kernel code, 2073K rwdata,
> 5000K rodata, 740K init, 556K bss, 49932K reserved, 0K cma-reserved,
> 2244488K highmem)
>
>[1] https://lkml.kernel.org/r/20240601133402.2675-1-richard.weiyang@gmail.com
>
>Cc: Andrew Morton <akpm@linux-foundation.org>
>Cc: Wei Yang <richard.weiyang@gmail.com>
>
>David Hildenbrand (2):
> mm/highmem: reimplement totalhigh_pages() by walking zones
> mm/highmem: make nr_free_highpages() return "unsigned long"
>
> include/linux/highmem-internal.h | 17 ++++++-----------
> include/linux/highmem.h | 2 +-
> mm/highmem.c | 20 +++++++++++++++-----
> mm/page_alloc.c | 4 ----
> 4 files changed, 22 insertions(+), 21 deletions(-)
>
>
>base-commit: 19b8422c5bd56fb5e7085995801c6543a98bda1f
>--
>2.45.1

--
Wei Yang
Help you, Help me