Commit d9f6d970 authored by Magnus Karlsson's avatar Magnus Karlsson Committed by Alexei Starovoitov

selftests/xsk: store offset in pkt instead of addr

Store the offset in struct pkt instead of the address. This is
important since address is only meaningful in the context of a packet
that is stored in a single umem buffer and thus a single Tx
descriptor. If the packet, in contrast need to be represented by
multiple buffers in the umem, storing the address makes no sense since
the packet will consist of multiple buffers in the umem at various
addresses. This change is in preparation for the upcoming
multi-buffer support in AF_XDP and the corresponding tests.

So instead of indicating the address, we instead indicate the offset
of the packet in the first buffer. The actual address of the buffer is
allocated from the umem with a new function called
umem_alloc_buffer(). This also means we can get rid of the
use_fill_for_addr flag as the addresses fed into the fill ring will
always be the offset from the pkt specification in the packet stream
plus the address of the allocated buffer from the umem. No special
casing needed.
Signed-off-by: default avatarMagnus Karlsson <magnus.karlsson@intel.com>
Link: https://lore.kernel.org/r/20230516103109.3066-7-magnus.karlsson@gmail.comSigned-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
parent 69fc03d2
This diff is collapsed.
...@@ -91,6 +91,7 @@ struct xsk_umem_info { ...@@ -91,6 +91,7 @@ struct xsk_umem_info {
struct xsk_ring_prod fq; struct xsk_ring_prod fq;
struct xsk_ring_cons cq; struct xsk_ring_cons cq;
struct xsk_umem *umem; struct xsk_umem *umem;
u64 next_buffer;
u32 num_frames; u32 num_frames;
u32 frame_headroom; u32 frame_headroom;
void *buffer; void *buffer;
...@@ -109,7 +110,7 @@ struct xsk_socket_info { ...@@ -109,7 +110,7 @@ struct xsk_socket_info {
}; };
struct pkt { struct pkt {
u64 addr; int offset;
u32 len; u32 len;
u32 pkt_nb; u32 pkt_nb;
bool valid; bool valid;
...@@ -119,7 +120,6 @@ struct pkt_stream { ...@@ -119,7 +120,6 @@ struct pkt_stream {
u32 nb_pkts; u32 nb_pkts;
u32 current_pkt_nb; u32 current_pkt_nb;
struct pkt *pkts; struct pkt *pkts;
bool use_addr_for_fill;
}; };
struct ifobject; struct ifobject;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment