diff mbox series

[net-next] net: mvneta: avoid copying shared_info frags in mvneta_swbm_build_skb

Message ID 82d03019421ee256db1fc5d8df34da5cc2dd6abb.1600472391.git.lorenzo@kernel.org
State Accepted
Delegated to: David Miller
Headers show
Series [net-next] net: mvneta: avoid copying shared_info frags in mvneta_swbm_build_skb | expand

Commit Message

Lorenzo Bianconi Sept. 19, 2020, 12:03 a.m. UTC
Avoid copying skb_shared_info frags array in mvneta_swbm_build_skb() since
__build_skb_around() does not overwrite it

Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
---
 drivers/net/ethernet/marvell/mvneta.c | 11 ++++-------
 1 file changed, 4 insertions(+), 7 deletions(-)

Comments

David Miller Sept. 20, 2020, 9:13 p.m. UTC | #1
From: Lorenzo Bianconi <lorenzo@kernel.org>
Date: Sat, 19 Sep 2020 02:03:26 +0200

> Avoid copying skb_shared_info frags array in mvneta_swbm_build_skb() since
> __build_skb_around() does not overwrite it
> 
> Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>

Applied, thank you.
diff mbox series

Patch

diff --git a/drivers/net/ethernet/marvell/mvneta.c b/drivers/net/ethernet/marvell/mvneta.c
index 0cd315f1380e..d315ba1cd332 100644
--- a/drivers/net/ethernet/marvell/mvneta.c
+++ b/drivers/net/ethernet/marvell/mvneta.c
@@ -2305,11 +2305,8 @@  mvneta_swbm_build_skb(struct mvneta_port *pp, struct mvneta_rx_queue *rxq,
 {
 	struct skb_shared_info *sinfo = xdp_get_shared_info_from_buff(xdp);
 	int i, num_frags = sinfo->nr_frags;
-	skb_frag_t frags[MAX_SKB_FRAGS];
 	struct sk_buff *skb;
 
-	memcpy(frags, sinfo->frags, sizeof(skb_frag_t) * num_frags);
-
 	skb = build_skb(xdp->data_hard_start, PAGE_SIZE);
 	if (!skb)
 		return ERR_PTR(-ENOMEM);
@@ -2321,12 +2318,12 @@  mvneta_swbm_build_skb(struct mvneta_port *pp, struct mvneta_rx_queue *rxq,
 	mvneta_rx_csum(pp, desc_status, skb);
 
 	for (i = 0; i < num_frags; i++) {
-		struct page *page = skb_frag_page(&frags[i]);
+		skb_frag_t *frag = &sinfo->frags[i];
 
 		skb_add_rx_frag(skb, skb_shinfo(skb)->nr_frags,
-				page, skb_frag_off(&frags[i]),
-				skb_frag_size(&frags[i]), PAGE_SIZE);
-		page_pool_release_page(rxq->page_pool, page);
+				skb_frag_page(frag), skb_frag_off(frag),
+				skb_frag_size(frag), PAGE_SIZE);
+		page_pool_release_page(rxq->page_pool, skb_frag_page(frag));
 	}
 
 	return skb;