mv643xx_eth: move receive error handling out of line
Signed-off-by: Lennert Buytenhek <buytenh@marvell.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
66e63ffbc0
commit
f61e554776
@@ -543,9 +543,24 @@ static int rxq_process(struct rx_queue *rxq, int budget)
|
|||||||
* on, or the error summary bit is set, the packet needs
|
* on, or the error summary bit is set, the packet needs
|
||||||
* to be dropped.
|
* to be dropped.
|
||||||
*/
|
*/
|
||||||
if (((cmd_sts & (RX_FIRST_DESC | RX_LAST_DESC)) !=
|
if ((cmd_sts & (RX_FIRST_DESC | RX_LAST_DESC | ERROR_SUMMARY))
|
||||||
(RX_FIRST_DESC | RX_LAST_DESC))
|
!= (RX_FIRST_DESC | RX_LAST_DESC))
|
||||||
|| (cmd_sts & ERROR_SUMMARY)) {
|
goto err;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The -4 is for the CRC in the trailer of the
|
||||||
|
* received packet
|
||||||
|
*/
|
||||||
|
skb_put(skb, byte_cnt - 2 - 4);
|
||||||
|
|
||||||
|
if (cmd_sts & LAYER_4_CHECKSUM_OK)
|
||||||
|
skb->ip_summed = CHECKSUM_UNNECESSARY;
|
||||||
|
skb->protocol = eth_type_trans(skb, mp->dev);
|
||||||
|
netif_receive_skb(skb);
|
||||||
|
|
||||||
|
continue;
|
||||||
|
|
||||||
|
err:
|
||||||
stats->rx_dropped++;
|
stats->rx_dropped++;
|
||||||
|
|
||||||
if ((cmd_sts & (RX_FIRST_DESC | RX_LAST_DESC)) !=
|
if ((cmd_sts & (RX_FIRST_DESC | RX_LAST_DESC)) !=
|
||||||
@@ -560,18 +575,6 @@ static int rxq_process(struct rx_queue *rxq, int budget)
|
|||||||
stats->rx_errors++;
|
stats->rx_errors++;
|
||||||
|
|
||||||
dev_kfree_skb(skb);
|
dev_kfree_skb(skb);
|
||||||
} else {
|
|
||||||
/*
|
|
||||||
* The -4 is for the CRC in the trailer of the
|
|
||||||
* received packet
|
|
||||||
*/
|
|
||||||
skb_put(skb, byte_cnt - 2 - 4);
|
|
||||||
|
|
||||||
if (cmd_sts & LAYER_4_CHECKSUM_OK)
|
|
||||||
skb->ip_summed = CHECKSUM_UNNECESSARY;
|
|
||||||
skb->protocol = eth_type_trans(skb, mp->dev);
|
|
||||||
netif_receive_skb(skb);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (rx < budget)
|
if (rx < budget)
|
||||||
|
Reference in New Issue
Block a user