diff options
| -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 |
