|
|
@@ -2281,8 +2281,16 @@ static void mlx4_en_add_vxlan_offloads(struct work_struct *work)
|
|
|
ret = mlx4_SET_PORT_VXLAN(priv->mdev->dev, priv->port,
|
|
|
VXLAN_STEER_BY_OUTER_MAC, 1);
|
|
|
out:
|
|
|
- if (ret)
|
|
|
+ if (ret) {
|
|
|
en_err(priv, "failed setting L2 tunnel configuration ret %d\n", ret);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ /* set offloads */
|
|
|
+ priv->dev->hw_enc_features |= NETIF_F_IP_CSUM | NETIF_F_RXCSUM |
|
|
|
+ NETIF_F_TSO | NETIF_F_GSO_UDP_TUNNEL;
|
|
|
+ priv->dev->hw_features |= NETIF_F_GSO_UDP_TUNNEL;
|
|
|
+ priv->dev->features |= NETIF_F_GSO_UDP_TUNNEL;
|
|
|
}
|
|
|
|
|
|
static void mlx4_en_del_vxlan_offloads(struct work_struct *work)
|
|
|
@@ -2290,6 +2298,11 @@ static void mlx4_en_del_vxlan_offloads(struct work_struct *work)
|
|
|
int ret;
|
|
|
struct mlx4_en_priv *priv = container_of(work, struct mlx4_en_priv,
|
|
|
vxlan_del_task);
|
|
|
+ /* unset offloads */
|
|
|
+ priv->dev->hw_enc_features &= ~(NETIF_F_IP_CSUM | NETIF_F_RXCSUM |
|
|
|
+ NETIF_F_TSO | NETIF_F_GSO_UDP_TUNNEL);
|
|
|
+ priv->dev->hw_features &= ~NETIF_F_GSO_UDP_TUNNEL;
|
|
|
+ priv->dev->features &= ~NETIF_F_GSO_UDP_TUNNEL;
|
|
|
|
|
|
ret = mlx4_SET_PORT_VXLAN(priv->mdev->dev, priv->port,
|
|
|
VXLAN_STEER_BY_OUTER_MAC, 0);
|
|
|
@@ -2568,13 +2581,6 @@ int mlx4_en_init_netdev(struct mlx4_en_dev *mdev, int port,
|
|
|
if (mdev->dev->caps.steering_mode != MLX4_STEERING_MODE_A0)
|
|
|
dev->priv_flags |= IFF_UNICAST_FLT;
|
|
|
|
|
|
- if (mdev->dev->caps.tunnel_offload_mode == MLX4_TUNNEL_OFFLOAD_MODE_VXLAN) {
|
|
|
- dev->hw_enc_features |= NETIF_F_IP_CSUM | NETIF_F_RXCSUM |
|
|
|
- NETIF_F_TSO | NETIF_F_GSO_UDP_TUNNEL;
|
|
|
- dev->hw_features |= NETIF_F_GSO_UDP_TUNNEL;
|
|
|
- dev->features |= NETIF_F_GSO_UDP_TUNNEL;
|
|
|
- }
|
|
|
-
|
|
|
mdev->pndev[port] = dev;
|
|
|
|
|
|
netif_carrier_off(dev);
|