wil6210: fix RX checksum report to network stack
Currently the driver sets CHECKSUM_UNNECESSARY only in case the HW doesn't report checksum error. As ip_summed value is not initialized it is not clear what the driver will report to the network stack in case of HW checksum error or in case HW doesn't calculate checksum. Initialize ip_summed to CHECKSUM_NONE to guarantee checksum calculation by the network stack in the above cases. Signed-off-by: Gidon Studinski <gidons@codeaurora.org> Signed-off-by: Maya Erez <merez@codeaurora.org> Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
This commit is contained in:
parent
6d9eb7ebae
commit
0b85321022
@ -1736,10 +1736,11 @@ __acquires(&p->tid_rx_lock) __releases(&p->tid_rx_lock)
|
||||
p->stats.rx_large_frame,
|
||||
p->stats.rx_replay);
|
||||
seq_printf(s,
|
||||
"mic error %lu, key error %lu, amsdu error %lu\n",
|
||||
"mic error %lu, key error %lu, amsdu error %lu, csum error %lu\n",
|
||||
p->stats.rx_mic_error,
|
||||
p->stats.rx_key_error,
|
||||
p->stats.rx_amsdu_error);
|
||||
p->stats.rx_amsdu_error,
|
||||
p->stats.rx_csum_err);
|
||||
|
||||
seq_puts(s, "Rx/MCS:");
|
||||
for (mcs = 0; mcs < ARRAY_SIZE(p->stats.rx_per_mcs);
|
||||
|
@ -281,6 +281,12 @@ static int wil_vring_alloc_skb(struct wil6210_priv *wil, struct wil_ring *vring,
|
||||
skb_reserve(skb, headroom);
|
||||
skb_put(skb, sz);
|
||||
|
||||
/**
|
||||
* Make sure that the network stack calculates checksum for packets
|
||||
* which failed the HW checksum calculation
|
||||
*/
|
||||
skb->ip_summed = CHECKSUM_NONE;
|
||||
|
||||
pa = dma_map_single(dev, skb->data, skb->len, DMA_FROM_DEVICE);
|
||||
if (unlikely(dma_mapping_error(dev, pa))) {
|
||||
kfree_skb(skb);
|
||||
@ -569,6 +575,8 @@ again:
|
||||
* mis-calculates TCP checksum - if it should be 0x0,
|
||||
* it writes 0xffff in violation of RFC 1624
|
||||
*/
|
||||
else
|
||||
stats->rx_csum_err++;
|
||||
}
|
||||
|
||||
if (snaplen) {
|
||||
|
@ -182,6 +182,12 @@ static int wil_ring_alloc_skb_edma(struct wil6210_priv *wil,
|
||||
|
||||
skb_put(skb, sz);
|
||||
|
||||
/**
|
||||
* Make sure that the network stack calculates checksum for packets
|
||||
* which failed the HW checksum calculation
|
||||
*/
|
||||
skb->ip_summed = CHECKSUM_NONE;
|
||||
|
||||
pa = dma_map_single(dev, skb->data, skb->len, DMA_FROM_DEVICE);
|
||||
if (unlikely(dma_mapping_error(dev, pa))) {
|
||||
kfree_skb(skb);
|
||||
@ -847,6 +853,8 @@ static int wil_rx_error_check_edma(struct wil6210_priv *wil,
|
||||
* mis-calculates TCP checksum - if it should be 0x0,
|
||||
* it writes 0xffff in violation of RFC 1624
|
||||
*/
|
||||
else
|
||||
stats->rx_csum_err++;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -565,6 +565,7 @@ struct wil_net_stats {
|
||||
unsigned long rx_mic_error;
|
||||
unsigned long rx_key_error; /* eDMA specific */
|
||||
unsigned long rx_amsdu_error; /* eDMA specific */
|
||||
unsigned long rx_csum_err;
|
||||
u16 last_mcs_rx;
|
||||
u64 rx_per_mcs[WIL_MCS_MAX + 1];
|
||||
};
|
||||
|
Loading…
x
Reference in New Issue
Block a user