Skip to content

Commit 0ffa016

Browse files
author
Alexei Starovoitov
committed
Merge branch 'optimize-bpf-selftest-to-increase-ci-success-rate'
Jiayuan Chen says: ==================== Optimize bpf selftest to increase CI success rate 1. Optimized some static bound port selftests to avoid port occupation when running test_progs -j. 2. Optimized the retry logic for test_maps. Some Failed CI: https://github.com/kernel-patches/bpf/actions/runs/13275542359/job/37064974076 https://github.com/kernel-patches/bpf/actions/runs/13549227497/job/37868926343 https://github.com/kernel-patches/bpf/actions/runs/13548089029/job/37865812030 https://github.com/kernel-patches/bpf/actions/runs/13553536268/job/37883329296 (Perhaps it's due to the large number of pull requests requiring CI runs?) ==================== Link: https://patch.msgid.link/[email protected] Signed-off-by: Alexei Starovoitov <[email protected]>
2 parents 43d9d43 + 09de329 commit 0ffa016

File tree

4 files changed

+23
-12
lines changed

4 files changed

+23
-12
lines changed

tools/testing/selftests/bpf/prog_tests/bpf_nf.c

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -72,11 +72,14 @@ static void test_bpf_nf_ct(int mode)
7272
if (!ASSERT_OK(system(cmd), cmd))
7373
goto end;
7474

75-
srv_port = (mode == TEST_XDP) ? 5005 : 5006;
76-
srv_fd = start_server(AF_INET, SOCK_STREAM, "127.0.0.1", srv_port, TIMEOUT_MS);
75+
srv_fd = start_server(AF_INET, SOCK_STREAM, "127.0.0.1", 0, TIMEOUT_MS);
7776
if (!ASSERT_GE(srv_fd, 0, "start_server"))
7877
goto end;
7978

79+
srv_port = get_socket_local_port(srv_fd);
80+
if (!ASSERT_GE(srv_port, 0, "get_sock_local_port"))
81+
goto end;
82+
8083
client_fd = connect_to_server(srv_fd);
8184
if (!ASSERT_GE(client_fd, 0, "connect_to_server"))
8285
goto end;
@@ -91,7 +94,7 @@ static void test_bpf_nf_ct(int mode)
9194
skel->bss->saddr = peer_addr.sin_addr.s_addr;
9295
skel->bss->sport = peer_addr.sin_port;
9396
skel->bss->daddr = peer_addr.sin_addr.s_addr;
94-
skel->bss->dport = htons(srv_port);
97+
skel->bss->dport = srv_port;
9598

9699
if (mode == TEST_XDP)
97100
prog_fd = bpf_program__fd(skel->progs.nf_xdp_ct_test);

tools/testing/selftests/bpf/prog_tests/cgroup_v1v2.c

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,18 @@
1010
static int run_test(int cgroup_fd, int server_fd, bool classid)
1111
{
1212
struct connect4_dropper *skel;
13-
int fd, err = 0;
13+
int fd, err = 0, port;
1414

1515
skel = connect4_dropper__open_and_load();
1616
if (!ASSERT_OK_PTR(skel, "skel_open"))
1717
return -1;
1818

19+
port = get_socket_local_port(server_fd);
20+
if (!ASSERT_GE(port, 0, "get_socket_local_port"))
21+
return -1;
22+
23+
skel->bss->port = ntohs(port);
24+
1925
skel->links.connect_v4_dropper =
2026
bpf_program__attach_cgroup(skel->progs.connect_v4_dropper,
2127
cgroup_fd);
@@ -48,10 +54,9 @@ void test_cgroup_v1v2(void)
4854
{
4955
struct network_helper_opts opts = {};
5056
int server_fd, client_fd, cgroup_fd;
51-
static const int port = 60120;
5257

5358
/* Step 1: Check base connectivity works without any BPF. */
54-
server_fd = start_server(AF_INET, SOCK_STREAM, NULL, port, 0);
59+
server_fd = start_server(AF_INET, SOCK_STREAM, NULL, 0, 0);
5560
if (!ASSERT_GE(server_fd, 0, "server_fd"))
5661
return;
5762
client_fd = connect_to_fd_opts(server_fd, &opts);
@@ -66,7 +71,7 @@ void test_cgroup_v1v2(void)
6671
cgroup_fd = test__join_cgroup("/connect_dropper");
6772
if (!ASSERT_GE(cgroup_fd, 0, "cgroup_fd"))
6873
return;
69-
server_fd = start_server(AF_INET, SOCK_STREAM, NULL, port, 0);
74+
server_fd = start_server(AF_INET, SOCK_STREAM, NULL, 0, 0);
7075
if (!ASSERT_GE(server_fd, 0, "server_fd")) {
7176
close(cgroup_fd);
7277
return;

tools/testing/selftests/bpf/progs/connect4_dropper.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,14 @@
1313
#define VERDICT_REJECT 0
1414
#define VERDICT_PROCEED 1
1515

16+
int port;
17+
1618
SEC("cgroup/connect4")
1719
int connect_v4_dropper(struct bpf_sock_addr *ctx)
1820
{
1921
if (ctx->type != SOCK_STREAM)
2022
return VERDICT_PROCEED;
21-
if (ctx->user_port == bpf_htons(60120))
23+
if (ctx->user_port == bpf_htons(port))
2224
return VERDICT_REJECT;
2325
return VERDICT_PROCEED;
2426
}

tools/testing/selftests/bpf/test_maps.c

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1396,9 +1396,10 @@ static void test_map_stress(void)
13961396
#define MAX_DELAY_US 50000
13971397
#define MIN_DELAY_RANGE_US 5000
13981398

1399-
static bool retry_for_again_or_busy(int err)
1399+
static bool can_retry(int err)
14001400
{
1401-
return (err == EAGAIN || err == EBUSY);
1401+
return (err == EAGAIN || err == EBUSY ||
1402+
(err == ENOMEM && map_opts.map_flags == BPF_F_NO_PREALLOC));
14021403
}
14031404

14041405
int map_update_retriable(int map_fd, const void *key, const void *value, int flags, int attempts,
@@ -1451,12 +1452,12 @@ static void test_update_delete(unsigned int fn, void *data)
14511452

14521453
if (do_update) {
14531454
err = map_update_retriable(fd, &key, &value, BPF_NOEXIST, MAP_RETRIES,
1454-
retry_for_again_or_busy);
1455+
can_retry);
14551456
if (err)
14561457
printf("error %d %d\n", err, errno);
14571458
assert(err == 0);
14581459
err = map_update_retriable(fd, &key, &value, BPF_EXIST, MAP_RETRIES,
1459-
retry_for_again_or_busy);
1460+
can_retry);
14601461
if (err)
14611462
printf("error %d %d\n", err, errno);
14621463
assert(err == 0);

0 commit comments

Comments
 (0)