diff options
Diffstat (limited to 'drivers/net/ethernet/intel/ixgbe/ixgbe_main.c')
-rw-r--r-- | drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 24 |
1 files changed, 11 insertions, 13 deletions
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c index d962368d08d0..6d5f31e94358 100644 --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | |||
@@ -4881,7 +4881,7 @@ static void ixgbe_clear_udp_tunnel_port(struct ixgbe_adapter *adapter, u32 mask) | |||
4881 | IXGBE_FLAG_GENEVE_OFFLOAD_CAPABLE))) | 4881 | IXGBE_FLAG_GENEVE_OFFLOAD_CAPABLE))) |
4882 | return; | 4882 | return; |
4883 | 4883 | ||
4884 | vxlanctrl = IXGBE_READ_REG(hw, IXGBE_VXLANCTRL) && ~mask; | 4884 | vxlanctrl = IXGBE_READ_REG(hw, IXGBE_VXLANCTRL) & ~mask; |
4885 | IXGBE_WRITE_REG(hw, IXGBE_VXLANCTRL, vxlanctrl); | 4885 | IXGBE_WRITE_REG(hw, IXGBE_VXLANCTRL, vxlanctrl); |
4886 | 4886 | ||
4887 | if (mask & IXGBE_VXLANCTRL_VXLAN_UDPPORT_MASK) | 4887 | if (mask & IXGBE_VXLANCTRL_VXLAN_UDPPORT_MASK) |
@@ -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 | ||
@@ -8529,6 +8523,10 @@ static int ixgbe_ioctl(struct net_device *netdev, struct ifreq *req, int cmd) | |||
8529 | return ixgbe_ptp_set_ts_config(adapter, req); | 8523 | return ixgbe_ptp_set_ts_config(adapter, req); |
8530 | case SIOCGHWTSTAMP: | 8524 | case SIOCGHWTSTAMP: |
8531 | return ixgbe_ptp_get_ts_config(adapter, req); | 8525 | return ixgbe_ptp_get_ts_config(adapter, req); |
8526 | case SIOCGMIIPHY: | ||
8527 | if (!adapter->hw.phy.ops.read_reg) | ||
8528 | return -EOPNOTSUPP; | ||
8529 | /* fall through */ | ||
8532 | default: | 8530 | default: |
8533 | return mdio_mii_ioctl(&adapter->hw.phy.mdio, if_mii(req), cmd); | 8531 | return mdio_mii_ioctl(&adapter->hw.phy.mdio, if_mii(req), cmd); |
8534 | } | 8532 | } |