aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Brandeburg <jesse.brandeburg@intel.com>2009-09-25 08:18:41 -0400
committerDavid S. Miller <davem@davemloft.net>2009-09-26 23:15:45 -0400
commit8fce47317fc96b222ea7e28fb6d153b1855e91cd (patch)
treef1981a54e82c35779b83b20d6e58e22f29700595
parentcdd7549e27bf5e8abc4e19d5e8d110b8252b4fe4 (diff)
e1000: two workarounds were incomplete, fix them
1) 82544 does not need last_tx_tso workaround, it interferes with the 82544 workaround too 2) 82544 hang workaround was using the address of the page struct instead of the physical address as its "workaround decider" not sure how that ever worked Signed-off-by: Jesse Brandeburg <jesse.brandeburg@intel.com> Signed-off-by: Don Skidmore <donald.c.skidmore@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/net/e1000/e1000_main.c17
1 files changed, 10 insertions, 7 deletions
diff --git a/drivers/net/e1000/e1000_main.c b/drivers/net/e1000/e1000_main.c
index 8c64363faaf3..cdbf4fb8150d 100644
--- a/drivers/net/e1000/e1000_main.c
+++ b/drivers/net/e1000/e1000_main.c
@@ -2416,6 +2416,11 @@ enum latency_range {
2416 2416
2417/** 2417/**
2418 * e1000_update_itr - update the dynamic ITR value based on statistics 2418 * e1000_update_itr - update the dynamic ITR value based on statistics
2419 * @adapter: pointer to adapter
2420 * @itr_setting: current adapter->itr
2421 * @packets: the number of packets during this measurement interval
2422 * @bytes: the number of bytes during this measurement interval
2423 *
2419 * Stores a new ITR value based on packets and byte 2424 * Stores a new ITR value based on packets and byte
2420 * counts during the last interrupt. The advantage of per interrupt 2425 * counts during the last interrupt. The advantage of per interrupt
2421 * computation is faster updates and more accurate ITR for the current 2426 * computation is faster updates and more accurate ITR for the current
@@ -2425,10 +2430,6 @@ enum latency_range {
2425 * while increasing bulk throughput. 2430 * while increasing bulk throughput.
2426 * this functionality is controlled by the InterruptThrottleRate module 2431 * this functionality is controlled by the InterruptThrottleRate module
2427 * parameter (see e1000_param.c) 2432 * parameter (see e1000_param.c)
2428 * @adapter: pointer to adapter
2429 * @itr_setting: current adapter->itr
2430 * @packets: the number of packets during this measurement interval
2431 * @bytes: the number of bytes during this measurement interval
2432 **/ 2433 **/
2433static unsigned int e1000_update_itr(struct e1000_adapter *adapter, 2434static unsigned int e1000_update_itr(struct e1000_adapter *adapter,
2434 u16 itr_setting, int packets, int bytes) 2435 u16 itr_setting, int packets, int bytes)
@@ -2770,8 +2771,9 @@ static int e1000_tx_map(struct e1000_adapter *adapter,
2770 * Avoid terminating buffers within evenly-aligned 2771 * Avoid terminating buffers within evenly-aligned
2771 * dwords. */ 2772 * dwords. */
2772 if (unlikely(adapter->pcix_82544 && 2773 if (unlikely(adapter->pcix_82544 &&
2773 !((unsigned long)(frag->page+offset+size-1) & 4) && 2774 !((unsigned long)(page_to_phys(frag->page) + offset
2774 size > 4)) 2775 + size - 1) & 4) &&
2776 size > 4))
2775 size -= 4; 2777 size -= 4;
2776 2778
2777 buffer_info->length = size; 2779 buffer_info->length = size;
@@ -3042,7 +3044,8 @@ static netdev_tx_t e1000_xmit_frame(struct sk_buff *skb,
3042 } 3044 }
3043 3045
3044 if (likely(tso)) { 3046 if (likely(tso)) {
3045 tx_ring->last_tx_tso = 1; 3047 if (likely(hw->mac_type != e1000_82544))
3048 tx_ring->last_tx_tso = 1;
3046 tx_flags |= E1000_TX_FLAGS_TSO; 3049 tx_flags |= E1000_TX_FLAGS_TSO;
3047 } else if (likely(e1000_tx_csum(adapter, tx_ring, skb))) 3050 } else if (likely(e1000_tx_csum(adapter, tx_ring, skb)))
3048 tx_flags |= E1000_TX_FLAGS_CSUM; 3051 tx_flags |= E1000_TX_FLAGS_CSUM;