From 11492872341100afefc2b923b4012743c78f5284 Mon Sep 17 00:00:00 2001 From: Joshua Washington Date: Wed, 22 Jul 2026 15:16:33 -0700 Subject: [PATCH 1/2] gve: use xdp_build_skb methods for XDP_PASS case Newer common methods have been introduced to construct SKBs in the event of XDP_PASS because many drivers replicated very similar functionality. Update GVE to use these common methods for copy mode and zero-copy mode. Reviewed-by: Harshitha Ramamurthy Reviewed-by: Jordan Rhee Signed-off-by: Joshua Washington Reviewed-by: Larysa Zaremba Link: https://patch.msgid.link/20260722221634.186886-2-joshwash@google.com Signed-off-by: Paolo Abeni --- drivers/net/ethernet/google/gve/gve_rx_dqo.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/drivers/net/ethernet/google/gve/gve_rx_dqo.c b/drivers/net/ethernet/google/gve/gve_rx_dqo.c index 8271f731a91f..97db9f701e63 100644 --- a/drivers/net/ethernet/google/gve/gve_rx_dqo.c +++ b/drivers/net/ethernet/google/gve/gve_rx_dqo.c @@ -770,8 +770,7 @@ static int gve_rx_xsk_dqo(struct napi_struct *napi, struct gve_rx_ring *rx, } /* Copy the data to skb */ - rx->ctx.skb_head = gve_rx_copy_data(priv->dev, napi, - xdp->data, buf_len); + rx->ctx.skb_head = xdp_build_skb_from_zc(xdp); if (unlikely(!rx->ctx.skb_head)) { xsk_buff_free(xdp); gve_free_buf_state(rx, buf_state); @@ -779,8 +778,6 @@ static int gve_rx_xsk_dqo(struct napi_struct *napi, struct gve_rx_ring *rx, } rx->ctx.skb_tail = rx->ctx.skb_head; - /* Free XSK buffer and Buffer state */ - xsk_buff_free(xdp); gve_free_buf_state(rx, buf_state); /* Update Stats */ @@ -933,9 +930,17 @@ static int gve_rx_dqo(struct napi_struct *napi, struct gve_rx_ring *rx, return 0; } + rx->ctx.skb_head = xdp_build_skb_from_buff(&gve_xdp.xdp); + if (unlikely(!rx->ctx.skb_head)) + goto error; + rx->ctx.skb_tail = rx->ctx.skb_head; + + gve_reuse_buffer(rx, buf_state); + u64_stats_update_begin(&rx->statss); rx->xdp_actions[XDP_PASS]++; u64_stats_update_end(&rx->statss); + return 0; } if (eop && buf_len <= priv->rx_copybreak && From 871657dc6996ec7e6b90a87369d52a4a59f22753 Mon Sep 17 00:00:00 2001 From: Joshua Washington Date: Wed, 22 Jul 2026 15:16:34 -0700 Subject: [PATCH 2/2] gve: add XDP metadata support for DQ RDA Commit 1b42e07af1ee ("gve: Add Rx HWTS metadata to AF_XDP ZC mode") exposes support for the XDP RX timestamping metadata operation in the DQ RDA mode. While the operation works on its own, the intent was to enable XDP metadata support for the queue format as a whole along with it. Currently bpf_xdp_adjust_meta fails because meta_valid is set to false. This change updates xdp_buff preparation to set meta_valid to true, so metadata can be fully used by XDP programs. Reviewed-by: Harshitha Ramamurthy Reviewed-by: Jordan Rhee Signed-off-by: Joshua Washington Link: https://patch.msgid.link/20260722221634.186886-3-joshwash@google.com Signed-off-by: Paolo Abeni --- drivers/net/ethernet/google/gve/gve_rx_dqo.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/net/ethernet/google/gve/gve_rx_dqo.c b/drivers/net/ethernet/google/gve/gve_rx_dqo.c index 97db9f701e63..36ad2b02d7d9 100644 --- a/drivers/net/ethernet/google/gve/gve_rx_dqo.c +++ b/drivers/net/ethernet/google/gve/gve_rx_dqo.c @@ -916,7 +916,7 @@ static int gve_rx_dqo(struct napi_struct *napi, struct gve_rx_ring *rx, buf_state->page_info.page_address + buf_state->page_info.page_offset, buf_state->page_info.pad, - buf_len, false); + buf_len, true); gve_xdp.gve = priv; gve_xdp.compl_desc = compl_desc;