Skip to content

Commit

Permalink
net: hns3: fix miss L3E checking for rx packet
Browse files Browse the repository at this point in the history
For device supports RXD advanced layout, the driver will
return directly if the hardware finish the checksum
calculate. It cause missing L3E checking for ip packets.
Fixes it.

Fixes: 1ddc028 ("net: hns3: refactor out RX completion checksum")
Signed-off-by: Jian Shen <[email protected]>
Signed-off-by: Hao Lan <[email protected]>
Signed-off-by: Jakub Kicinski <[email protected]>
  • Loading branch information
IronShen authored and kuba-moo committed Dec 23, 2022
1 parent 09e6b30 commit 7d89b53
Showing 1 changed file with 4 additions and 6 deletions.
10 changes: 4 additions & 6 deletions drivers/net/ethernet/hisilicon/hns3/hns3_enet.c
Original file line number Diff line number Diff line change
Expand Up @@ -3855,18 +3855,16 @@ static int hns3_gro_complete(struct sk_buff *skb, u32 l234info)
return 0;
}

static bool hns3_checksum_complete(struct hns3_enet_ring *ring,
static void hns3_checksum_complete(struct hns3_enet_ring *ring,
struct sk_buff *skb, u32 ptype, u16 csum)
{
if (ptype == HNS3_INVALID_PTYPE ||
hns3_rx_ptype_tbl[ptype].ip_summed != CHECKSUM_COMPLETE)
return false;
return;

hns3_ring_stats_update(ring, csum_complete);
skb->ip_summed = CHECKSUM_COMPLETE;
skb->csum = csum_unfold((__force __sum16)csum);

return true;
}

static void hns3_rx_handle_csum(struct sk_buff *skb, u32 l234info,
Expand Down Expand Up @@ -3926,8 +3924,7 @@ static void hns3_rx_checksum(struct hns3_enet_ring *ring, struct sk_buff *skb,
ptype = hnae3_get_field(ol_info, HNS3_RXD_PTYPE_M,
HNS3_RXD_PTYPE_S);

if (hns3_checksum_complete(ring, skb, ptype, csum))
return;
hns3_checksum_complete(ring, skb, ptype, csum);

/* check if hardware has done checksum */
if (!(bd_base_info & BIT(HNS3_RXD_L3L4P_B)))
Expand All @@ -3936,6 +3933,7 @@ static void hns3_rx_checksum(struct hns3_enet_ring *ring, struct sk_buff *skb,
if (unlikely(l234info & (BIT(HNS3_RXD_L3E_B) | BIT(HNS3_RXD_L4E_B) |
BIT(HNS3_RXD_OL3E_B) |
BIT(HNS3_RXD_OL4E_B)))) {
skb->ip_summed = CHECKSUM_NONE;
hns3_ring_stats_update(ring, l3l4_csum_err);

return;
Expand Down

0 comments on commit 7d89b53

Please sign in to comment.