On Fri, 6 Feb 2026 10:53:11 -0500 Gregory Price <[email protected]> wrote:
> On Fri, Feb 06, 2026 at 03:09:41PM +0000, Jonathan Cameron wrote: > > On Fri, 6 Feb 2026 08:31:09 -0500 > > Gregory Price <[email protected]> wrote: > > > > Now a fun corner is that a node isn't created unless there is something > > in it - the whole SRAT is the source of truth for what nodes exist > > - so we need 'something' in it - a cpu will do, or a GI, probably a GP. > > Otherwise memory ends up in node0. However, fallback lists etc happen > > as normal when first mem in a node is added. > > > ... > > For now I 'suspect' we could hack things to provide lots of waiting numa > > nodes > > and merrily assign HPA into them as we like whatever SRAT provides > > in the way of 'hints' :) > > > > look at ACPI MSCT - "Maximum Proximity Domain Information Structure" ;] > > I don't remember reading anything in the ACPI spec that says something > has to be ON any of these PXMs for it to be accounted for in the MSCT. > > Platforms can just say "Reserve that many Nodes". > > (Linux does not read this value, and on my existing systems, this number > always reflects the number of actually present PXMs) > > --- > > We probably want to ignore that and just add this: > > CONFIG_ACPI_NUMA_NODES_PER_CFMWS > int > range 1 4 > help > This option determines the number of NUMA nodes that will be > added for each CEDT CFMWS entry. > > By default ACPI reserves 1 per unique PXM entry in the SRAT, > or 1 for a CXL Fixed Memory Window without SRAT mappings. > > This will reserve up to N nodes per CEDT entry, even if that > CEDT has one or more SRAT entries. > > then in the acpi/numa/srat.c code that parses srat/cedt, just track > the number of nodes over a CEDT range. > > for each srat: > account_unique_pxm(pxm, srat_range) > > for each cedt: > nr_nodes = unique_pxms(cedt_range) > while (nr_nodes < CONFIG_ACPI_NUMA_NODES_PER_CFMWS) > node = acpi_map_pxm_to_node(*fake_pxm++); > if (node == NUMA_NO_NODE): > err("Unable to reserve additional nodes for CXL windows") > break; > node_set(node, numa_nodes_parsed); > nr_nodes++ > > This should fall out cleanly. > > The additional nodes won't be associated with anything, but could be > used for hotplug - I imagine. > That aligns with what I was thinking as a first solution to allowing this to be more dynamic. We can get clever later if this doesn't prove sufficient. Jonathan > ~Gregory
