Skip to content

Commit e0af261

Browse files
daviddaneyrafaeljw
authored andcommitted
ACPI / NUMA: Improve SRAT error detection and add messages
Loosely based on code from Robert Richter and Hanjun Guo. Improve out of range node detection as well as allow for Larger SRAT entities. Add printing of nice messages. Signed-off-by: David Daney <david.daney@cavium.com> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
1 parent 3770442 commit e0af261

File tree

1 file changed

+11
-4
lines changed

1 file changed

+11
-4
lines changed

drivers/acpi/numa.c

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -252,8 +252,11 @@ acpi_numa_memory_affinity_init(struct acpi_srat_mem_affinity *ma)
252252

253253
if (srat_disabled())
254254
goto out_err;
255-
if (ma->header.length != sizeof(struct acpi_srat_mem_affinity))
255+
if (ma->header.length < sizeof(struct acpi_srat_mem_affinity)) {
256+
pr_err("SRAT: Unexpected header length: %d\n",
257+
ma->header.length);
256258
goto out_err_bad_srat;
259+
}
257260
if ((ma->flags & ACPI_SRAT_MEM_ENABLED) == 0)
258261
goto out_err;
259262
hotpluggable = ma->flags & ACPI_SRAT_MEM_HOT_PLUGGABLE;
@@ -267,13 +270,17 @@ acpi_numa_memory_affinity_init(struct acpi_srat_mem_affinity *ma)
267270
pxm &= 0xff;
268271

269272
node = acpi_map_pxm_to_node(pxm);
270-
if (node < 0) {
271-
printk(KERN_ERR "SRAT: Too many proximity domains.\n");
273+
if (node == NUMA_NO_NODE || node >= MAX_NUMNODES) {
274+
pr_err("SRAT: Too many proximity domains.\n");
272275
goto out_err_bad_srat;
273276
}
274277

275-
if (numa_add_memblk(node, start, end) < 0)
278+
if (numa_add_memblk(node, start, end) < 0) {
279+
pr_err("SRAT: Failed to add memblk to node %u [mem %#010Lx-%#010Lx]\n",
280+
node, (unsigned long long) start,
281+
(unsigned long long) end - 1);
276282
goto out_err_bad_srat;
283+
}
277284

278285
node_set(node, numa_nodes_parsed);
279286

0 commit comments

Comments
 (0)