diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/net/ixgb/ixgb_main.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/drivers/net/ixgb/ixgb_main.c b/drivers/net/ixgb/ixgb_main.c index da6b9d6e6db9..a6a13f6fe65b 100644 --- a/drivers/net/ixgb/ixgb_main.c +++ b/drivers/net/ixgb/ixgb_main.c | |||
@@ -1977,8 +1977,8 @@ ixgb_alloc_rx_buffers(struct ixgb_adapter *adapter) | |||
1977 | 1977 | ||
1978 | num_group_tail_writes = IXGB_RX_BUFFER_WRITE; | 1978 | num_group_tail_writes = IXGB_RX_BUFFER_WRITE; |
1979 | 1979 | ||
1980 | /* leave one descriptor unused */ | 1980 | /* leave three descriptors unused */ |
1981 | while(--cleancount > 0) { | 1981 | while(--cleancount > 2) { |
1982 | rx_desc = IXGB_RX_DESC(*rx_ring, i); | 1982 | rx_desc = IXGB_RX_DESC(*rx_ring, i); |
1983 | 1983 | ||
1984 | skb = dev_alloc_skb(adapter->rx_buffer_len + NET_IP_ALIGN); | 1984 | skb = dev_alloc_skb(adapter->rx_buffer_len + NET_IP_ALIGN); |
@@ -2005,6 +2005,10 @@ ixgb_alloc_rx_buffers(struct ixgb_adapter *adapter) | |||
2005 | PCI_DMA_FROMDEVICE); | 2005 | PCI_DMA_FROMDEVICE); |
2006 | 2006 | ||
2007 | rx_desc->buff_addr = cpu_to_le64(buffer_info->dma); | 2007 | rx_desc->buff_addr = cpu_to_le64(buffer_info->dma); |
2008 | /* guarantee DD bit not set now before h/w gets descriptor | ||
2009 | * this is the rest of the workaround for h/w double | ||
2010 | * writeback. */ | ||
2011 | rx_desc->status = 0; | ||
2008 | 2012 | ||
2009 | if((i & ~(num_group_tail_writes- 1)) == i) { | 2013 | if((i & ~(num_group_tail_writes- 1)) == i) { |
2010 | /* Force memory writes to complete before letting h/w | 2014 | /* Force memory writes to complete before letting h/w |