Ignore:
Timestamp:
2010-11-24T11:01:12+01:00 (5 years ago)
Author:
juhosg
Message:

ramips: Don't trigger BUG_ON due to skb allocation failure

Instead just drop the rx'ed frame silently and reuse the already
available buffer.

Signed-off-by: Helmut Schaa <helmut.schaa@…>

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/target/linux/ramips/files/drivers/net/ramips.c

    r24121 r24122  
    273273                max_rx--; 
    274274 
    275                 rx_skb = priv->rx_skb[rx]; 
    276                 skb_put(rx_skb, RX_DMA_PLEN0(priv->rx[rx].rxd2)); 
    277                 rx_skb->dev = dev; 
    278                 rx_skb->protocol = eth_type_trans(rx_skb, dev); 
    279                 rx_skb->ip_summed = CHECKSUM_NONE; 
    280                 dev->stats.rx_packets++; 
    281                 dev->stats.rx_bytes += rx_skb->len; 
    282                 netif_rx(rx_skb); 
    283  
    284275                new_skb = netdev_alloc_skb(dev, MAX_RX_LENGTH + 2); 
    285                 priv->rx_skb[rx] = new_skb; 
    286                 BUG_ON(!new_skb); 
    287                 skb_reserve(new_skb, 2); 
    288                 priv->rx[rx].rxd1 = dma_map_single(NULL, 
    289                                                    new_skb->data, 
    290                                                    MAX_RX_LENGTH + 2, 
    291                                                    DMA_FROM_DEVICE); 
     276                /* Reuse the buffer on allocation failures */ 
     277                if (new_skb) { 
     278                        rx_skb = priv->rx_skb[rx]; 
     279                        skb_put(rx_skb, RX_DMA_PLEN0(priv->rx[rx].rxd2)); 
     280                        rx_skb->dev = dev; 
     281                        rx_skb->protocol = eth_type_trans(rx_skb, dev); 
     282                        rx_skb->ip_summed = CHECKSUM_NONE; 
     283                        dev->stats.rx_packets++; 
     284                        dev->stats.rx_bytes += rx_skb->len; 
     285                        netif_rx(rx_skb); 
     286 
     287                        priv->rx_skb[rx] = new_skb; 
     288                        skb_reserve(new_skb, 2); 
     289                        priv->rx[rx].rxd1 = dma_map_single(NULL, 
     290                                                           new_skb->data, 
     291                                                           MAX_RX_LENGTH + 2, 
     292                                                           DMA_FROM_DEVICE); 
     293                } 
     294 
    292295                priv->rx[rx].rxd2 &= ~RX_DMA_DONE; 
    293296                wmb(); 
Note: See TracChangeset for help on using the changeset viewer.