Re: [PATCH] cxl/test: Map mock device nodes to an online node

shaikh kamaluddin <[email protected]>
Newsgroups org.kernel.vger.linux-cxl
Message-ID <aoSC7U7QSuCFzzGH@acer-nitro-anv15-41>
On Thu, Jul 23, 2026 at 11:06:30AM -0700, Davidlohr Bueso wrote:
> cxl_mem_init() assigns alternating NUMA nodes to the mock memdevs
> to model multi-node topologies. On a single-node host node 1 has
> no pgdat, and the first node-aware allocation in an odd device's
> probe faults on a NULL zonelist:
> 
>   Oops: general protection fault, probably for non-canonical address 0xdffffc00000006e3
>   KASAN: probably user-memory-access in range [0x0000000000003718-0x000000000000371f]
>   Workqueue: async async_run_entry_fn
>   RIP: __alloc_frozen_pages_noprof+0x288
>    new_slab
>    ___slab_alloc
>    __kmalloc_node_track_caller_noprof
>    devm_kmalloc
>    cxl_mock_mem_probe
> 
> Map the requested node to an online one, as dax_hmem already does
> for its target node.
> 
> Fixes: cf1f6877b088 ("cxl/memdev: Add numa_node attribute")
> Fixes: e41c8452b9b2 ("tools/testing/cxl: Add a single-port host-bridge regression config")
> Fixes: c9435dbee119 ("tools/testing/cxl: Add an RCH topology")
> Signed-off-by: Davidlohr Bueso <[email protected]>
> ---
> Found while regression testing unrelated work.
> 
>  tools/testing/cxl/test/cxl.c | 6 +++---
>  1 file changed, 3 insertions(+), 3 deletions(-)
> 
> diff --git a/tools/testing/cxl/test/cxl.c b/tools/testing/cxl/test/cxl.c
> index ef92dd35e030..5156516a82d2 100644
> --- a/tools/testing/cxl/test/cxl.c
> +++ b/tools/testing/cxl/test/cxl.c
> @@ -1748,7 +1748,7 @@ static int cxl_mem_init(void)
>  		if (!pdev)
>  			goto err_mem;
>  		pdev->dev.parent = &dport->dev;
> -		set_dev_node(&pdev->dev, i % 2);
> +		set_dev_node(&pdev->dev, numa_map_to_online_node(i % 2));
>  
>  		rc = cxl_mock_platform_device_add(pdev, &cxl_mem[i]);
>  		if (rc)
> @@ -1763,7 +1763,7 @@ static int cxl_mem_init(void)
>  		if (!pdev)
>  			goto err_single;
>  		pdev->dev.parent = &dport->dev;
> -		set_dev_node(&pdev->dev, i % 2);
> +		set_dev_node(&pdev->dev, numa_map_to_online_node(i % 2));
>  
>  		rc = cxl_mock_platform_device_add(pdev, &cxl_mem_single[i]);
>  		if (rc)
> @@ -1779,7 +1779,7 @@ static int cxl_mem_init(void)
>  		if (!pdev)
>  			goto err_rcd;
>  		pdev->dev.parent = &rch->dev;
> -		set_dev_node(&pdev->dev, i % 2);
> +		set_dev_node(&pdev->dev, numa_map_to_online_node(i % 2));
>  
>  		rc = cxl_mock_platform_device_add(pdev, &cxl_rcd[i]);
>  		if (rc)
> -- 
> 2.39.5
>

Hi Davidlohr,

I was hitting the same repeated crash while running `modprobe cxl_test` on a single-node virtme-ng guest.

For reference, the guest had only NUMA node 0 available and online:

# cat /sys/devices/system/node/possible 0  # cat /sys/devices/system/node/online 0

The crash followed the same path:

__alloc_frozen_pages_noprof  new_slab  ___slab_alloc  __kmalloc_node_track_caller_noprof  devm_kmalloc  cxl_mock_mem_probe

I found this patch while looking through the linux-cxl archives and applied the same `numa_map_to_online_node()` fix to my current cxl/next tree.

The code has changed since this patch was posted. The original patch updates three sites in `cxl_mem_init()`, while current cxl/next has those corresponding sites under `cxl_type3_mem_init()`, along with a separate `cxl_type2_mem_init()` path.

After applying the equivalent changes to the three `set_dev_node()` calls in `cxl_type3_mem_init()`, the repeated crash is resolved and `modprobe cxl_test` succeeds.

I also noticed that `cxl_type2_mem_init()` now has:


set_dev_node(&pdev->dev, i % 2);


`NR_CXL_TYPE2_ACCEL` is currently 1, so this does not trigger the offline-node case today, but perhaps it would be worth using `numa_map_to_online_node()` there as well for consistency and future expansion.

Tested-by: Shaikh Kamaluddin <[email protected]>

Thanks,
Shaikh
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.