Commit f356a66b authored by Tim Hostetler's avatar Tim Hostetler Committed by Paolo Abeni
Browse files

gve: Wrap struct xdp_buff



RX timestamping will need to keep track of extra temporary information
per-packet. In preparation for this, introduce gve_xdp_buff to wrap the
xdp_buff. This is similar in function to stmmac_xdp_buff and
ice_xdp_buff.

Signed-off-by: default avatarTim Hostetler <thostet@google.com>
Reviewed-by: default avatarWillem de Bruijn <willemb@google.com>
Reviewed-by: default avatarHarshitha Ramamurthy <hramamurthy@google.com>
Signed-off-by: default avatarJoshua Washington <joshwash@google.com>
Link: https://patch.msgid.link/20251114211146.292068-3-joshwash@google.com


Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
parent 46e7860e
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -205,6 +205,11 @@ struct gve_rx_buf_state_dqo {
	s16 next;
};

/* Wrapper for XDP Rx metadata */
struct gve_xdp_buff {
	struct xdp_buff xdp;
};

/* `head` and `tail` are indices into an array, or -1 if empty. */
struct gve_index_list {
	s16 head;
+8 −8
Original line number Diff line number Diff line
@@ -840,23 +840,23 @@ static int gve_rx_dqo(struct napi_struct *napi, struct gve_rx_ring *rx,
	}

	if (xprog) {
		struct xdp_buff xdp;
		struct gve_xdp_buff gve_xdp;
		void *old_data;
		int xdp_act;

		xdp_init_buff(&xdp, buf_state->page_info.buf_size,
		xdp_init_buff(&gve_xdp.xdp, buf_state->page_info.buf_size,
			      &rx->xdp_rxq);
		xdp_prepare_buff(&xdp,
		xdp_prepare_buff(&gve_xdp.xdp,
				 buf_state->page_info.page_address +
				 buf_state->page_info.page_offset,
				 buf_state->page_info.pad,
				 buf_len, false);
		old_data = xdp.data;
		xdp_act = bpf_prog_run_xdp(xprog, &xdp);
		buf_state->page_info.pad += xdp.data - old_data;
		buf_len = xdp.data_end - xdp.data;
		old_data = gve_xdp.xdp.data;
		xdp_act = bpf_prog_run_xdp(xprog, &gve_xdp.xdp);
		buf_state->page_info.pad += gve_xdp.xdp.data - old_data;
		buf_len = gve_xdp.xdp.data_end - gve_xdp.xdp.data;
		if (xdp_act != XDP_PASS) {
			gve_xdp_done_dqo(priv, rx, &xdp, xprog, xdp_act,
			gve_xdp_done_dqo(priv, rx, &gve_xdp.xdp, xprog, xdp_act,
					 buf_state);
			return 0;
		}