|
@@ -58,6 +58,7 @@
|
|
|
#include <net/tc_act/tc_gact.h>
|
|
|
#include <net/tc_act/tc_mirred.h>
|
|
|
#include <net/vxlan.h>
|
|
|
+#include <net/mpls.h>
|
|
|
|
|
|
#include "ixgbe.h"
|
|
|
#include "ixgbe_common.h"
|
|
@@ -1451,7 +1452,7 @@ static int __ixgbe_notify_dca(struct device *dev, void *data)
|
|
|
IXGBE_DCA_CTRL_DCA_MODE_CB2);
|
|
|
break;
|
|
|
}
|
|
|
- /* Fall Through since DCA is disabled. */
|
|
|
+ /* fall through - DCA is disabled. */
|
|
|
case DCA_PROVIDER_REMOVE:
|
|
|
if (adapter->flags & IXGBE_FLAG_DCA_ENABLED) {
|
|
|
dca_remove_requester(dev);
|
|
@@ -2232,6 +2233,7 @@ static struct sk_buff *ixgbe_run_xdp(struct ixgbe_adapter *adapter,
|
|
|
break;
|
|
|
default:
|
|
|
bpf_warn_invalid_xdp_action(act);
|
|
|
+ /* fallthrough */
|
|
|
case XDP_ABORTED:
|
|
|
trace_xdp_exception(rx_ring->netdev, xdp_prog, act);
|
|
|
/* fallthrough -- handle aborts by dropping packet */
|
|
@@ -2638,8 +2640,7 @@ static void ixgbe_check_overtemp_subtask(struct ixgbe_adapter *adapter)
|
|
|
if (test_bit(__IXGBE_DOWN, &adapter->state))
|
|
|
return;
|
|
|
|
|
|
- if (!(adapter->flags2 & IXGBE_FLAG2_TEMP_SENSOR_CAPABLE) &&
|
|
|
- !(adapter->flags2 & IXGBE_FLAG2_TEMP_SENSOR_EVENT))
|
|
|
+ if (!(adapter->flags2 & IXGBE_FLAG2_TEMP_SENSOR_EVENT))
|
|
|
return;
|
|
|
|
|
|
adapter->flags2 &= ~IXGBE_FLAG2_TEMP_SENSOR_EVENT;
|
|
@@ -3105,23 +3106,23 @@ int ixgbe_poll(struct napi_struct *napi, int budget)
|
|
|
static int ixgbe_request_msix_irqs(struct ixgbe_adapter *adapter)
|
|
|
{
|
|
|
struct net_device *netdev = adapter->netdev;
|
|
|
+ unsigned int ri = 0, ti = 0;
|
|
|
int vector, err;
|
|
|
- int ri = 0, ti = 0;
|
|
|
|
|
|
for (vector = 0; vector < adapter->num_q_vectors; vector++) {
|
|
|
struct ixgbe_q_vector *q_vector = adapter->q_vector[vector];
|
|
|
struct msix_entry *entry = &adapter->msix_entries[vector];
|
|
|
|
|
|
if (q_vector->tx.ring && q_vector->rx.ring) {
|
|
|
- snprintf(q_vector->name, sizeof(q_vector->name) - 1,
|
|
|
- "%s-%s-%d", netdev->name, "TxRx", ri++);
|
|
|
+ snprintf(q_vector->name, sizeof(q_vector->name),
|
|
|
+ "%s-TxRx-%u", netdev->name, ri++);
|
|
|
ti++;
|
|
|
} else if (q_vector->rx.ring) {
|
|
|
- snprintf(q_vector->name, sizeof(q_vector->name) - 1,
|
|
|
- "%s-%s-%d", netdev->name, "rx", ri++);
|
|
|
+ snprintf(q_vector->name, sizeof(q_vector->name),
|
|
|
+ "%s-rx-%u", netdev->name, ri++);
|
|
|
} else if (q_vector->tx.ring) {
|
|
|
- snprintf(q_vector->name, sizeof(q_vector->name) - 1,
|
|
|
- "%s-%s-%d", netdev->name, "tx", ti++);
|
|
|
+ snprintf(q_vector->name, sizeof(q_vector->name),
|
|
|
+ "%s-tx-%u", netdev->name, ti++);
|
|
|
} else {
|
|
|
/* skip this unused q_vector */
|
|
|
continue;
|
|
@@ -3802,6 +3803,9 @@ static void ixgbe_setup_mrqc(struct ixgbe_adapter *adapter)
|
|
|
mrqc = IXGBE_MRQC_VMDQRSS32EN;
|
|
|
else
|
|
|
mrqc = IXGBE_MRQC_VMDQRSS64EN;
|
|
|
+
|
|
|
+ /* Enable L3/L4 for Tx Switched packets */
|
|
|
+ mrqc |= IXGBE_MRQC_L3L4TXSWEN;
|
|
|
} else {
|
|
|
if (tcs > 4)
|
|
|
mrqc = IXGBE_MRQC_RTRSS8TCEN;
|
|
@@ -4174,7 +4178,7 @@ static void ixgbe_setup_rdrxctl(struct ixgbe_adapter *adapter)
|
|
|
case ixgbe_mac_x550em_a:
|
|
|
if (adapter->num_vfs)
|
|
|
rdrxctl |= IXGBE_RDRXCTL_PSP;
|
|
|
- /* fall through for older HW */
|
|
|
+ /* fall through */
|
|
|
case ixgbe_mac_82599EB:
|
|
|
case ixgbe_mac_X540:
|
|
|
/* Disable RSC for ACK packets */
|
|
@@ -6183,8 +6187,6 @@ int ixgbe_setup_tx_resources(struct ixgbe_ring *tx_ring)
|
|
|
if (!tx_ring->tx_buffer_info)
|
|
|
goto err;
|
|
|
|
|
|
- u64_stats_init(&tx_ring->syncp);
|
|
|
-
|
|
|
/* round up to nearest 4K */
|
|
|
tx_ring->size = tx_ring->count * sizeof(union ixgbe_adv_tx_desc);
|
|
|
tx_ring->size = ALIGN(tx_ring->size, 4096);
|
|
@@ -6278,8 +6280,6 @@ int ixgbe_setup_rx_resources(struct ixgbe_adapter *adapter,
|
|
|
if (!rx_ring->rx_buffer_info)
|
|
|
goto err;
|
|
|
|
|
|
- u64_stats_init(&rx_ring->syncp);
|
|
|
-
|
|
|
/* Round up to nearest 4K */
|
|
|
rx_ring->size = rx_ring->count * sizeof(union ixgbe_adv_rx_desc);
|
|
|
rx_ring->size = ALIGN(rx_ring->size, 4096);
|
|
@@ -6886,6 +6886,7 @@ void ixgbe_update_stats(struct ixgbe_adapter *adapter)
|
|
|
hwstats->o2bspc += IXGBE_READ_REG(hw, IXGBE_O2BSPC);
|
|
|
hwstats->b2ospc += IXGBE_READ_REG(hw, IXGBE_B2OSPC);
|
|
|
hwstats->b2ogprc += IXGBE_READ_REG(hw, IXGBE_B2OGPRC);
|
|
|
+ /* fall through */
|
|
|
case ixgbe_mac_82599EB:
|
|
|
for (i = 0; i < 16; i++)
|
|
|
adapter->hw_rx_no_dma_resources +=
|
|
@@ -7667,7 +7668,10 @@ static int ixgbe_tso(struct ixgbe_ring *tx_ring,
|
|
|
if (err < 0)
|
|
|
return err;
|
|
|
|
|
|
- ip.hdr = skb_network_header(skb);
|
|
|
+ if (eth_p_mpls(first->protocol))
|
|
|
+ ip.hdr = skb_inner_network_header(skb);
|
|
|
+ else
|
|
|
+ ip.hdr = skb_network_header(skb);
|
|
|
l4.hdr = skb_checksum_start(skb);
|
|
|
|
|
|
/* ADV DTYP TUCMD MKRLOC/ISCSIHEDLEN */
|
|
@@ -8205,6 +8209,7 @@ static u16 ixgbe_select_queue(struct net_device *dev, struct sk_buff *skb,
|
|
|
|
|
|
if (adapter->flags & IXGBE_FLAG_FCOE_ENABLED)
|
|
|
break;
|
|
|
+ /* fall through */
|
|
|
default:
|
|
|
return fallback(dev, skb);
|
|
|
}
|
|
@@ -9929,6 +9934,7 @@ bool ixgbe_wol_supported(struct ixgbe_adapter *adapter, u16 device_id,
|
|
|
/* only support first port */
|
|
|
if (hw->bus.func != 0)
|
|
|
break;
|
|
|
+ /* fall through */
|
|
|
case IXGBE_SUBDEV_ID_82599_SP_560FLR:
|
|
|
case IXGBE_SUBDEV_ID_82599_SFP:
|
|
|
case IXGBE_SUBDEV_ID_82599_RNDC:
|
|
@@ -10191,7 +10197,11 @@ skip_sriov:
|
|
|
|
|
|
netdev->vlan_features |= netdev->features | NETIF_F_TSO_MANGLEID;
|
|
|
netdev->hw_enc_features |= netdev->vlan_features;
|
|
|
- netdev->mpls_features |= NETIF_F_HW_CSUM;
|
|
|
+ netdev->mpls_features |= NETIF_F_SG |
|
|
|
+ NETIF_F_TSO |
|
|
|
+ NETIF_F_TSO6 |
|
|
|
+ NETIF_F_HW_CSUM;
|
|
|
+ netdev->mpls_features |= IXGBE_GSO_PARTIAL_FEATURES;
|
|
|
|
|
|
/* set this bit last since it cannot be part of vlan_features */
|
|
|
netdev->features |= NETIF_F_HW_VLAN_CTAG_FILTER |
|
|
@@ -10275,6 +10285,10 @@ skip_sriov:
|
|
|
if (err)
|
|
|
goto err_sw_init;
|
|
|
|
|
|
+ for (i = 0; i < adapter->num_rx_queues; i++)
|
|
|
+ u64_stats_init(&adapter->rx_ring[i]->syncp);
|
|
|
+ for (i = 0; i < adapter->num_tx_queues; i++)
|
|
|
+ u64_stats_init(&adapter->tx_ring[i]->syncp);
|
|
|
for (i = 0; i < adapter->num_xdp_queues; i++)
|
|
|
u64_stats_init(&adapter->xdp_ring[i]->syncp);
|
|
|
|