Message ID | 20230403120400.31018-1-kal.conley@dectris.com (mailing list archive) |
---|---|
State | Accepted |
Commit | 68e7322142f5e731af222892d384d311835db0f1 |
Headers | show |
Series | [bpf] selftests: xsk: Deflakify STATS_RX_DROPPED test | expand |
Hello: This patch was applied to bpf/bpf-next.git (master) by Martin KaFai Lau <martin.lau@kernel.org>: On Mon, 3 Apr 2023 14:03:59 +0200 you wrote: > Fix flaky STATS_RX_DROPPED test. The receiver calls getsockopt after > receiving the last (valid) packet which is not the final packet sent in > the test (valid and invalid packets are sent in alternating fashion with > the final packet being invalid). Since the last packet may or may not > have been dropped already, both outcomes must be allowed. > > This issue could also be fixed by making sure the last packet sent is > valid. This alternative is left as an exercise to the reader (or the > benevolent maintainers of this file). > > [...] Here is the summary with links: - [bpf] selftests: xsk: Deflakify STATS_RX_DROPPED test https://git.kernel.org/bpf/bpf-next/c/68e7322142f5 You are awesome, thank you!
diff --git a/tools/testing/selftests/bpf/xskxceiver.c b/tools/testing/selftests/bpf/xskxceiver.c index a17655107a94..30a364283542 100644 --- a/tools/testing/selftests/bpf/xskxceiver.c +++ b/tools/testing/selftests/bpf/xskxceiver.c @@ -631,7 +631,6 @@ static struct pkt_stream *pkt_stream_generate(struct xsk_umem_info *umem, u32 nb if (!pkt_stream) exit_with_error(ENOMEM); - pkt_stream->nb_pkts = nb_pkts; for (i = 0; i < nb_pkts; i++) { pkt_set(umem, &pkt_stream->pkts[i], (i % umem->num_frames) * umem->frame_size, pkt_len); @@ -1124,7 +1123,14 @@ static int validate_rx_dropped(struct ifobject *ifobject) if (err) return TEST_FAILURE; - if (stats.rx_dropped == ifobject->pkt_stream->nb_pkts / 2) + /* The receiver calls getsockopt after receiving the last (valid) + * packet which is not the final packet sent in this test (valid and + * invalid packets are sent in alternating fashion with the final + * packet being invalid). Since the last packet may or may not have + * been dropped already, both outcomes must be allowed. + */ + if (stats.rx_dropped == ifobject->pkt_stream->nb_pkts / 2 || + stats.rx_dropped == ifobject->pkt_stream->nb_pkts / 2 - 1) return TEST_PASS; return TEST_FAILURE;