net/mlx4_core: Reduce harmless SRIOV error message to debug level
authorJack Morgenstein <jackm@dev.mellanox.co.il>
Tue, 9 May 2017 11:45:24 +0000 (14:45 +0300)
committerDavid S. Miller <davem@davemloft.net>
Tue, 9 May 2017 15:22:46 +0000 (11:22 -0400)
Under SRIOV resource management, extra counters are allocated to VFs
from a free pool. If that pool is empty, the ALLOC_RES command for
a counter resource fails -- and this generates a misleading error
message in the message log.

Under SRIOV, each VF is allocated (i.e., guaranteed) 2 counters --
one counter per port. For ETH ports, the RoCE driver requests an
additional counter (above the guaranteed counters). If that request
fails, the VF RoCE driver simply uses the default (i.e., guaranteed)
counter for that port.

Thus, failing to allocate an additional counter does not constitute
a  problem, and the error message on the PF when this occurs should
be reduced to debug level.

Finally, to identify the situation that the reason for the failure is
that no resources are available to grant to the VF, we modified the
error returned by mlx4_grant_resource to -EDQUOT (Quota exceeded),
which more accurately describes the error.

Fixes: c3abb51bdb0e ("IB/mlx4: Add RoCE/IB dedicated counters")
Signed-off-by: Jack Morgenstein <jackm@dev.mellanox.co.il>
Signed-off-by: Tariq Toukan <tariqt@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/mellanox/mlx4/cmd.c
drivers/net/ethernet/mellanox/mlx4/resource_tracker.c

index 0e0fa70305659521ed50d1cf1bc40fd38aa3ad04..c1af47e45d3f23221f730f64375b9be771cef7c6 100644 (file)
@@ -1789,9 +1789,17 @@ static int mlx4_master_process_vhcr(struct mlx4_dev *dev, int slave,
        }
 
        if (err) {
-               if (!(dev->persist->state & MLX4_DEVICE_STATE_INTERNAL_ERROR))
-                       mlx4_warn(dev, "vhcr command:0x%x slave:%d failed with error:%d, status %d\n",
-                                 vhcr->op, slave, vhcr->errno, err);
+               if (!(dev->persist->state & MLX4_DEVICE_STATE_INTERNAL_ERROR)) {
+                       if (vhcr->op == MLX4_CMD_ALLOC_RES &&
+                           (vhcr->in_modifier & 0xff) == RES_COUNTER &&
+                           err == -EDQUOT)
+                               mlx4_dbg(dev,
+                                        "Unable to allocate counter for slave %d (%d)\n",
+                                        slave, err);
+                       else
+                               mlx4_warn(dev, "vhcr command:0x%x slave:%d failed with error:%d, status %d\n",
+                                         vhcr->op, slave, vhcr->errno, err);
+               }
                vhcr_cmd->status = mlx4_errno_to_status(err);
                goto out_status;
        }
index 4aa29ee930134cc41f54839f3e6c05a828f5e0f3..07516545474f3ac76e750aaa4af2532b6ac81207 100644 (file)
@@ -311,7 +311,7 @@ static inline int mlx4_grant_resource(struct mlx4_dev *dev, int slave,
        struct mlx4_priv *priv = mlx4_priv(dev);
        struct resource_allocator *res_alloc =
                &priv->mfunc.master.res_tracker.res_alloc[res_type];
-       int err = -EINVAL;
+       int err = -EDQUOT;
        int allocated, free, reserved, guaranteed, from_free;
        int from_rsvd;