|
@@ -1765,7 +1765,6 @@ static void free_skb_resources(struct gfar_private *priv)
|
|
|
sizeof(struct rxbd8) * priv->total_rx_ring_size,
|
|
|
priv->tx_queue[0]->tx_bd_base,
|
|
|
priv->tx_queue[0]->tx_bd_dma_base);
|
|
|
- skb_queue_purge(&priv->rx_recycle);
|
|
|
}
|
|
|
|
|
|
void gfar_start(struct net_device *dev)
|
|
@@ -1943,8 +1942,6 @@ static int gfar_enet_open(struct net_device *dev)
|
|
|
|
|
|
enable_napi(priv);
|
|
|
|
|
|
- skb_queue_head_init(&priv->rx_recycle);
|
|
|
-
|
|
|
/* Initialize a bunch of registers */
|
|
|
init_registers(dev);
|
|
|
|
|
@@ -2533,16 +2530,7 @@ static int gfar_clean_tx_ring(struct gfar_priv_tx_q *tx_queue)
|
|
|
|
|
|
bytes_sent += skb->len;
|
|
|
|
|
|
- /* If there's room in the queue (limit it to rx_buffer_size)
|
|
|
- * we add this skb back into the pool, if it's the right size
|
|
|
- */
|
|
|
- if (skb_queue_len(&priv->rx_recycle) < rx_queue->rx_ring_size &&
|
|
|
- skb_recycle_check(skb, priv->rx_buffer_size +
|
|
|
- RXBUF_ALIGNMENT)) {
|
|
|
- gfar_align_skb(skb);
|
|
|
- skb_queue_head(&priv->rx_recycle, skb);
|
|
|
- } else
|
|
|
- dev_kfree_skb_any(skb);
|
|
|
+ dev_kfree_skb_any(skb);
|
|
|
|
|
|
tx_queue->tx_skbuff[skb_dirtytx] = NULL;
|
|
|
|
|
@@ -2608,7 +2596,7 @@ static void gfar_new_rxbdp(struct gfar_priv_rx_q *rx_queue, struct rxbd8 *bdp,
|
|
|
static struct sk_buff *gfar_alloc_skb(struct net_device *dev)
|
|
|
{
|
|
|
struct gfar_private *priv = netdev_priv(dev);
|
|
|
- struct sk_buff *skb = NULL;
|
|
|
+ struct sk_buff *skb;
|
|
|
|
|
|
skb = netdev_alloc_skb(dev, priv->rx_buffer_size + RXBUF_ALIGNMENT);
|
|
|
if (!skb)
|
|
@@ -2621,14 +2609,7 @@ static struct sk_buff *gfar_alloc_skb(struct net_device *dev)
|
|
|
|
|
|
struct sk_buff *gfar_new_skb(struct net_device *dev)
|
|
|
{
|
|
|
- struct gfar_private *priv = netdev_priv(dev);
|
|
|
- struct sk_buff *skb = NULL;
|
|
|
-
|
|
|
- skb = skb_dequeue(&priv->rx_recycle);
|
|
|
- if (!skb)
|
|
|
- skb = gfar_alloc_skb(dev);
|
|
|
-
|
|
|
- return skb;
|
|
|
+ return gfar_alloc_skb(dev);
|
|
|
}
|
|
|
|
|
|
static inline void count_errors(unsigned short status, struct net_device *dev)
|
|
@@ -2787,7 +2768,7 @@ int gfar_clean_rx_ring(struct gfar_priv_rx_q *rx_queue, int rx_work_limit)
|
|
|
if (unlikely(!newskb))
|
|
|
newskb = skb;
|
|
|
else if (skb)
|
|
|
- skb_queue_head(&priv->rx_recycle, skb);
|
|
|
+ dev_kfree_skb(skb);
|
|
|
} else {
|
|
|
/* Increment the number of packets */
|
|
|
rx_queue->stats.rx_packets++;
|