Lines Matching refs:spec
133 static void free_test_spec(struct test_spec *spec) in free_test_spec() argument
136 free_msgs(&spec->priv.expect_msgs); in free_test_spec()
137 free_msgs(&spec->unpriv.expect_msgs); in free_test_spec()
138 free_msgs(&spec->priv.expect_xlated); in free_test_spec()
139 free_msgs(&spec->unpriv.expect_xlated); in free_test_spec()
140 free_msgs(&spec->priv.jited); in free_test_spec()
141 free_msgs(&spec->unpriv.jited); in free_test_spec()
143 free(spec->priv.name); in free_test_spec()
144 free(spec->unpriv.name); in free_test_spec()
145 spec->priv.name = NULL; in free_test_spec()
146 spec->unpriv.name = NULL; in free_test_spec()
404 struct test_spec *spec) in parse_test_spec() argument
420 memset(spec, 0, sizeof(*spec)); in parse_test_spec()
422 spec->prog_name = bpf_program__name(prog); in parse_test_spec()
423 spec->prog_flags = testing_prog_flags(); in parse_test_spec()
431 func_id = btf__find_by_name_kind(btf, spec->prog_name, BTF_KIND_FUNC); in parse_test_spec()
433 ASSERT_FAIL("failed to find FUNC BTF type for '%s'", spec->prog_name); in parse_test_spec()
454 spec->priv.expect_failure = true; in parse_test_spec()
455 spec->mode_mask |= PRIV; in parse_test_spec()
457 spec->priv.expect_failure = false; in parse_test_spec()
458 spec->mode_mask |= PRIV; in parse_test_spec()
460 spec->unpriv.expect_failure = true; in parse_test_spec()
461 spec->mode_mask |= UNPRIV; in parse_test_spec()
464 spec->unpriv.expect_failure = false; in parse_test_spec()
465 spec->mode_mask |= UNPRIV; in parse_test_spec()
468 spec->auxiliary = true; in parse_test_spec()
469 spec->mode_mask |= PRIV; in parse_test_spec()
471 spec->auxiliary = true; in parse_test_spec()
472 spec->mode_mask |= UNPRIV; in parse_test_spec()
474 err = push_msg(msg, &spec->priv.expect_msgs); in parse_test_spec()
477 spec->mode_mask |= PRIV; in parse_test_spec()
479 err = push_msg(msg, &spec->unpriv.expect_msgs); in parse_test_spec()
482 spec->mode_mask |= UNPRIV; in parse_test_spec()
490 &spec->priv.jited); in parse_test_spec()
493 spec->mode_mask |= PRIV; in parse_test_spec()
502 &spec->unpriv.jited); in parse_test_spec()
505 spec->mode_mask |= UNPRIV; in parse_test_spec()
509 &spec->priv.expect_xlated); in parse_test_spec()
512 spec->mode_mask |= PRIV; in parse_test_spec()
515 &spec->unpriv.expect_xlated); in parse_test_spec()
518 spec->mode_mask |= UNPRIV; in parse_test_spec()
521 err = parse_retval(val, &spec->priv.retval, "__retval"); in parse_test_spec()
524 spec->priv.execute = true; in parse_test_spec()
525 spec->mode_mask |= PRIV; in parse_test_spec()
528 err = parse_retval(val, &spec->unpriv.retval, "__retval_unpriv"); in parse_test_spec()
531 spec->mode_mask |= UNPRIV; in parse_test_spec()
532 spec->unpriv.execute = true; in parse_test_spec()
536 err = parse_int(val, &spec->log_level, "test log level"); in parse_test_spec()
547 update_flags(&spec->prog_flags, BPF_F_STRICT_ALIGNMENT, clear); in parse_test_spec()
549 update_flags(&spec->prog_flags, BPF_F_ANY_ALIGNMENT, clear); in parse_test_spec()
551 update_flags(&spec->prog_flags, BPF_F_TEST_RND_HI32, clear); in parse_test_spec()
553 update_flags(&spec->prog_flags, BPF_F_TEST_STATE_FREQ, clear); in parse_test_spec()
555 update_flags(&spec->prog_flags, BPF_F_SLEEPABLE, clear); in parse_test_spec()
557 update_flags(&spec->prog_flags, BPF_F_XDP_HAS_FRAGS, clear); in parse_test_spec()
559 update_flags(&spec->prog_flags, BPF_F_TEST_REG_INVARIANTS, clear); in parse_test_spec()
564 update_flags(&spec->prog_flags, flags, clear); in parse_test_spec()
584 spec->btf_custom_path = s + sizeof(TEST_BTF_PATH) - 1; in parse_test_spec()
587 err = parse_caps(val, &spec->unpriv.caps, "test caps"); in parse_test_spec()
590 spec->mode_mask |= UNPRIV; in parse_test_spec()
605 spec->arch_mask = arch_mask ?: -1; in parse_test_spec()
606 spec->load_mask = load_mask ?: (JITED | NO_JITED); in parse_test_spec()
608 if (spec->mode_mask == 0) in parse_test_spec()
609 spec->mode_mask = PRIV; in parse_test_spec()
612 description = spec->prog_name; in parse_test_spec()
614 if (spec->mode_mask & PRIV) { in parse_test_spec()
615 spec->priv.name = strdup(description); in parse_test_spec()
616 if (!spec->priv.name) { in parse_test_spec()
623 if (spec->mode_mask & UNPRIV) { in parse_test_spec()
637 spec->unpriv.name = name; in parse_test_spec()
640 if (spec->mode_mask & (PRIV | UNPRIV)) { in parse_test_spec()
642 spec->unpriv.expect_failure = spec->priv.expect_failure; in parse_test_spec()
645 spec->unpriv.retval = spec->priv.retval; in parse_test_spec()
646 spec->unpriv.execute = spec->priv.execute; in parse_test_spec()
649 if (spec->unpriv.expect_msgs.cnt == 0) in parse_test_spec()
650 clone_msgs(&spec->priv.expect_msgs, &spec->unpriv.expect_msgs); in parse_test_spec()
651 if (spec->unpriv.expect_xlated.cnt == 0) in parse_test_spec()
652 clone_msgs(&spec->priv.expect_xlated, &spec->unpriv.expect_xlated); in parse_test_spec()
653 if (spec->unpriv.jited.cnt == 0) in parse_test_spec()
654 clone_msgs(&spec->priv.jited, &spec->unpriv.jited); in parse_test_spec()
657 spec->valid = true; in parse_test_spec()
662 free_test_spec(spec); in parse_test_spec()
667 struct test_spec *spec, in prepare_case() argument
684 if ((spec->log_level & 3) < min_log_level) in prepare_case()
685 bpf_program__set_log_level(prog, (spec->log_level & 4) | min_log_level); in prepare_case()
687 bpf_program__set_log_level(prog, spec->log_level); in prepare_case()
690 bpf_program__set_flags(prog, prog_flags | spec->prog_flags); in prepare_case()
818 static bool can_execute_unpriv(struct test_loader *tester, struct test_spec *spec) in can_execute_unpriv() argument
824 if ((spec->prog_flags & BPF_F_ANY_ALIGNMENT) && !EFFICIENT_UNALIGNED_ACCESS) in can_execute_unpriv()
890 static bool should_do_test_run(struct test_spec *spec, struct test_subspec *subspec) in should_do_test_run() argument
898 if ((spec->prog_flags & BPF_F_ANY_ALIGNMENT) && !EFFICIENT_UNALIGNED_ACCESS) { in should_do_test_run()
947 struct test_spec *spec, in run_subtest() argument
950 struct test_subspec *subspec = unpriv ? &spec->unpriv : &spec->priv; in run_subtest()
965 if ((get_current_arch() & spec->arch_mask) == 0) { in run_subtest()
970 if ((current_runtime & spec->load_mask) == 0) { in run_subtest()
976 if (!can_execute_unpriv(tester, spec)) { in run_subtest()
995 open_opts->btf_custom_path = spec->btf_custom_path; in run_subtest()
1007 if (strcmp(bpf_program__name(tprog_iter), spec->prog_name) == 0) { in run_subtest()
1020 prepare_case(tester, spec, tobj, tprog); in run_subtest()
1069 if (should_do_test_run(spec, subspec)) { in run_subtest()
1163 struct test_spec *spec = &specs[i++]; in process_subtest() local
1165 if (!spec->valid || spec->auxiliary) in process_subtest()
1168 if (spec->mode_mask & PRIV) in process_subtest()
1170 specs, spec, false); in process_subtest()
1171 if (spec->mode_mask & UNPRIV) in process_subtest()
1173 specs, spec, true); in process_subtest()