|
@@ -1462,6 +1462,7 @@ static int sh_eth_rx(struct net_device *ndev, u32 intr_status, int *quota)
|
|
if (mdp->cd->shift_rd0)
|
|
if (mdp->cd->shift_rd0)
|
|
desc_status >>= 16;
|
|
desc_status >>= 16;
|
|
|
|
|
|
|
|
+ skb = mdp->rx_skbuff[entry];
|
|
if (desc_status & (RD_RFS1 | RD_RFS2 | RD_RFS3 | RD_RFS4 |
|
|
if (desc_status & (RD_RFS1 | RD_RFS2 | RD_RFS3 | RD_RFS4 |
|
|
RD_RFS5 | RD_RFS6 | RD_RFS10)) {
|
|
RD_RFS5 | RD_RFS6 | RD_RFS10)) {
|
|
ndev->stats.rx_errors++;
|
|
ndev->stats.rx_errors++;
|
|
@@ -1477,12 +1478,11 @@ static int sh_eth_rx(struct net_device *ndev, u32 intr_status, int *quota)
|
|
ndev->stats.rx_missed_errors++;
|
|
ndev->stats.rx_missed_errors++;
|
|
if (desc_status & RD_RFS10)
|
|
if (desc_status & RD_RFS10)
|
|
ndev->stats.rx_over_errors++;
|
|
ndev->stats.rx_over_errors++;
|
|
- } else {
|
|
|
|
|
|
+ } else if (skb) {
|
|
if (!mdp->cd->hw_swap)
|
|
if (!mdp->cd->hw_swap)
|
|
sh_eth_soft_swap(
|
|
sh_eth_soft_swap(
|
|
phys_to_virt(ALIGN(rxdesc->addr, 4)),
|
|
phys_to_virt(ALIGN(rxdesc->addr, 4)),
|
|
pkt_len + 2);
|
|
pkt_len + 2);
|
|
- skb = mdp->rx_skbuff[entry];
|
|
|
|
mdp->rx_skbuff[entry] = NULL;
|
|
mdp->rx_skbuff[entry] = NULL;
|
|
if (mdp->cd->rpadir)
|
|
if (mdp->cd->rpadir)
|
|
skb_reserve(skb, NET_IP_ALIGN);
|
|
skb_reserve(skb, NET_IP_ALIGN);
|