|
@@ -281,6 +281,12 @@ static int wil_vring_alloc_skb(struct wil6210_priv *wil, struct wil_ring *vring,
|
|
skb_reserve(skb, headroom);
|
|
skb_reserve(skb, headroom);
|
|
skb_put(skb, sz);
|
|
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);
|
|
pa = dma_map_single(dev, skb->data, skb->len, DMA_FROM_DEVICE);
|
|
if (unlikely(dma_mapping_error(dev, pa))) {
|
|
if (unlikely(dma_mapping_error(dev, pa))) {
|
|
kfree_skb(skb);
|
|
kfree_skb(skb);
|
|
@@ -569,6 +575,8 @@ again:
|
|
* mis-calculates TCP checksum - if it should be 0x0,
|
|
* mis-calculates TCP checksum - if it should be 0x0,
|
|
* it writes 0xffff in violation of RFC 1624
|
|
* it writes 0xffff in violation of RFC 1624
|
|
*/
|
|
*/
|
|
|
|
+ else
|
|
|
|
+ stats->rx_csum_err++;
|
|
}
|
|
}
|
|
|
|
|
|
if (snaplen) {
|
|
if (snaplen) {
|