> This is a preliminary patch to add hw csum hint support to > mvneta/mvpp2 xdp implementation > > Tested-by: Matteo Croce > Signed-off-by: Lorenzo Bianconi Hi Dave and Jakub, I have just noticed this patch is marked as "Not Applicable" in patchwork. I tried to rebase it on top of net-next and it applies and compiles so I am wondering why it is "not applicable". Am I missing something? Regards, Lorenzo > --- > drivers/net/ethernet/marvell/mvneta.c | 19 +++++++------------ > .../net/ethernet/marvell/mvpp2/mvpp2_main.c | 14 +++++--------- > 2 files changed, 12 insertions(+), 21 deletions(-) > > diff --git a/drivers/net/ethernet/marvell/mvneta.c b/drivers/net/ethernet/marvell/mvneta.c > index c15ce06427d0..88a755034c39 100644 > --- a/drivers/net/ethernet/marvell/mvneta.c > +++ b/drivers/net/ethernet/marvell/mvneta.c > @@ -1805,18 +1805,14 @@ static void mvneta_rx_error(struct mvneta_port *pp, > } > > /* Handle RX checksum offload based on the descriptor's status */ > -static void mvneta_rx_csum(struct mvneta_port *pp, u32 status, > - struct sk_buff *skb) > +static int mvneta_rx_csum(struct mvneta_port *pp, u32 status) > { > if ((pp->dev->features & NETIF_F_RXCSUM) && > (status & MVNETA_RXD_L3_IP4) && > - (status & MVNETA_RXD_L4_CSUM_OK)) { > - skb->csum = 0; > - skb->ip_summed = CHECKSUM_UNNECESSARY; > - return; > - } > + (status & MVNETA_RXD_L4_CSUM_OK)) > + return CHECKSUM_UNNECESSARY; > > - skb->ip_summed = CHECKSUM_NONE; > + return CHECKSUM_NONE; > } > > /* Return tx queue pointer (find last set bit) according to returned > @@ -2335,7 +2331,7 @@ mvneta_swbm_build_skb(struct mvneta_port *pp, struct page_pool *pool, > > skb_reserve(skb, xdp->data - xdp->data_hard_start); > skb_put(skb, xdp->data_end - xdp->data); > - mvneta_rx_csum(pp, desc_status, skb); > + skb->ip_summed = mvneta_rx_csum(pp, desc_status); > > for (i = 0; i < num_frags; i++) { > skb_frag_t *frag = &sinfo->frags[i]; > @@ -2535,7 +2531,7 @@ static int mvneta_rx_hwbm(struct napi_struct *napi, > rx_bytes); > > skb->protocol = eth_type_trans(skb, dev); > - mvneta_rx_csum(pp, rx_status, skb); > + skb->ip_summed = mvneta_rx_csum(pp, rx_status); > napi_gro_receive(napi, skb); > > rcvd_pkts++; > @@ -2584,8 +2580,7 @@ static int mvneta_rx_hwbm(struct napi_struct *napi, > skb_put(skb, rx_bytes); > > skb->protocol = eth_type_trans(skb, dev); > - > - mvneta_rx_csum(pp, rx_status, skb); > + skb->ip_summed = mvneta_rx_csum(pp, rx_status); > > napi_gro_receive(napi, skb); > } > diff --git a/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c b/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c > index 9bca8c8f9f8d..01f6078bc859 100644 > --- a/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c > +++ b/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c > @@ -3543,21 +3543,17 @@ static void mvpp2_rx_error(struct mvpp2_port *port, > } > > /* Handle RX checksum offload */ > -static void mvpp2_rx_csum(struct mvpp2_port *port, u32 status, > - struct sk_buff *skb) > +static int mvpp2_rx_csum(struct mvpp2_port *port, u32 status) > { > if (((status & MVPP2_RXD_L3_IP4) && > !(status & MVPP2_RXD_IP4_HEADER_ERR)) || > (status & MVPP2_RXD_L3_IP6)) > if (((status & MVPP2_RXD_L4_UDP) || > (status & MVPP2_RXD_L4_TCP)) && > - (status & MVPP2_RXD_L4_CSUM_OK)) { > - skb->csum = 0; > - skb->ip_summed = CHECKSUM_UNNECESSARY; > - return; > - } > + (status & MVPP2_RXD_L4_CSUM_OK)) > + return CHECKSUM_UNNECESSARY; > > - skb->ip_summed = CHECKSUM_NONE; > + return CHECKSUM_NONE; > } > > /* Allocate a new skb and add it to BM pool */ > @@ -4012,7 +4008,7 @@ static int mvpp2_rx(struct mvpp2_port *port, struct napi_struct *napi, > > skb_reserve(skb, MVPP2_MH_SIZE + MVPP2_SKB_HEADROOM); > skb_put(skb, rx_bytes); > - mvpp2_rx_csum(port, rx_status, skb); > + skb->ip_summed = mvpp2_rx_csum(port, rx_status); > skb->protocol = eth_type_trans(skb, dev); > > napi_gro_receive(napi, skb); > -- > 2.31.1 >