History

Improve stability of find_vma BPF test

Remove unneeded spleep and increase length of dummy CPU intensive computation to guarantee test process execution. Also, complete aforemention computation as soon as test success criteria is met

Mykola Lysenko committed 4 years ago

Commit ba83af01 parent 1fd49861 file · +19 −9Browse files

Unified · Split

tools/testing/selftests/bpf/prog_tests/find_vma.c+19−9
@@ -7,12 +7,14 @@ · 6 unmodified lines
77 #include "find_vma_fail1.skel.h"
88 #include "find_vma_fail2.skel.h"
99
10−static void test_and_reset_skel(struct find_vma *skel, int expected_find_zero_ret)
10+static void test_and_reset_skel(struct find_vma *skel, int expected_find_zero_ret, bool need_test)
1111 {
12− ASSERT_EQ(skel->bss->found_vm_exec, 1, "found_vm_exec");
13− ASSERT_EQ(skel->data->find_addr_ret, 0, "find_addr_ret");
14− ASSERT_EQ(skel->data->find_zero_ret, expected_find_zero_ret, "find_zero_ret");
15− ASSERT_OK_PTR(strstr(skel->bss->d_iname, "test_progs"), "find_test_progs");
12+ if (need_test) {
13+ ASSERT_EQ(skel->bss->found_vm_exec, 1, "found_vm_exec");
14+ ASSERT_EQ(skel->data->find_addr_ret, 0, "find_addr_ret");
15+ ASSERT_EQ(skel->data->find_zero_ret, expected_find_zero_ret, "find_zero_ret");
16+ ASSERT_OK_PTR(strstr(skel->bss->d_iname, "test_progs"), "find_test_progs");
17+ }
1618
1719 skel->bss->found_vm_exec = 0;
1820 skel->data->find_addr_ret = -1;
@@ -36,11 +38,20 @@ static int open_pe(void) · 17 unmodified lines
3638 return pfd >= 0 ? pfd : -errno;
3739 }
3840
41+static bool find_vma_pe_condition(struct find_vma *skel)
42+{
43+ return skel->bss->found_vm_exec == 0 ||
44+ skel->data->find_addr_ret != 0 ||
45+ skel->data->find_zero_ret == -1 ||
46+ strcmp(skel->bss->d_iname, "test_progs") != 0;
47+}
48+
3949 static void test_find_vma_pe(struct find_vma *skel)
4050 {
4151 struct bpf_link *link = NULL;
4252 volatile int j = 0;
4353 int pfd, i;
54+ const int one_bn = 1000000000;
4455
4556 pfd = open_pe();
4657 if (pfd < 0) {
@@ -57,10 +68,10 @@ static void test_find_vma_pe(struct find_vma *skel) · 10 unmodified lines
5768 if (!ASSERT_OK_PTR(link, "attach_perf_event"))
5869 goto cleanup;
5970
60− for (i = 0; i < 1000000; ++i)
71+ for (i = 0; i < one_bn && find_vma_pe_condition(skel); ++i)
6172 ++j;
6273
63− test_and_reset_skel(skel, -EBUSY /* in nmi, irq_work is busy */);
74+ test_and_reset_skel(skel, -EBUSY /* in nmi, irq_work is busy */, i == one_bn);
6475 cleanup:
6576 bpf_link__destroy(link);
6677 close(pfd);
@@ -75,7 +86,7 @@ static void test_find_vma_kprobe(struct find_vma *skel) · 8 unmodified lines
7586 return;
7687
7788 getpgid(skel->bss->target_pid);
78− test_and_reset_skel(skel, -ENOENT /* could not find vma for ptr 0 */);
89+ test_and_reset_skel(skel, -ENOENT /* could not find vma for ptr 0 */, true);
7990 }
8091
8192 static void test_illegal_write_vma(void)
@@ -108,7 +119,6 @@ void serial_test_find_vma(void) · 26 unmodified lines
108119 skel->bss->addr = (__u64)(uintptr_t)test_find_vma_pe;
109120
110121 test_find_vma_pe(skel);
111− usleep(100000); /* allow the irq_work to finish */
112122 test_find_vma_kprobe(skel);
113123
114124 find_vma__destroy(skel);