浏览代码

mv643xx_eth: fix recycle check bound

When mv643xx_eth allocates skbuffs, it adds
'dma_get_cache_alignment() - 1' to the length it needs, so that it can
align the skb's ->data pointer to a cache boundary.  When checking
whether a transmitted skbuff can be reused as a receive buffer, these
bytes needs to be included into the minimum bound for the recycle check.

Signed-off-by: Lennert Buytenhek <buytenh@marvell.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Lennert Buytenhek 16 年之前
父节点
当前提交
11b4aa03b2
共有 1 个文件被更改,包括 2 次插入1 次删除
  1. 2 1
      drivers/net/mv643xx_eth.c

+ 2 - 1
drivers/net/mv643xx_eth.c

@@ -899,7 +899,8 @@ static int txq_reclaim(struct tx_queue *txq, int budget, int force)
 		if (skb != NULL) {
 		if (skb != NULL) {
 			if (skb_queue_len(&mp->rx_recycle) <
 			if (skb_queue_len(&mp->rx_recycle) <
 					mp->default_rx_ring_size &&
 					mp->default_rx_ring_size &&
-			    skb_recycle_check(skb, mp->skb_size))
+			    skb_recycle_check(skb, mp->skb_size +
+					dma_get_cache_alignment() - 1))
 				__skb_queue_head(&mp->rx_recycle, skb);
 				__skb_queue_head(&mp->rx_recycle, skb);
 			else
 			else
 				dev_kfree_skb(skb);
 				dev_kfree_skb(skb);