Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

selftests/xsk: Fix for SEND_RECEIVE_UNALIGNED test

Fix test broken by shared umem test and framework enhancement commit.

Correct the current implementation of pkt_stream_replace_half() by
ensuring that nb_valid_entries are not set to half, as this is not true
for all the tests. Ensure that the expected value for valid_entries for
the SEND_RECEIVE_UNALIGNED test equals the total number of packets sent,
which is 4096.

Create a new function called pkt_stream_pkt_set() that allows for packet
modification to meet specific requirements while ensuring the accurate
maintenance of the valid packet count to prevent inconsistencies in packet
tracking.

Fixes: 6d198a89c004 ("selftests/xsk: Add a test for shared umem feature")
Reported-by: Maciej Fijalkowski <maciej.fijalkowski@intel.com>
Signed-off-by: Tushar Vyavahare <tushar.vyavahare@intel.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Reviewed-by: Maciej Fijalkowski <maciej.fijalkowski@intel.com>
Acked-by: Magnus Karlsson <magnus.karlsson@intel.com>
Link: https://lore.kernel.org/bpf/20231214130007.33281-1-tushar.vyavahare@intel.com

authored by

Tushar Vyavahare and committed by
Daniel Borkmann
2e1d6a04 c838fe12

+16 -9
+16 -9
tools/testing/selftests/bpf/xskxceiver.c
··· 634 634 return nb_frags; 635 635 } 636 636 637 + static bool set_pkt_valid(int offset, u32 len) 638 + { 639 + return len <= MAX_ETH_JUMBO_SIZE; 640 + } 641 + 637 642 static void pkt_set(struct pkt_stream *pkt_stream, struct pkt *pkt, int offset, u32 len) 638 643 { 639 644 pkt->offset = offset; 640 645 pkt->len = len; 641 - if (len > MAX_ETH_JUMBO_SIZE) { 642 - pkt->valid = false; 643 - } else { 644 - pkt->valid = true; 645 - pkt_stream->nb_valid_entries++; 646 - } 646 + pkt->valid = set_pkt_valid(offset, len); 647 + } 648 + 649 + static void pkt_stream_pkt_set(struct pkt_stream *pkt_stream, struct pkt *pkt, int offset, u32 len) 650 + { 651 + bool prev_pkt_valid = pkt->valid; 652 + 653 + pkt_set(pkt_stream, pkt, offset, len); 654 + pkt_stream->nb_valid_entries += pkt->valid - prev_pkt_valid; 647 655 } 648 656 649 657 static u32 pkt_get_buffer_len(struct xsk_umem_info *umem, u32 len) ··· 673 665 for (i = 0; i < nb_pkts; i++) { 674 666 struct pkt *pkt = &pkt_stream->pkts[i]; 675 667 676 - pkt_set(pkt_stream, pkt, 0, pkt_len); 668 + pkt_stream_pkt_set(pkt_stream, pkt, 0, pkt_len); 677 669 pkt->pkt_nb = nb_start + i * nb_off; 678 670 } 679 671 ··· 708 700 709 701 pkt_stream = pkt_stream_clone(ifobj->xsk->pkt_stream); 710 702 for (i = 1; i < ifobj->xsk->pkt_stream->nb_pkts; i += 2) 711 - pkt_set(pkt_stream, &pkt_stream->pkts[i], offset, pkt_len); 703 + pkt_stream_pkt_set(pkt_stream, &pkt_stream->pkts[i], offset, pkt_len); 712 704 713 705 ifobj->xsk->pkt_stream = pkt_stream; 714 - pkt_stream->nb_valid_entries /= 2; 715 706 } 716 707 717 708 static void pkt_stream_replace_half(struct test_spec *test, u32 pkt_len, int offset)