diff options
| -rw-r--r-- | drivers/net/ethernet/intel/e1000/e1000_ethtool.c | 9 | ||||
| -rw-r--r-- | drivers/net/ethernet/intel/e1000/e1000_main.c | 11 | ||||
| -rw-r--r-- | drivers/net/ethernet/intel/i40e/i40e_txrx.c | 3 | ||||
| -rw-r--r-- | drivers/net/ethernet/intel/igb/igb_main.c | 2 | ||||
| -rw-r--r-- | drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 18 |
5 files changed, 22 insertions, 21 deletions
diff --git a/drivers/net/ethernet/intel/e1000/e1000_ethtool.c b/drivers/net/ethernet/intel/e1000/e1000_ethtool.c index ec8aa4562cc9..3b3983a1ffbb 100644 --- a/drivers/net/ethernet/intel/e1000/e1000_ethtool.c +++ b/drivers/net/ethernet/intel/e1000/e1000_ethtool.c | |||
| @@ -1824,11 +1824,12 @@ static void e1000_get_ethtool_stats(struct net_device *netdev, | |||
| 1824 | { | 1824 | { |
| 1825 | struct e1000_adapter *adapter = netdev_priv(netdev); | 1825 | struct e1000_adapter *adapter = netdev_priv(netdev); |
| 1826 | int i; | 1826 | int i; |
| 1827 | char *p = NULL; | ||
| 1828 | const struct e1000_stats *stat = e1000_gstrings_stats; | 1827 | const struct e1000_stats *stat = e1000_gstrings_stats; |
| 1829 | 1828 | ||
| 1830 | e1000_update_stats(adapter); | 1829 | e1000_update_stats(adapter); |
| 1831 | for (i = 0; i < E1000_GLOBAL_STATS_LEN; i++) { | 1830 | for (i = 0; i < E1000_GLOBAL_STATS_LEN; i++, stat++) { |
| 1831 | char *p; | ||
| 1832 | |||
| 1832 | switch (stat->type) { | 1833 | switch (stat->type) { |
| 1833 | case NETDEV_STATS: | 1834 | case NETDEV_STATS: |
| 1834 | p = (char *)netdev + stat->stat_offset; | 1835 | p = (char *)netdev + stat->stat_offset; |
| @@ -1839,15 +1840,13 @@ static void e1000_get_ethtool_stats(struct net_device *netdev, | |||
| 1839 | default: | 1840 | default: |
| 1840 | WARN_ONCE(1, "Invalid E1000 stat type: %u index %d\n", | 1841 | WARN_ONCE(1, "Invalid E1000 stat type: %u index %d\n", |
| 1841 | stat->type, i); | 1842 | stat->type, i); |
| 1842 | break; | 1843 | continue; |
| 1843 | } | 1844 | } |
| 1844 | 1845 | ||
| 1845 | if (stat->sizeof_stat == sizeof(u64)) | 1846 | if (stat->sizeof_stat == sizeof(u64)) |
| 1846 | data[i] = *(u64 *)p; | 1847 | data[i] = *(u64 *)p; |
| 1847 | else | 1848 | else |
| 1848 | data[i] = *(u32 *)p; | 1849 | data[i] = *(u32 *)p; |
| 1849 | |||
| 1850 | stat++; | ||
| 1851 | } | 1850 | } |
| 1852 | /* BUG_ON(i != E1000_STATS_LEN); */ | 1851 | /* BUG_ON(i != E1000_STATS_LEN); */ |
| 1853 | } | 1852 | } |
diff --git a/drivers/net/ethernet/intel/e1000/e1000_main.c b/drivers/net/ethernet/intel/e1000/e1000_main.c index 98375e1e1185..1982f7917a8d 100644 --- a/drivers/net/ethernet/intel/e1000/e1000_main.c +++ b/drivers/net/ethernet/intel/e1000/e1000_main.c | |||
| @@ -520,8 +520,6 @@ void e1000_down(struct e1000_adapter *adapter) | |||
| 520 | struct net_device *netdev = adapter->netdev; | 520 | struct net_device *netdev = adapter->netdev; |
| 521 | u32 rctl, tctl; | 521 | u32 rctl, tctl; |
| 522 | 522 | ||
| 523 | netif_carrier_off(netdev); | ||
| 524 | |||
| 525 | /* disable receives in the hardware */ | 523 | /* disable receives in the hardware */ |
| 526 | rctl = er32(RCTL); | 524 | rctl = er32(RCTL); |
| 527 | ew32(RCTL, rctl & ~E1000_RCTL_EN); | 525 | ew32(RCTL, rctl & ~E1000_RCTL_EN); |
| @@ -537,6 +535,15 @@ void e1000_down(struct e1000_adapter *adapter) | |||
| 537 | E1000_WRITE_FLUSH(); | 535 | E1000_WRITE_FLUSH(); |
| 538 | msleep(10); | 536 | msleep(10); |
| 539 | 537 | ||
| 538 | /* Set the carrier off after transmits have been disabled in the | ||
| 539 | * hardware, to avoid race conditions with e1000_watchdog() (which | ||
| 540 | * may be running concurrently to us, checking for the carrier | ||
| 541 | * bit to decide whether it should enable transmits again). Such | ||
| 542 | * a race condition would result into transmission being disabled | ||
| 543 | * in the hardware until the next IFF_DOWN+IFF_UP cycle. | ||
| 544 | */ | ||
| 545 | netif_carrier_off(netdev); | ||
| 546 | |||
| 540 | napi_disable(&adapter->napi); | 547 | napi_disable(&adapter->napi); |
| 541 | 548 | ||
| 542 | e1000_irq_disable(adapter); | 549 | e1000_irq_disable(adapter); |
diff --git a/drivers/net/ethernet/intel/i40e/i40e_txrx.c b/drivers/net/ethernet/intel/i40e/i40e_txrx.c index 2756131495f0..120c68f78951 100644 --- a/drivers/net/ethernet/intel/i40e/i40e_txrx.c +++ b/drivers/net/ethernet/intel/i40e/i40e_txrx.c | |||
| @@ -2102,6 +2102,7 @@ static int i40e_clean_rx_irq(struct i40e_ring *rx_ring, int budget) | |||
| 2102 | 2102 | ||
| 2103 | if (unlikely(i40e_rx_is_programming_status(qword))) { | 2103 | if (unlikely(i40e_rx_is_programming_status(qword))) { |
| 2104 | i40e_clean_programming_status(rx_ring, rx_desc, qword); | 2104 | i40e_clean_programming_status(rx_ring, rx_desc, qword); |
| 2105 | cleaned_count++; | ||
| 2105 | continue; | 2106 | continue; |
| 2106 | } | 2107 | } |
| 2107 | size = (qword & I40E_RXD_QW1_LENGTH_PBUF_MASK) >> | 2108 | size = (qword & I40E_RXD_QW1_LENGTH_PBUF_MASK) >> |
| @@ -2269,7 +2270,7 @@ static inline void i40e_update_enable_itr(struct i40e_vsi *vsi, | |||
| 2269 | goto enable_int; | 2270 | goto enable_int; |
| 2270 | } | 2271 | } |
| 2271 | 2272 | ||
| 2272 | if (ITR_IS_DYNAMIC(tx_itr_setting)) { | 2273 | if (ITR_IS_DYNAMIC(rx_itr_setting)) { |
| 2273 | rx = i40e_set_new_dynamic_itr(&q_vector->rx); | 2274 | rx = i40e_set_new_dynamic_itr(&q_vector->rx); |
| 2274 | rxval = i40e_buildreg_itr(I40E_RX_ITR, q_vector->rx.itr); | 2275 | rxval = i40e_buildreg_itr(I40E_RX_ITR, q_vector->rx.itr); |
| 2275 | } | 2276 | } |
diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c index fd4a46b03cc8..ea69af267d63 100644 --- a/drivers/net/ethernet/intel/igb/igb_main.c +++ b/drivers/net/ethernet/intel/igb/igb_main.c | |||
| @@ -5326,7 +5326,7 @@ dma_error: | |||
| 5326 | DMA_TO_DEVICE); | 5326 | DMA_TO_DEVICE); |
| 5327 | dma_unmap_len_set(tx_buffer, len, 0); | 5327 | dma_unmap_len_set(tx_buffer, len, 0); |
| 5328 | 5328 | ||
| 5329 | if (i--) | 5329 | if (i-- == 0) |
| 5330 | i += tx_ring->count; | 5330 | i += tx_ring->count; |
| 5331 | tx_buffer = &tx_ring->tx_buffer_info[i]; | 5331 | tx_buffer = &tx_ring->tx_buffer_info[i]; |
| 5332 | } | 5332 | } |
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c index 4d76afd13868..6d5f31e94358 100644 --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | |||
| @@ -8020,29 +8020,23 @@ static int ixgbe_tx_map(struct ixgbe_ring *tx_ring, | |||
| 8020 | return 0; | 8020 | return 0; |
| 8021 | dma_error: | 8021 | dma_error: |
| 8022 | dev_err(tx_ring->dev, "TX DMA map failed\n"); | 8022 | dev_err(tx_ring->dev, "TX DMA map failed\n"); |
| 8023 | tx_buffer = &tx_ring->tx_buffer_info[i]; | ||
| 8024 | 8023 | ||
| 8025 | /* clear dma mappings for failed tx_buffer_info map */ | 8024 | /* clear dma mappings for failed tx_buffer_info map */ |
| 8026 | while (tx_buffer != first) { | 8025 | for (;;) { |
| 8026 | tx_buffer = &tx_ring->tx_buffer_info[i]; | ||
| 8027 | if (dma_unmap_len(tx_buffer, len)) | 8027 | if (dma_unmap_len(tx_buffer, len)) |
| 8028 | dma_unmap_page(tx_ring->dev, | 8028 | dma_unmap_page(tx_ring->dev, |
| 8029 | dma_unmap_addr(tx_buffer, dma), | 8029 | dma_unmap_addr(tx_buffer, dma), |
| 8030 | dma_unmap_len(tx_buffer, len), | 8030 | dma_unmap_len(tx_buffer, len), |
| 8031 | DMA_TO_DEVICE); | 8031 | DMA_TO_DEVICE); |
| 8032 | dma_unmap_len_set(tx_buffer, len, 0); | 8032 | dma_unmap_len_set(tx_buffer, len, 0); |
| 8033 | 8033 | if (tx_buffer == first) | |
| 8034 | if (i--) | 8034 | break; |
| 8035 | if (i == 0) | ||
| 8035 | i += tx_ring->count; | 8036 | i += tx_ring->count; |
| 8036 | tx_buffer = &tx_ring->tx_buffer_info[i]; | 8037 | i--; |
| 8037 | } | 8038 | } |
| 8038 | 8039 | ||
| 8039 | if (dma_unmap_len(tx_buffer, len)) | ||
| 8040 | dma_unmap_single(tx_ring->dev, | ||
| 8041 | dma_unmap_addr(tx_buffer, dma), | ||
| 8042 | dma_unmap_len(tx_buffer, len), | ||
| 8043 | DMA_TO_DEVICE); | ||
| 8044 | dma_unmap_len_set(tx_buffer, len, 0); | ||
| 8045 | |||
| 8046 | dev_kfree_skb_any(first->skb); | 8040 | dev_kfree_skb_any(first->skb); |
| 8047 | first->skb = NULL; | 8041 | first->skb = NULL; |
| 8048 | 8042 | ||
