lkml.org 
[lkml]   [2021]   [Dec]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH v3] mm: fix panic in __alloc_pages
    On Tue 07-12-21 17:40:36, David Hildenbrand wrote:
    > On 07.12.21 17:36, Michal Hocko wrote:
    > > On Tue 07-12-21 17:27:29, Michal Hocko wrote:
    > > [...]
    > >> So your proposal is to drop set_node_online from the patch and add it as
    > >> a separate one which handles
    > >> - sysfs part (i.e. do not register a node which doesn't span a
    > >> physical address space)
    > >> - hotplug side of (drop the pgd allocation, register node lazily
    > >> when a first memblocks are registered)
    > >
    >
    > > In other words, the first stage
    > > diff --git a/mm/page_alloc.c b/mm/page_alloc.c
    > > index c5952749ad40..f9024ba09c53 100644
    > > --- a/mm/page_alloc.c
    > > +++ b/mm/page_alloc.c
    > > @@ -6382,7 +6382,11 @@ static void __build_all_zonelists(void *data)
    > > if (self && !node_online(self->node_id)) {
    > > build_zonelists(self);
    > > } else {
    > > - for_each_online_node(nid) {
    > > + /*
    > > + * All possible nodes have pgdat preallocated
    > > + * free_area_init
    > > + */
    > > + for_each_node(nid) {
    > > pg_data_t *pgdat = NODE_DATA(nid);
    > >
    > > build_zonelists(pgdat);
    > > @@ -8032,8 +8036,24 @@ void __init free_area_init(unsigned long *max_zone_pfn)
    > > /* Initialise every node */
    > > mminit_verify_pageflags_layout();
    > > setup_nr_node_ids();
    > > - for_each_online_node(nid) {
    > > - pg_data_t *pgdat = NODE_DATA(nid);
    > > + for_each_node(nid) {
    > > + pg_data_t *pgdat;
    > > +
    > > + if (!node_online(nid)) {
    > > + pr_warn("Node %d uninitialized by the platform. Please report with boot dmesg.\n", nid);
    > > + pgdat = arch_alloc_nodedata(nid);
    >
    > Is the buddy fully up an running at that point? I don't think so, so we
    > might have to allocate via memblock instead. But I might be wrong.

    No, not only the page allocator is not ready but slab allocator used by
    the generic implementation is not up yet either. I will look deeper into
    this later today but I suspect the only choice is to use the memblock
    allocator - same way the arch specific code allocates pgdats.

    --
    Michal Hocko
    SUSE Labs

    \
     
     \ /
      Last update: 2021-12-08 09:29    [W:5.383 / U:0.088 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site