selftests/futex: Set the home_node in futex_numa_mpol

The test fails at the MPOL step if multiple nodes are available. The
reason is that mbind() sets the policy but the home_node, which is
retrieved by the futex code, is not set. This causes to retrieve the
current node and with multiple nodes it fails on one of the iterations.

Use numa_set_mempolicy_home_node() to set the expected node.
Use ksft_exit_fail_msg() to fail and exit in order not to confuse ktap.

Fixes: 3163369407baf ("selftests/futex: Add futex_numa_mpol")
Suggested-by: Vlastimil Babka <vbabka@suse.cz>
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Link: https://lkml.kernel.org/r/20250528085521.1938355-3-bigeasy@linutronix.de

authored by Sebastian Andrzej Siewior and committed by Peter Zijlstra 0ecb4232 1a9dcf69

+6 -2
+6 -2
tools/testing/selftests/futex/functional/futex_numa_mpol.c
··· 210 ret = mbind(futex_ptr, mem_size, MPOL_BIND, &nodemask, 211 sizeof(nodemask) * 8, 0); 212 if (ret == 0) { 213 ksft_print_msg("Node %d test\n", i); 214 futex_numa->futex = 0; 215 futex_numa->numa = FUTEX_NO_NODE; ··· 224 if (0) 225 test_futex_mpol(futex_numa, 0); 226 if (futex_numa->numa != i) { 227 - ksft_test_result_fail("Returned NUMA node is %d expected %d\n", 228 - futex_numa->numa, i); 229 } 230 } 231 }
··· 210 ret = mbind(futex_ptr, mem_size, MPOL_BIND, &nodemask, 211 sizeof(nodemask) * 8, 0); 212 if (ret == 0) { 213 + ret = numa_set_mempolicy_home_node(futex_ptr, mem_size, i, 0); 214 + if (ret != 0) 215 + ksft_exit_fail_msg("Failed to set home node: %m, %d\n", errno); 216 + 217 ksft_print_msg("Node %d test\n", i); 218 futex_numa->futex = 0; 219 futex_numa->numa = FUTEX_NO_NODE; ··· 220 if (0) 221 test_futex_mpol(futex_numa, 0); 222 if (futex_numa->numa != i) { 223 + ksft_exit_fail_msg("Returned NUMA node is %d expected %d\n", 224 + futex_numa->numa, i); 225 } 226 } 227 }