This TSO-related workaround is no longer needed since it's only applicable for 8254x silicon.
Signed-off-by: Auke Kok <[EMAIL PROTECTED]> --- drivers/net/e1000e/e1000.h | 15 +++------------ drivers/net/e1000e/netdev.c | 20 ++------------------ 2 files changed, 5 insertions(+), 30 deletions(-) diff --git a/drivers/net/e1000e/e1000.h b/drivers/net/e1000e/e1000.h index e3cd877..bbe5faf 100644 --- a/drivers/net/e1000e/e1000.h +++ b/drivers/net/e1000e/e1000.h @@ -142,18 +142,9 @@ struct e1000_ring { /* array of buffer information structs */ struct e1000_buffer *buffer_info; - union { - /* for TX */ - struct { - bool last_tx_tso; /* used to mark tso desc. */ - }; - /* for RX */ - struct { - /* arrays of page information for packet split */ - struct e1000_ps_page *ps_pages; - struct sk_buff *rx_skb_top; - }; - }; + /* arrays of page information for packet split */ + struct e1000_ps_page *ps_pages; + struct sk_buff *rx_skb_top; struct e1000_queue_stats stats; }; diff --git a/drivers/net/e1000e/netdev.c b/drivers/net/e1000e/netdev.c index 8ebe238..4916f7c 100644 --- a/drivers/net/e1000e/netdev.c +++ b/drivers/net/e1000e/netdev.c @@ -1483,7 +1483,6 @@ static void e1000_clean_tx_ring(struct e1000_adapter *adapter) tx_ring->next_to_use = 0; tx_ring->next_to_clean = 0; - tx_ring->last_tx_tso = 0; writel(0, adapter->hw.hw_addr + tx_ring->head); writel(0, adapter->hw.hw_addr + tx_ring->tail); @@ -3216,15 +3215,6 @@ static int e1000_tx_map(struct e1000_adapter *adapter, while (len) { buffer_info = &tx_ring->buffer_info[i]; size = min(len, max_per_txd); - /* Workaround for Controller erratum -- - * descriptor for non-tso packet in a linear SKB that follows a - * tso gets written back prematurely before the data is fully - * DMA'd to the controller */ - if (tx_ring->last_tx_tso && !skb_is_gso(skb)) { - tx_ring->last_tx_tso = 0; - if (!skb->data_len) - size -= 4; - } /* Workaround for premature desc write-backs * in TSO mode. Append 4-byte sentinel desc */ @@ -3497,10 +3487,6 @@ static int e1000_xmit_frame(struct sk_buff *skb, struct net_device *netdev) count++; count++; - /* Controller Erratum workaround */ - if (!skb->data_len && tx_ring->last_tx_tso && !skb_is_gso(skb)) - count++; - count += TXD_USE_COUNT(len, max_txd_pwr); nr_frags = skb_shinfo(skb)->nr_frags; @@ -3536,12 +3522,10 @@ static int e1000_xmit_frame(struct sk_buff *skb, struct net_device *netdev) return NETDEV_TX_OK; } - if (tso) { - tx_ring->last_tx_tso = 1; + if (tso) tx_flags |= E1000_TX_FLAGS_TSO; - } else if (e1000_tx_csum(adapter, skb)) { + else if (e1000_tx_csum(adapter, skb)) tx_flags |= E1000_TX_FLAGS_CSUM; - } /* Old method was to assume IPv4 packet by default if TSO was enabled. * 82571 hardware supports TSO capabilities for IPv6 as well... - To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html