Re: [PATCH 05/17] arch, mm: pull out allocation of NODE_DATA to generic code
David Hildenbrand <[email protected]>
| Newsgroups | gmane.linux.ports.riscv,gmane.linux.kernel,gmane.linux.ports.arm.kernel,gmane.linux.ports.mips,gmane.linux.ports.ppc64.devel,gmane.linux.ports.sh.devel,gmane.linux.ports.sparc,gmane.linux.acpi.devel,gmane.linux.drivers.devicetree,gmane.linux.kernel.cross-arch,gmane.linux.kernel.mm |
|---|---|
| Organization | Red Hat |
| Message-ID | <[email protected]> |
On 19.07.24 17:51, Jonathan Cameron wrote: > On Fri, 19 Jul 2024 17:07:35 +0200 > David Hildenbrand <[email protected]> wrote: > >>>>> - * Allocate node data. Try node-local memory and then any node. >>>>> - * Never allocate in DMA zone. >>>>> - */ >>>>> - nd_pa = memblock_phys_alloc_try_nid(nd_size, SMP_CACHE_BYTES, nid); >>>>> - if (!nd_pa) { >>>>> - pr_err("Cannot find %zu bytes in any node (initial node: %d)\n", >>>>> - nd_size, nid); >>>>> - return; >>>>> - } >>>>> - nd = __va(nd_pa); >>>>> - >>>>> - /* report and initialize */ >>>>> - printk(KERN_INFO "NODE_DATA(%d) allocated [mem %#010Lx-%#010Lx]\n", nid, >>>>> - nd_pa, nd_pa + nd_size - 1); >>>>> - tnid = early_pfn_to_nid(nd_pa >> PAGE_SHIFT); >>>>> - if (tnid != nid) >>>>> - printk(KERN_INFO " NODE_DATA(%d) on node %d\n", nid, tnid); >>>>> - >>>>> - node_data[nid] = nd; >>>>> - memset(NODE_DATA(nid), 0, sizeof(pg_data_t)); >>>>> - >>>>> - node_set_online(nid); >>>>> -} >>>>> - >>>>> /** >>>>> * numa_cleanup_meminfo - Cleanup a numa_meminfo >>>>> * @mi: numa_meminfo to clean up >>>>> @@ -571,6 +538,7 @@ static int __init numa_register_memblks(struct numa_meminfo *mi) >>>>> continue; >>>>> alloc_node_data(nid); >>>>> + node_set_online(nid); >>>>> } >>>> >>>> I can spot that we only remove a single node_set_online() call from x86. >>>> >>>> What about all the other architectures? Will there be any change in behavior >>>> for them? Or do we simply set the nodes online later once more? >>> >>> On x86 node_set_online() was a part of alloc_node_data() and I moved it >>> outside so it's called right after alloc_node_data(). On other >>> architectures the allocation didn't include that call, so there should be >>> no difference there. >> >> But won't their arch code try setting the nodes online at a later stage? >> >> And I think, some architectures only set nodes online conditionally >> (see most other node_set_online() calls). >> >> Sorry if I'm confused here, but with now unconditional node_set_online(), won't >> we change the behavior of other architectures? > This is moving x86 code to x86 code, not a generic location > so how would that affect anyone else? Their onlining should be same as > before. Yes, see my reply to Mike. > > The node onlining difference are a pain (I recall that fun from adding > generic initiators) as different ordering on x86 and arm64 at least. That's part of the reason I was confused, because I remember some nasty inconsistency. -- Cheers, David / dhildenb