diff options
author | David S. Miller <davem@davemloft.net> | 2014-04-12 16:36:44 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2014-04-12 16:36:44 -0400 |
commit | dcfba949ba4ff90f5a7ff2942a4c86f9e2ba345d (patch) | |
tree | 032da70dd9091162fa7c88f0305b1f4b94cff1fd /drivers/net/ethernet/intel/igb/igb_main.c | |
parent | 0f2eea4b7e29ab693b07f6eedf8e87a0c11b8b42 (diff) | |
parent | 5b7af02c26d84cf56dfd7e6906e244e31e92d593 (diff) |
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net
Jeff Kirsher says:
====================
Intel Wired LAN Driver Updates
This series contains updates to e1000, e1000e, igb, igbvf, ixgb, ixgbe,
ixgbevf and i40evf.
Mark fixes an issue with ixgbe and ixgbevf by adding a bit to indicate
when workqueues have been initialized. This permits the register read
error handling from attempting to use them prior to that, which also
generates warnings. Checking for a detected removal after initializing
the work queues allows the probe function to return an error without
getting the workqueue involved. Further, if the error_detected
callback is entered before the workqueues are initialized, exit without
recovery since the device initialization was so truncated.
Francois Romieu provides several patches to all the drivers to remove
the open coded skb_cow_head.
Jakub Kicinski provides a fix for igb where last_rx_timestamp should be
updated only when Rx time stamp is read.
Mitch provides a fix for i40evf where a recent change broke the RSS LUT
programming causing it to be programmed with all 0's.
====================
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/intel/igb/igb_main.c')
-rw-r--r-- | drivers/net/ethernet/intel/igb/igb_main.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c index 30198185d19a..fb98d4602f9d 100644 --- a/drivers/net/ethernet/intel/igb/igb_main.c +++ b/drivers/net/ethernet/intel/igb/igb_main.c | |||
@@ -4605,6 +4605,7 @@ static int igb_tso(struct igb_ring *tx_ring, | |||
4605 | struct sk_buff *skb = first->skb; | 4605 | struct sk_buff *skb = first->skb; |
4606 | u32 vlan_macip_lens, type_tucmd; | 4606 | u32 vlan_macip_lens, type_tucmd; |
4607 | u32 mss_l4len_idx, l4len; | 4607 | u32 mss_l4len_idx, l4len; |
4608 | int err; | ||
4608 | 4609 | ||
4609 | if (skb->ip_summed != CHECKSUM_PARTIAL) | 4610 | if (skb->ip_summed != CHECKSUM_PARTIAL) |
4610 | return 0; | 4611 | return 0; |
@@ -4612,11 +4613,9 @@ static int igb_tso(struct igb_ring *tx_ring, | |||
4612 | if (!skb_is_gso(skb)) | 4613 | if (!skb_is_gso(skb)) |
4613 | return 0; | 4614 | return 0; |
4614 | 4615 | ||
4615 | if (skb_header_cloned(skb)) { | 4616 | err = skb_cow_head(skb, 0); |
4616 | int err = pskb_expand_head(skb, 0, 0, GFP_ATOMIC); | 4617 | if (err < 0) |
4617 | if (err) | 4618 | return err; |
4618 | return err; | ||
4619 | } | ||
4620 | 4619 | ||
4621 | /* ADV DTYP TUCMD MKRLOC/ISCSIHEDLEN */ | 4620 | /* ADV DTYP TUCMD MKRLOC/ISCSIHEDLEN */ |
4622 | type_tucmd = E1000_ADVTXD_TUCMD_L4T_TCP; | 4621 | type_tucmd = E1000_ADVTXD_TUCMD_L4T_TCP; |
@@ -6955,7 +6954,9 @@ static void igb_process_skb_fields(struct igb_ring *rx_ring, | |||
6955 | 6954 | ||
6956 | igb_rx_checksum(rx_ring, rx_desc, skb); | 6955 | igb_rx_checksum(rx_ring, rx_desc, skb); |
6957 | 6956 | ||
6958 | igb_ptp_rx_hwtstamp(rx_ring, rx_desc, skb); | 6957 | if (igb_test_staterr(rx_desc, E1000_RXDADV_STAT_TS) && |
6958 | !igb_test_staterr(rx_desc, E1000_RXDADV_STAT_TSIP)) | ||
6959 | igb_ptp_rx_rgtstamp(rx_ring->q_vector, skb); | ||
6959 | 6960 | ||
6960 | if ((dev->features & NETIF_F_HW_VLAN_CTAG_RX) && | 6961 | if ((dev->features & NETIF_F_HW_VLAN_CTAG_RX) && |
6961 | igb_test_staterr(rx_desc, E1000_RXD_STAT_VP)) { | 6962 | igb_test_staterr(rx_desc, E1000_RXD_STAT_VP)) { |