Lines Matching +defs:test +defs:suite
3 * KCSAN test with various race scenarious to test runtime behaviour. Since the
5 * the output we should verify. For each test case checks the presence (or
9 * Makes use of KUnit for test organization, and the Torture framework for test
18 #include <kunit/test.h>
35 #define KCSAN_TEST_REQUIRES(test, cond) do { \
37 kunit_skip((test), "Test requires: " #cond); \
46 /* Points to current test-case memory access "kernels". */
50 static unsigned long end_time; /* End time of test. */
61 /* Setup test checking loop. */
78 /* End test checking loop. */
113 * KCSAN report and related to the test.
137 /* Check if a report related to the test exists. */
380 * Avoid race of unknown origin for this test, just pretend they
528 static void test_barrier_nothreads(struct kunit *test)
538 KCSAN_TEST_REQUIRES(test, reorder_access != NULL);
539 KCSAN_TEST_REQUIRES(test, IS_ENABLED(CONFIG_SMP));
546 KUNIT_EXPECT_EQ_MSG(test, reorder_access->size, \
567 KUNIT_ASSERT_EQ(test, reorder_access->size, sizeof(test_var));
711 /* Simple test with normal data race. */
713 static void test_basic(struct kunit *test)
735 KUNIT_EXPECT_TRUE(test, match_expect);
736 KUNIT_EXPECT_FALSE(test, match_never);
744 static void test_concurrent_races(struct kunit *test)
767 KUNIT_EXPECT_TRUE(test, match_expect); /* Sanity check matches exist. */
768 KUNIT_EXPECT_FALSE(test, match_never);
773 static void test_novalue_change(struct kunit *test)
795 KUNIT_EXPECT_FALSE(test, match_expect);
797 KUNIT_EXPECT_TRUE(test, match_expect);
805 static void test_novalue_change_exception(struct kunit *test)
826 KUNIT_EXPECT_TRUE(test, match_expect);
831 static void test_unknown_origin(struct kunit *test)
846 KUNIT_EXPECT_TRUE(test, match_expect);
848 KUNIT_EXPECT_FALSE(test, match_expect);
853 static void test_write_write_assume_atomic(struct kunit *test)
869 KUNIT_EXPECT_FALSE(test, match_expect);
871 KUNIT_EXPECT_TRUE(test, match_expect);
879 static void test_write_write_struct(struct kunit *test)
893 KUNIT_EXPECT_TRUE(test, match_expect);
901 static void test_write_write_struct_part(struct kunit *test)
915 KUNIT_EXPECT_TRUE(test, match_expect);
920 static void test_read_atomic_write_atomic(struct kunit *test)
928 KUNIT_EXPECT_FALSE(test, match_never);
933 static void test_read_plain_atomic_write(struct kunit *test)
943 KCSAN_TEST_REQUIRES(test, !IS_ENABLED(CONFIG_KCSAN_IGNORE_ATOMICS));
949 KUNIT_EXPECT_TRUE(test, match_expect);
954 static void test_read_plain_atomic_rmw(struct kunit *test)
965 KCSAN_TEST_REQUIRES(test, !IS_ENABLED(CONFIG_KCSAN_IGNORE_ATOMICS));
971 KUNIT_EXPECT_TRUE(test, match_expect);
976 static void test_zero_size_access(struct kunit *test)
998 KUNIT_EXPECT_TRUE(test, match_expect); /* Sanity check. */
999 KUNIT_EXPECT_FALSE(test, match_never);
1004 static void test_data_race(struct kunit *test)
1012 KUNIT_EXPECT_FALSE(test, match_never);
1017 static void test_data_racy_qualifier(struct kunit *test)
1025 KUNIT_EXPECT_FALSE(test, match_never);
1029 static void test_assert_exclusive_writer(struct kunit *test)
1043 KUNIT_EXPECT_TRUE(test, match_expect);
1047 static void test_assert_exclusive_access(struct kunit *test)
1061 KUNIT_EXPECT_TRUE(test, match_expect);
1065 static void test_assert_exclusive_access_writer(struct kunit *test)
1095 KUNIT_EXPECT_TRUE(test, match_expect_access_writer);
1096 KUNIT_EXPECT_TRUE(test, match_expect_access_access);
1097 KUNIT_EXPECT_FALSE(test, match_never);
1101 static void test_assert_exclusive_bits_change(struct kunit *test)
1116 KUNIT_EXPECT_TRUE(test, match_expect);
1120 static void test_assert_exclusive_bits_nochange(struct kunit *test)
1128 KUNIT_EXPECT_FALSE(test, match_never);
1132 static void test_assert_exclusive_writer_scoped(struct kunit *test)
1154 KUNIT_EXPECT_TRUE(test, match_expect_start);
1155 KUNIT_EXPECT_FALSE(test, match_expect_inscope);
1159 static void test_assert_exclusive_access_scoped(struct kunit *test)
1180 end_time += msecs_to_jiffies(1000); /* This test requires a bit more time. */
1185 KUNIT_EXPECT_TRUE(test, match_expect_start);
1186 KUNIT_EXPECT_FALSE(test, match_expect_inscope);
1191 * not marked; this test ensures that the compiler nor KCSAN gets confused about
1195 static void test_jiffies_noreport(struct kunit *test)
1203 KUNIT_EXPECT_FALSE(test, match_never);
1208 static void test_seqlock_noreport(struct kunit *test)
1216 KUNIT_EXPECT_FALSE(test, match_never);
1221 * also test that KCSAN understands they're atomic by racing with them via
1226 static void test_atomic_builtins(struct kunit *test)
1237 KUNIT_EXPECT_EQ(test, 42L, __atomic_load_n(&test_var, __ATOMIC_RELAXED));
1239 KUNIT_EXPECT_EQ(test, 42L, __atomic_exchange_n(&test_var, 20, __ATOMIC_RELAXED));
1240 KUNIT_EXPECT_EQ(test, 20L, test_var);
1243 KUNIT_EXPECT_TRUE(test, __atomic_compare_exchange_n(&test_var, &tmp, 30L,
1246 KUNIT_EXPECT_EQ(test, tmp, 20L);
1247 KUNIT_EXPECT_EQ(test, test_var, 30L);
1248 KUNIT_EXPECT_FALSE(test, __atomic_compare_exchange_n(&test_var, &tmp, 40L,
1251 KUNIT_EXPECT_EQ(test, tmp, 30L);
1252 KUNIT_EXPECT_EQ(test, test_var, 30L);
1254 KUNIT_EXPECT_EQ(test, 30L, __atomic_fetch_add(&test_var, 1, __ATOMIC_RELAXED));
1255 KUNIT_EXPECT_EQ(test, 31L, __atomic_fetch_sub(&test_var, 1, __ATOMIC_RELAXED));
1256 KUNIT_EXPECT_EQ(test, 30L, __atomic_fetch_and(&test_var, 0xf, __ATOMIC_RELAXED));
1257 KUNIT_EXPECT_EQ(test, 14L, __atomic_fetch_xor(&test_var, 0xf, __ATOMIC_RELAXED));
1258 KUNIT_EXPECT_EQ(test, 1L, __atomic_fetch_or(&test_var, 0xf0, __ATOMIC_RELAXED));
1259 KUNIT_EXPECT_EQ(test, 241L, __atomic_fetch_nand(&test_var, 0xf, __ATOMIC_RELAXED));
1260 KUNIT_EXPECT_EQ(test, -2L, test_var);
1269 KUNIT_EXPECT_FALSE(test, match_never);
1273 static void test_1bit_value_change(struct kunit *test)
1290 KUNIT_EXPECT_FALSE(test, match);
1292 KUNIT_EXPECT_TRUE(test, match);
1296 static void test_correct_barrier(struct kunit *test)
1311 KUNIT_EXPECT_FALSE(test, match_expect);
1315 static void test_missing_barrier(struct kunit *test)
1331 KUNIT_EXPECT_TRUE(test, match_expect);
1333 KUNIT_EXPECT_FALSE(test, match_expect);
1337 static void test_atomic_builtins_correct_barrier(struct kunit *test)
1353 KUNIT_EXPECT_FALSE(test, match_expect);
1357 static void test_atomic_builtins_missing_barrier(struct kunit *test)
1374 KUNIT_EXPECT_TRUE(test, match_expect);
1376 KUNIT_EXPECT_FALSE(test, match_expect);
1380 * Generate thread counts for all test cases. Values generated are in interval
1386 static const void *nthreads_gen_params(struct kunit *test, const void *prev, char *desc)
1405 * of which is the main test case function checking for
1412 pr_err_once("Too few online CPUs (%u < %ld) for test\n",
1462 /* ===== End test cases ===== */
1511 static int test_init(struct kunit *test)
1523 if (strstr(test->name, "nothreads"))
1526 if (!torture_init_begin((char *)test->name, 1))
1537 nthreads = abs((long)test->param_value);
1563 static void test_exit(struct kunit *test)
1568 if (strstr(test->name, "nothreads"))
1600 static int kcsan_suite_init(struct kunit_suite *suite)
1606 static void kcsan_suite_exit(struct kunit_suite *suite)
1623 MODULE_DESCRIPTION("KCSAN test suite");