• David Hildenbrand's avatar
    mm: pass meminit_context to __free_pages_core() · 13c52654
    David Hildenbrand authored
    Patch series "mm/memory_hotplug: use PageOffline() instead of
    PageReserved() for !ZONE_DEVICE".
    
    This can be a considered a long-overdue follow-up to some parts of [1]. 
    The patches are based on [2], but they are not strictly required -- just
    makes it clearer why we can use adjust_managed_page_count() for memory
    hotplug without going into details about highmem.
    
    We stop initializing pages with PageReserved() in memory hotplug code --
    except when dealing with ZONE_DEVICE for now.  Instead, we use
    PageOffline(): all pages are initialized to PageOffline() when onlining a
    memory section, and only the ones actually getting exposed to the
    system/page allocator will get PageOffline cleared.
    
    This way, we enlighten memory hotplug more about PageOffline() pages and
    can cleanup some hacks we have in virtio-mem code.
    
    What about ZONE_DEVICE?  PageOffline() is wrong, but we might just stop
    using PageReserved() for them later by simply checking for
    is_zone_device_page() at suitable places.  That will be a separate patch
    set / proposal.
    
    This primarily affects virtio-mem, HV-balloon and XEN balloon. I only
    briefly tested with virtio-mem, which benefits most from these cleanups.
    
    [1] https://lore.kernel.org/all/20191024120938.11237-1-david@redhat.com/
    [2] https://lkml.kernel.org/r/20240607083711.62833-1-david@redhat.com
    
    
    This patch (of 3):
    
    In preparation for further changes, let's teach __free_pages_core() about
    the differences of memory hotplug handling.
    
    Move the memory hotplug specific handling from generic_online_page() to
    __free_pages_core(), use adjust_managed_page_count() on the memory hotplug
    path, and spell out why memory freed via memblock cannot currently use
    adjust_managed_page_count().
    
    [david@redhat.com: add missed CONFIG_DEFERRED_STRUCT_PAGE_INIT]
      Link: https://lkml.kernel.org/r/b72e6efd-fb0a-459c-b1a0-88a98e5b19e2@redhat.com
    [david@redhat.com: fix up the memblock comment, per Oscar]
      Link: https://lkml.kernel.org/r/2ed64218-7f3b-4302-a5dc-27f060654fe2@redhat.com
    [david@redhat.com: add the parameter name also in the declaration]
      Link: https://lkml.kernel.org/r/ca575956-f0dd-4fb9-a307-6b7621681ed9@redhat.com
    Link: https://lkml.kernel.org/r/20240607090939.89524-1-david@redhat.com
    Link: https://lkml.kernel.org/r/20240607090939.89524-2-david@redhat.comSigned-off-by: default avatarDavid Hildenbrand <david@redhat.com>
    Cc: Alexander Potapenko <glider@google.com>
    Cc: Dexuan Cui <decui@microsoft.com>
    Cc: Dmitry Vyukov <dvyukov@google.com>
    Cc: Eugenio Pérez <eperezma@redhat.com>
    Cc: Haiyang Zhang <haiyangz@microsoft.com>
    Cc: Jason Wang <jasowang@redhat.com>
    Cc: Juergen Gross <jgross@suse.com>
    Cc: "K. Y. Srinivasan" <kys@microsoft.com>
    Cc: Marco Elver <elver@google.com>
    Cc: Michael S. Tsirkin <mst@redhat.com>
    Cc: Mike Rapoport (IBM) <rppt@kernel.org>
    Cc: Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com>
    Cc: Oscar Salvador <osalvador@suse.de>
    Cc: Stefano Stabellini <sstabellini@kernel.org>
    Cc: Wei Liu <wei.liu@kernel.org>
    Cc: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    13c52654
init.c 6.33 KB