The kcore_ram_list bounds its scan at the highest pfn in N_MEMORY. As a result, private nodes placed above the last N_MEMORY node, which is the common case for device/CXL memory - is truncated out of /proc/kcore.
Include N_MEMORY_PRIVATE nodes in the scan boundary. /proc/kcore is root-only (CAP_SYS_RAWIO), so this exposes nothing new - it just lets a debugger read private-node memory like any other RAM. Signed-off-by: Gregory Price <[email protected]> --- fs/proc/kcore.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/fs/proc/kcore.c b/fs/proc/kcore.c index 390547b992acd..f67194dc2a9b8 100644 --- a/fs/proc/kcore.c +++ b/fs/proc/kcore.c @@ -251,11 +251,14 @@ static int kcore_ram_list(struct list_head *list) { int nid, ret; unsigned long end_pfn; + nodemask_t mem; /* Not initialized....update now */ /* find out "max pfn" */ end_pfn = 0; - for_each_node_state(nid, N_MEMORY) { + /* Include private node memory in the scan */ + nodes_or(mem, node_states[N_MEMORY], node_states[N_MEMORY_PRIVATE]); + for_each_node_mask(nid, mem) { unsigned long node_end; node_end = node_end_pfn(nid); if (end_pfn < node_end) -- 2.53.0-Meta

