diff options
Diffstat (limited to 'drivers/net/ethernet/broadcom/bcmsysport.c')
-rw-r--r-- | drivers/net/ethernet/broadcom/bcmsysport.c | 31 |
1 files changed, 19 insertions, 12 deletions
diff --git a/drivers/net/ethernet/broadcom/bcmsysport.c b/drivers/net/ethernet/broadcom/bcmsysport.c index 6f4e18644bd4..d9b9170ed2fc 100644 --- a/drivers/net/ethernet/broadcom/bcmsysport.c +++ b/drivers/net/ethernet/broadcom/bcmsysport.c | |||
@@ -534,6 +534,25 @@ static unsigned int bcm_sysport_desc_rx(struct bcm_sysport_priv *priv, | |||
534 | while ((processed < to_process) && (processed < budget)) { | 534 | while ((processed < to_process) && (processed < budget)) { |
535 | cb = &priv->rx_cbs[priv->rx_read_ptr]; | 535 | cb = &priv->rx_cbs[priv->rx_read_ptr]; |
536 | skb = cb->skb; | 536 | skb = cb->skb; |
537 | |||
538 | processed++; | ||
539 | priv->rx_read_ptr++; | ||
540 | |||
541 | if (priv->rx_read_ptr == priv->num_rx_bds) | ||
542 | priv->rx_read_ptr = 0; | ||
543 | |||
544 | /* We do not have a backing SKB, so we do not a corresponding | ||
545 | * DMA mapping for this incoming packet since | ||
546 | * bcm_sysport_rx_refill always either has both skb and mapping | ||
547 | * or none. | ||
548 | */ | ||
549 | if (unlikely(!skb)) { | ||
550 | netif_err(priv, rx_err, ndev, "out of memory!\n"); | ||
551 | ndev->stats.rx_dropped++; | ||
552 | ndev->stats.rx_errors++; | ||
553 | goto refill; | ||
554 | } | ||
555 | |||
537 | dma_unmap_single(kdev, dma_unmap_addr(cb, dma_addr), | 556 | dma_unmap_single(kdev, dma_unmap_addr(cb, dma_addr), |
538 | RX_BUF_LENGTH, DMA_FROM_DEVICE); | 557 | RX_BUF_LENGTH, DMA_FROM_DEVICE); |
539 | 558 | ||
@@ -543,23 +562,11 @@ static unsigned int bcm_sysport_desc_rx(struct bcm_sysport_priv *priv, | |||
543 | status = (rsb->rx_status_len >> DESC_STATUS_SHIFT) & | 562 | status = (rsb->rx_status_len >> DESC_STATUS_SHIFT) & |
544 | DESC_STATUS_MASK; | 563 | DESC_STATUS_MASK; |
545 | 564 | ||
546 | processed++; | ||
547 | priv->rx_read_ptr++; | ||
548 | if (priv->rx_read_ptr == priv->num_rx_bds) | ||
549 | priv->rx_read_ptr = 0; | ||
550 | |||
551 | netif_dbg(priv, rx_status, ndev, | 565 | netif_dbg(priv, rx_status, ndev, |
552 | "p=%d, c=%d, rd_ptr=%d, len=%d, flag=0x%04x\n", | 566 | "p=%d, c=%d, rd_ptr=%d, len=%d, flag=0x%04x\n", |
553 | p_index, priv->rx_c_index, priv->rx_read_ptr, | 567 | p_index, priv->rx_c_index, priv->rx_read_ptr, |
554 | len, status); | 568 | len, status); |
555 | 569 | ||
556 | if (unlikely(!skb)) { | ||
557 | netif_err(priv, rx_err, ndev, "out of memory!\n"); | ||
558 | ndev->stats.rx_dropped++; | ||
559 | ndev->stats.rx_errors++; | ||
560 | goto refill; | ||
561 | } | ||
562 | |||
563 | if (unlikely(!(status & DESC_EOP) || !(status & DESC_SOP))) { | 570 | if (unlikely(!(status & DESC_EOP) || !(status & DESC_SOP))) { |
564 | netif_err(priv, rx_status, ndev, "fragmented packet!\n"); | 571 | netif_err(priv, rx_status, ndev, "fragmented packet!\n"); |
565 | ndev->stats.rx_dropped++; | 572 | ndev->stats.rx_dropped++; |