net/mlx5e: Move the LRO-XSK check to mlx5e_fix_features
authorMaxim Mikityanskiy <maximmi@nvidia.com>
Tue, 12 Apr 2022 18:52:04 +0000 (21:52 +0300)
committerSaeed Mahameed <saeedm@nvidia.com>
Wed, 13 Jul 2022 22:56:48 +0000 (15:56 -0700)
LRO is mutually exclusive with XSK. When LRO is enabled, it checks
whether XSK is active. This commit moves this check to a more correct
place at mlx5e_fix_features.

Signed-off-by: Maxim Mikityanskiy <maximmi@nvidia.com>
Reviewed-by: Tariq Toukan <tariqt@nvidia.com>
Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
drivers/net/ethernet/mellanox/mlx5/core/en_main.c

index 087952b84ccb0970c70447c09e75c8011b6135e0..be84f800e122139f20bd04bef60aee6d0d368cce 100644 (file)
@@ -3594,13 +3594,6 @@ static int set_feature_lro(struct net_device *netdev, bool enable)
 
        mutex_lock(&priv->state_lock);
 
-       if (enable && priv->xsk.refcnt) {
-               netdev_warn(netdev, "LRO is incompatible with AF_XDP (%u XSKs are active)\n",
-                           priv->xsk.refcnt);
-               err = -EINVAL;
-               goto out;
-       }
-
        cur_params = &priv->channels.params;
        if (enable && !MLX5E_GET_PFLAG(cur_params, MLX5E_PFLAG_RX_STRIDING_RQ)) {
                netdev_warn(netdev, "can't set LRO with legacy RQ\n");
@@ -3916,6 +3909,11 @@ static netdev_features_t mlx5e_fix_features(struct net_device *netdev,
        }
 
        if (priv->xsk.refcnt) {
+               if (features & NETIF_F_LRO) {
+                       netdev_warn(netdev, "LRO is incompatible with AF_XDP (%u XSKs are active)\n",
+                                   priv->xsk.refcnt);
+                       features &= ~NETIF_F_LRO;
+               }
                if (features & NETIF_F_GRO_HW) {
                        netdev_warn(netdev, "HW GRO is incompatible with AF_XDP (%u XSKs are active)\n",
                                    priv->xsk.refcnt);