mirror of
https://github.com/torvalds/linux.git
synced 2026-05-12 16:18:45 +02:00
— Correct the version guard for the futex_numa_mpol test to require
libnuma 2.0.18 instead of 2.0.16, which is the version that actually introduced numa_set_mempolicy_home_node() used by the test — Allow the futex_numa_mpol selftest to build and run on systems without libnuma installed with affected test gracefully being skipped instead of failing to compile - Use the proper assertion macros so that individual sub-test failures are correctly propagated and the test suite reports failure when something goes wrong -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEEzv7L6UO9uDPlPSfHEsHwGGHeVUoFAmnfpRgACgkQEsHwGGHe VUp4jRAAjcfKMRy2ms6PYQJUwPgFXkmGg1Ij0zQ7D6VxujMUmrmNcCt9pQiR9tmm ZuCWtZRvJ4L+GIl0iNnetl13Um3MtXlQQ+SZgnNhC8InATs0hCJia1sPXztmp1VC 36JDiHbzpNO/InxhBu3WJ+DZodN7RHuNCbnj11Leot2cmAz9njtANcudxDTG3r/o Bqs65KRFbx7WU3zPMujEPOzdyYn8KL3L2bxYKWIAd9n4hfoLcbMB4QaShyh1sGoW ymRMf8yV9vac1tjwOCugkkdDleV5S5LW/eItuNEppV/rBw35GGFTs2yUjaU5U2NN UaQVKDE6UEgJsrX0wBPLPdf10CJia4SA2oYN7PFkNogVGqM/cSzl2B/CqJbcKnur Gj2KUNK2VVrlln1pfhnu8NJYOIgkjGpSarH9XNGM+2CIsXergh23cKhhZVLVE4Wy YirLkW3BNIGmnvF9idvjcktVHibHkvHjRzn2bUhP1K4SMf6kRxsRbTE8Cg12Nlpe cGOt3/6VNyonbXFw3nXdlHNDKjmT/aUrNXRhxEIPTToD+DBfhp7Lce9ylba5/fPv jrqAC0kMkSdBVNmabMQ+n/WzteXLLeFbocPWmba7fDSGvmMSlj5AU9qOURhyquaK nPjxqE5lhbcFY0nZ9zRTP7PG9NwOhVCsCZppTyGirvw+Q/eRxHU= =LIxt -----END PGP SIGNATURE----- Merge tag 'locking_futex_for_v7.1_rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip Pull futex selftest updates from Borislav Petkov: - Correct the version guard for the futex_numa_mpol test to require libnuma 2.0.18 instead of 2.0.16, which is the version that actually introduced numa_set_mempolicy_home_node() used by the test - Allow the futex_numa_mpol selftest to build and run on systems without libnuma installed with affected test gracefully being skipped instead of failing to compile - Use the proper assertion macros so that individual sub-test failures are correctly propagated and the test suite reports failure when something goes wrong * tag 'locking_futex_for_v7.1_rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: selftests/futex: Bump up libnuma version check selftests/futex: Conditionally include libnuma support selftests/futex: Fix incorrect result reporting of futex_requeue test item
This commit is contained in:
commit
f82b61de0f
|
|
@ -1,10 +1,13 @@
|
|||
# SPDX-License-Identifier: GPL-2.0
|
||||
PKG_CONFIG ?= pkg-config
|
||||
LIBNUMA_TEST = $(shell sh -c "$(PKG_CONFIG) numa --atleast-version 2.0.16 > /dev/null 2>&1 && echo SUFFICIENT || echo NO")
|
||||
LIBNUMA_TEST = $(shell sh -c "$(PKG_CONFIG) numa --atleast-version 2.0.18 > /dev/null 2>&1 && echo SUFFICIENT || echo NO")
|
||||
|
||||
INCLUDES := -I../include -I../../ $(KHDR_INCLUDES)
|
||||
CFLAGS := $(CFLAGS) -g -O2 -Wall -pthread -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 $(INCLUDES) $(KHDR_INCLUDES) -DLIBNUMA_VER_$(LIBNUMA_TEST)=1
|
||||
LDLIBS := -lpthread -lrt -lnuma
|
||||
LDLIBS := -lpthread -lrt
|
||||
ifeq ($(LIBNUMA_TEST),SUFFICIENT)
|
||||
LDLIBS += -lnuma
|
||||
endif
|
||||
|
||||
LOCAL_HDRS := \
|
||||
../include/futextest.h \
|
||||
|
|
|
|||
|
|
@ -10,8 +10,10 @@
|
|||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
#ifdef LIBNUMA_VER_SUFFICIENT
|
||||
#include <numa.h>
|
||||
#include <numaif.h>
|
||||
#endif
|
||||
|
||||
#include <linux/futex.h>
|
||||
#include <sys/mman.h>
|
||||
|
|
@ -206,7 +208,7 @@ TEST(futex_numa_mpol)
|
|||
}
|
||||
ksft_test_result_pass("futex2 MPOL hints test passed\n");
|
||||
#else
|
||||
ksft_test_result_skip("futex2 MPOL hints test requires libnuma 2.0.16+\n");
|
||||
ksft_test_result_skip("futex2 MPOL hints test requires libnuma 2.0.18+\n");
|
||||
#endif
|
||||
munmap(futex_ptr, mem_size * 2);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -34,34 +34,18 @@ TEST(requeue_single)
|
|||
volatile futex_t _f1 = 0;
|
||||
volatile futex_t f2 = 0;
|
||||
pthread_t waiter[10];
|
||||
int res;
|
||||
|
||||
f1 = &_f1;
|
||||
|
||||
/*
|
||||
* Requeue a waiter from f1 to f2, and wake f2.
|
||||
*/
|
||||
if (pthread_create(&waiter[0], NULL, waiterfn, NULL))
|
||||
ksft_exit_fail_msg("pthread_create failed\n");
|
||||
ASSERT_EQ(0, pthread_create(&waiter[0], NULL, waiterfn, NULL));
|
||||
|
||||
usleep(WAKE_WAIT_US);
|
||||
|
||||
ksft_print_dbg_msg("Requeuing 1 futex from f1 to f2\n");
|
||||
res = futex_cmp_requeue(f1, 0, &f2, 0, 1, 0);
|
||||
if (res != 1)
|
||||
ksft_test_result_fail("futex_requeue simple returned: %d %s\n",
|
||||
res ? errno : res,
|
||||
res ? strerror(errno) : "");
|
||||
|
||||
ksft_print_dbg_msg("Waking 1 futex at f2\n");
|
||||
res = futex_wake(&f2, 1, 0);
|
||||
if (res != 1) {
|
||||
ksft_test_result_fail("futex_requeue simple returned: %d %s\n",
|
||||
res ? errno : res,
|
||||
res ? strerror(errno) : "");
|
||||
} else {
|
||||
ksft_test_result_pass("futex_requeue simple succeeds\n");
|
||||
}
|
||||
EXPECT_EQ(1, futex_cmp_requeue(f1, 0, &f2, 0, 1, 0));
|
||||
EXPECT_EQ(1, futex_wake(&f2, 1, 0));
|
||||
}
|
||||
|
||||
TEST(requeue_multiple)
|
||||
|
|
@ -69,7 +53,7 @@ TEST(requeue_multiple)
|
|||
volatile futex_t _f1 = 0;
|
||||
volatile futex_t f2 = 0;
|
||||
pthread_t waiter[10];
|
||||
int res, i;
|
||||
int i;
|
||||
|
||||
f1 = &_f1;
|
||||
|
||||
|
|
@ -77,30 +61,13 @@ TEST(requeue_multiple)
|
|||
* Create 10 waiters at f1. At futex_requeue, wake 3 and requeue 7.
|
||||
* At futex_wake, wake INT_MAX (should be exactly 7).
|
||||
*/
|
||||
for (i = 0; i < 10; i++) {
|
||||
if (pthread_create(&waiter[i], NULL, waiterfn, NULL))
|
||||
ksft_exit_fail_msg("pthread_create failed\n");
|
||||
}
|
||||
for (i = 0; i < 10; i++)
|
||||
ASSERT_EQ(0, pthread_create(&waiter[i], NULL, waiterfn, NULL));
|
||||
|
||||
usleep(WAKE_WAIT_US);
|
||||
|
||||
ksft_print_dbg_msg("Waking 3 futexes at f1 and requeuing 7 futexes from f1 to f2\n");
|
||||
res = futex_cmp_requeue(f1, 0, &f2, 3, 7, 0);
|
||||
if (res != 10) {
|
||||
ksft_test_result_fail("futex_requeue many returned: %d %s\n",
|
||||
res ? errno : res,
|
||||
res ? strerror(errno) : "");
|
||||
}
|
||||
|
||||
ksft_print_dbg_msg("Waking INT_MAX futexes at f2\n");
|
||||
res = futex_wake(&f2, INT_MAX, 0);
|
||||
if (res != 7) {
|
||||
ksft_test_result_fail("futex_requeue many returned: %d %s\n",
|
||||
res ? errno : res,
|
||||
res ? strerror(errno) : "");
|
||||
} else {
|
||||
ksft_test_result_pass("futex_requeue many succeeds\n");
|
||||
}
|
||||
EXPECT_EQ(10, futex_cmp_requeue(f1, 0, &f2, 3, 7, 0));
|
||||
EXPECT_EQ(7, futex_wake(&f2, INT_MAX, 0));
|
||||
}
|
||||
|
||||
TEST_HARNESS_MAIN
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user