|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v5 7/8] xen/x86: add detection of memory interleaves for different nodes
On 06.06.2022 06:09, Wei Chen wrote:
> v4 -> v5:
> 1. Remove "nd->end == end && nd->start == start" from
> conflicting_memblks.
> 2. Use case NO_CONFLICT instead of "default".
> 3. Correct wrong "node" to "pxm" in print message.
> 4. Remove unnecesary "else" to remove the indent depth.
> 5. Convert all ranges to proper mathematical interval
> representation.
As to this:
> @@ -310,44 +343,74 @@ acpi_numa_memory_affinity_init(const struct
> acpi_srat_mem_affinity *ma)
> bad_srat();
> return;
> }
> +
> + /*
> + * For the node that already has some memory blocks, we will
> + * expand the node memory range temporarily to check memory
> + * interleaves with other nodes. We will not use this node
> + * temp memory range to check overlaps, because it will mask
> + * the overlaps in same node.
> + *
> + * Node with 0 bytes memory doesn't need this expandsion.
> + */
> + nd_start = start;
> + nd_end = end;
> + nd = &nodes[node];
> + if (nd->start != nd->end) {
> + if (nd_start > nd->start)
> + nd_start = nd->start;
> +
> + if (nd_end < nd->end)
> + nd_end = nd->end;
> + }
> +
> /* It is fine to add this area to the nodes data it will be used later*/
> - i = conflicting_memblks(start, end);
> - if (i < 0)
> - /* everything fine */;
> - else if (memblk_nodeid[i] == node) {
> - bool mismatch = !(ma->flags & ACPI_SRAT_MEM_HOT_PLUGGABLE) !=
> - !test_bit(i, memblk_hotplug);
> -
> - printk("%sSRAT: PXM %u (%"PRIpaddr"-%"PRIpaddr") overlaps with
> itself (%"PRIpaddr"-%"PRIpaddr")\n",
> - mismatch ? KERN_ERR : KERN_WARNING, pxm, start, end,
> - node_memblk_range[i].start, node_memblk_range[i].end);
> - if (mismatch) {
> - bad_srat();
> - return;
> + switch (conflicting_memblks(node, start, end, nd_start, nd_end, &i)) {
> + case OVERLAP:
> + if (memblk_nodeid[i] == node) {
> + bool mismatch = !(ma->flags &
> + ACPI_SRAT_MEM_HOT_PLUGGABLE) !=
> + !test_bit(i, memblk_hotplug);
> +
> + printk("%sSRAT: PXM %u [%"PRIpaddr"-%"PRIpaddr"]
> overlaps with itself [%"PRIpaddr"-%"PRIpaddr"]\n",
As said when discussing v4, mathematical representation is [start,end].
Please properly use a comma instead of a dash here and below plus ...
> + mismatch ? KERN_ERR : KERN_WARNING, pxm, start,
> + end - 1, node_memblk_range[i].start,
> + node_memblk_range[i].end - 1);
> + if (mismatch) {
> + bad_srat();
> + return;
> + }
> + break;
> }
> - } else {
> +
> + printk(KERN_ERR
> + "SRAT: PXM %u [%"PRIpaddr"-%"PRIpaddr"] overlaps with
> PXM %u [%"PRIpaddr"-%"PRIpaddr"]\n",
> + pxm, start, end - 1, node_to_pxm(memblk_nodeid[i]),
> + node_memblk_range[i].start,
> + node_memblk_range[i].end - 1);
> + bad_srat();
> + return;
> +
> + case INTERLEAVE:
> printk(KERN_ERR
> - "SRAT: PXM %u (%"PRIpaddr"-%"PRIpaddr") overlaps with
> PXM %u (%"PRIpaddr"-%"PRIpaddr")\n",
> - pxm, start, end, node_to_pxm(memblk_nodeid[i]),
> - node_memblk_range[i].start, node_memblk_range[i].end);
> + "SRAT: PXM %u: [%"PRIpaddr"-%"PRIpaddr"] interleaves
> with PXM %u memblk [%"PRIpaddr"-%"PRIpaddr"]\n",
> + pxm, nd_start, nd_end - 1, node_to_pxm(memblk_nodeid[i]),
> + node_memblk_range[i].start, node_memblk_range[i].end -
> 1);
> bad_srat();
> return;
> +
> + case NO_CONFLICT:
> + break;
> }
> +
> if (!(ma->flags & ACPI_SRAT_MEM_HOT_PLUGGABLE)) {
> - struct node *nd = &nodes[node];
> -
> - if (!node_test_and_set(node, memory_nodes_parsed)) {
> - nd->start = start;
> - nd->end = end;
> - } else {
> - if (start < nd->start)
> - nd->start = start;
> - if (nd->end < end)
> - nd->end = end;
> - }
> + node_set(node, memory_nodes_parsed);
> + nd->start = nd_start;
> + nd->end = nd_end;
> }
> - printk(KERN_INFO "SRAT: Node %u PXM %u %"PRIpaddr"-%"PRIpaddr"%s\n",
> - node, pxm, start, end,
> +
> + printk(KERN_INFO "SRAT: Node %u PXM %u [%"PRIpaddr"-%"PRIpaddr"]%s\n",
> + node, pxm, start, end - 1,
> ma->flags & ACPI_SRAT_MEM_HOT_PLUGGABLE ? " (hotplug)" : "");
>
> node_memblk_range[num_node_memblks].start = start;
> @@ -396,7 +459,7 @@ static int __init nodes_cover_memory(void)
>
> if (start < end) {
> printk(KERN_ERR "SRAT: No PXM for e820 range: "
> - "%"PRIpaddr" - %"PRIpaddr"\n", start, end);
> + "[%"PRIpaddr" - %"PRIpaddr"]\n", start, end -
> 1);
... please be consistent with the use of blanks (personally I'd prefer
no blanks to be there, but I could see people preferring a blank after
the comma). Then
Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx>
Jan
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |