Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge tag 'fixes-2024-06-23' of git://git.kernel.org/pub/scm/linux/kernel/git/rppt/memblock

Pull memblock fix from Mike Rapoport:
"Fix fragility in checks for unset node ID.

Use numa_valid_node() function to verify that nid is a valid node
ID instead of inconsistent comparisons with either NUMA_NO_NODE or
MAX_NUMNODES"

* tag 'fixes-2024-06-23' of git://git.kernel.org/pub/scm/linux/kernel/git/rppt/memblock:
memblock: use numa_valid_node() helper to check for invalid node ID

+12 -21
+5
include/linux/numa.h
··· 15 15 #define NUMA_NO_NODE (-1) 16 16 #define NUMA_NO_MEMBLK (-1) 17 17 18 + static inline bool numa_valid_node(int nid) 19 + { 20 + return nid >= 0 && nid < MAX_NUMNODES; 21 + } 22 + 18 23 /* optionally keep NUMA memory info available post init */ 19 24 #ifdef CONFIG_NUMA_KEEP_MEMINFO 20 25 #define __initdata_or_meminfo
+7 -21
mm/memblock.c
··· 754 754 755 755 /* calculate lose page */ 756 756 for_each_mem_pfn_range(i, MAX_NUMNODES, &start_pfn, &end_pfn, &nid) { 757 - if (nid == NUMA_NO_NODE) 757 + if (!numa_valid_node(nid)) 758 758 nr_pages += end_pfn - start_pfn; 759 759 } 760 760 ··· 1061 1061 return false; 1062 1062 1063 1063 /* only memory regions are associated with nodes, check it */ 1064 - if (nid != NUMA_NO_NODE && nid != m_nid) 1064 + if (numa_valid_node(nid) && nid != m_nid) 1065 1065 return true; 1066 1066 1067 1067 /* skip hotpluggable memory regions if needed */ ··· 1117 1117 { 1118 1118 int idx_a = *idx & 0xffffffff; 1119 1119 int idx_b = *idx >> 32; 1120 - 1121 - if (WARN_ONCE(nid == MAX_NUMNODES, 1122 - "Usage of MAX_NUMNODES is deprecated. Use NUMA_NO_NODE instead\n")) 1123 - nid = NUMA_NO_NODE; 1124 1120 1125 1121 for (; idx_a < type_a->cnt; idx_a++) { 1126 1122 struct memblock_region *m = &type_a->regions[idx_a]; ··· 1211 1215 int idx_a = *idx & 0xffffffff; 1212 1216 int idx_b = *idx >> 32; 1213 1217 1214 - if (WARN_ONCE(nid == MAX_NUMNODES, "Usage of MAX_NUMNODES is deprecated. Use NUMA_NO_NODE instead\n")) 1215 - nid = NUMA_NO_NODE; 1216 - 1217 1218 if (*idx == (u64)ULLONG_MAX) { 1218 1219 idx_a = type_a->cnt - 1; 1219 1220 if (type_b != NULL) ··· 1296 1303 1297 1304 if (PFN_UP(r->base) >= PFN_DOWN(r->base + r->size)) 1298 1305 continue; 1299 - if (nid == MAX_NUMNODES || nid == r_nid) 1306 + if (!numa_valid_node(nid) || nid == r_nid) 1300 1307 break; 1301 1308 } 1302 1309 if (*idx >= type->cnt) { ··· 1331 1338 #ifdef CONFIG_NUMA 1332 1339 int start_rgn, end_rgn; 1333 1340 int i, ret; 1334 - 1335 - if (WARN_ONCE(nid == MAX_NUMNODES, 1336 - "Usage of MAX_NUMNODES is deprecated. Use NUMA_NO_NODE instead\n")) 1337 - nid = NUMA_NO_NODE; 1338 1341 1339 1342 ret = memblock_isolate_range(type, base, size, &start_rgn, &end_rgn); 1340 1343 if (ret) ··· 1441 1452 enum memblock_flags flags = choose_memblock_flags(); 1442 1453 phys_addr_t found; 1443 1454 1444 - if (WARN_ONCE(nid == MAX_NUMNODES, "Usage of MAX_NUMNODES is deprecated. Use NUMA_NO_NODE instead\n")) 1445 - nid = NUMA_NO_NODE; 1446 - 1447 1455 if (!align) { 1448 1456 /* Can't use WARNs this early in boot on powerpc */ 1449 1457 dump_stack(); ··· 1453 1467 if (found && !memblock_reserve(found, size)) 1454 1468 goto done; 1455 1469 1456 - if (nid != NUMA_NO_NODE && !exact_nid) { 1470 + if (numa_valid_node(nid) && !exact_nid) { 1457 1471 found = memblock_find_in_range_node(size, align, start, 1458 1472 end, NUMA_NO_NODE, 1459 1473 flags); ··· 1973 1987 end = base + size - 1; 1974 1988 flags = rgn->flags; 1975 1989 #ifdef CONFIG_NUMA 1976 - if (memblock_get_region_node(rgn) != MAX_NUMNODES) 1990 + if (numa_valid_node(memblock_get_region_node(rgn))) 1977 1991 snprintf(nid_buf, sizeof(nid_buf), " on node %d", 1978 1992 memblock_get_region_node(rgn)); 1979 1993 #endif ··· 2167 2181 start = region->base; 2168 2182 end = start + region->size; 2169 2183 2170 - if (nid == NUMA_NO_NODE || nid >= MAX_NUMNODES) 2184 + if (!numa_valid_node(nid)) 2171 2185 nid = early_pfn_to_nid(PFN_DOWN(start)); 2172 2186 2173 2187 reserve_bootmem_region(start, end, nid); ··· 2258 2272 2259 2273 seq_printf(m, "%4d: ", i); 2260 2274 seq_printf(m, "%pa..%pa ", &reg->base, &end); 2261 - if (nid != MAX_NUMNODES) 2275 + if (numa_valid_node(nid)) 2262 2276 seq_printf(m, "%4d ", nid); 2263 2277 else 2264 2278 seq_printf(m, "%4c ", 'x');