[PATCH] ixgb: Reset status in the Rx

Reset status in the Rx descriptor prior to handing it to the controller.
Leave three Rx descriptors unused

Signed-off-by: Mallikarjuna R Chilakala <mallikarjuna.chilakala@intel.com>
Signed-off-by: Ganesh Venkatesan <ganesh.venkatesan@intel.com>
Signed-off-by: John Ronciak <john.ronciak@intel.com>

diff -up net-drivers-2.6/drivers/net/ixgb/ixgb_main.c net-drivers-2.6/drivers/net/ixgb.new/ixgb_main.c

authored by Malli Chilakala and committed by Jeff Garzik 41639fed 6dfbb6dd

+6 -2
+6 -2
drivers/net/ixgb/ixgb_main.c
··· 1977 1978 num_group_tail_writes = IXGB_RX_BUFFER_WRITE; 1979 1980 - /* leave one descriptor unused */ 1981 - while(--cleancount > 0) { 1982 rx_desc = IXGB_RX_DESC(*rx_ring, i); 1983 1984 skb = dev_alloc_skb(adapter->rx_buffer_len + NET_IP_ALIGN); ··· 2005 PCI_DMA_FROMDEVICE); 2006 2007 rx_desc->buff_addr = cpu_to_le64(buffer_info->dma); 2008 2009 if((i & ~(num_group_tail_writes- 1)) == i) { 2010 /* Force memory writes to complete before letting h/w
··· 1977 1978 num_group_tail_writes = IXGB_RX_BUFFER_WRITE; 1979 1980 + /* leave three descriptors unused */ 1981 + while(--cleancount > 2) { 1982 rx_desc = IXGB_RX_DESC(*rx_ring, i); 1983 1984 skb = dev_alloc_skb(adapter->rx_buffer_len + NET_IP_ALIGN); ··· 2005 PCI_DMA_FROMDEVICE); 2006 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; 2012 2013 if((i & ~(num_group_tail_writes- 1)) == i) { 2014 /* Force memory writes to complete before letting h/w