[PATCH net] net/mlx5e: limit log messages due to (ovs) probing to _once

Marcelo Ricardo Leitner
2020-04-03T00:12:41Z

OVS will keep adding such flows, no matter what. They will usually be
handled by tc software (or ovs datapath, if skip_sw is used). But the
driver is logging these messages for each and every attempt, despite the
extack. Note that they weren't rate limited, and a broadcast storm could
trigger system console flooding.

Switch these to be _once. It's enough to tell the sysadmin what is
happenning, and if anything, the OVS log will have all the errors.

Signed-off-by: Marcelo Ricardo Leitner <marcelo.leitner@gmail.com>
---
.../net/ethernet/mellanox/mlx5/core/en_tc.c | 61 ++++++++++---------
1 file changed, 32 insertions(+), 29 deletions(-)

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c b/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c
index 438128dde187d7ec58892c2879c6037f807f576f..1182fba3edbb8cf7bd59557b7ece18765c704186 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c
@@ -1828,8 +1828,8 @@ enc_opts_is_dont_care_or_full_match(struct mlx5e_priv *priv,
opt->length * 4)) {
NL_SET_ERR_MSG(extack,
"Partial match of tunnel options in chain > 0 isn't supported");
- netdev_warn(priv->netdev,
- "Partial match of tunnel options in chain > 0 isn't supported");
+ netdev_warn_once(priv->netdev,
+ "Partial match of tunnel options in chain > 0 isn't supported");
return -EOPNOTSUPP;
}
}
@@ -1988,8 +1988,8 @@ static int parse_tunnel_attr(struct mlx5e_priv *priv,
!mlx5_eswitch_reg_c1_loopback_enabled(esw)) {
NL_SET_ERR_MSG(extack,
"Chains on tunnel devices isn't supported without register loopback support");
- netdev_warn(priv->netdev,
- "Chains on tunnel devices isn't supported without register loopback support");
+ netdev_warn_once(priv->netdev,
+ "Chains on tunnel devices isn't supported without register loopback support");
return -EOPNOTSUPP;
}

@@ -2133,8 +2133,8 @@ static int __parse_cls_flower(struct mlx5e_priv *priv,
BIT(FLOW_DISSECTOR_KEY_ENC_IP) |
BIT(FLOW_DISSECTOR_KEY_ENC_OPTS))) {
NL_SET_ERR_MSG_MOD(extack, "Unsupported key");
- netdev_warn(priv->netdev, "Unsupported key used: 0x%x\n",
- dissector->used_keys);
+ netdev_warn_once(priv->netdev, "Unsupported key used: 0x%x\n",
+ dissector->used_keys);
return -EOPNOTSUPP;
}

@@ -2484,8 +2484,8 @@ static int parse_cls_flower(struct mlx5e_priv *priv,
esw->offloads.inline_mode < non_tunnel_match_level)) {
NL_SET_ERR_MSG_MOD(extack,
"Flow is not offloaded due to min inline setting");
- netdev_warn(priv->netdev,
- "Flow is not offloaded due to min inline setting, required %d actual %d\n",
+ netdev_warn_once(priv->netdev,
+ "Flow is not offloaded due to min inline setting, required %d actual %d\n",
non_tunnel_match_level, esw->offloads.inline_mode);
return -EOPNOTSUPP;
}
@@ -2885,7 +2885,9 @@ static int alloc_tc_pedit_action(struct mlx5e_priv *priv, int namespace,
if (memcmp(cmd_masks, &zero_masks, sizeof(zero_masks))) {
NL_SET_ERR_MSG_MOD(extack,
"attempt to offload an unsupported field");
- netdev_warn(priv->netdev, "attempt to offload an unsupported field (cmd %d)\n", cmd);
+ netdev_warn_once(priv->netdev,
+ "attempt to offload an unsupported field (cmd %d)\n",
+ cmd);
print_hex_dump(KERN_WARNING, "mask: ", DUMP_PREFIX_ADDRESS,
16, 1, cmd_masks, sizeof(zero_masks), true);
err = -EOPNOTSUPP;
@@ -2912,17 +2914,17 @@ static bool csum_offload_supported(struct mlx5e_priv *priv,
if (!(action & MLX5_FLOW_CONTEXT_ACTION_MOD_HDR)) {
NL_SET_ERR_MSG_MOD(extack,
"TC csum action is only offloaded with pedit");
- netdev_warn(priv->netdev,
- "TC csum action is only offloaded with pedit\n");
+ netdev_warn_once(priv->netdev,
+ "TC csum action is only offloaded with pedit\n");
return false;
}

if (update_flags & ~prot_flags) {
NL_SET_ERR_MSG_MOD(extack,
"can't offload TC csum action for some header/s");
- netdev_warn(priv->netdev,
- "can't offload TC csum action for some header/s - flags %#x\n",
- update_flags);
+ netdev_warn_once(priv->netdev,
+ "can't offload TC csum action for some header/s - flags %#x\n",
+ update_flags);
return false;
}

@@ -3224,8 +3226,9 @@ static int parse_tc_nic_actions(struct mlx5e_priv *priv,
} else {
NL_SET_ERR_MSG_MOD(extack,
"device is not on same HW, can't offload");
- netdev_warn(priv->netdev, "device %s not on same HW, can't offload\n",
- peer_dev->name);
+ netdev_warn_once(priv->netdev,
+ "device %s not on same HW, can't offload\n",
+ peer_dev->name);
return -EINVAL;
}
}
@@ -3754,9 +3757,9 @@ static int parse_tc_fdb_actions(struct mlx5e_priv *priv,
if (attr->out_count >= MLX5_MAX_FLOW_FWD_VPORTS) {
NL_SET_ERR_MSG_MOD(extack,
"can't support more output ports, can't offload forwarding");
- netdev_warn(priv->netdev,
- "can't support more than %d output ports, can't offload forwarding\n",
- attr->out_count);
+ netdev_warn_once(priv->netdev,
+ "can't support more than %d output ports, can't offload forwarding\n",
+ attr->out_count);
return -EOPNOTSUPP;
}

@@ -3821,10 +3824,10 @@ static int parse_tc_fdb_actions(struct mlx5e_priv *priv,
if (!mlx5e_is_valid_eswitch_fwd_dev(priv, out_dev)) {
NL_SET_ERR_MSG_MOD(extack,
"devices are not on same switch HW, can't offload forwarding");
- netdev_warn(priv->netdev,
- "devices %s %s not on same switch HW, can't offload forwarding\n",
- priv->netdev->name,
- out_dev->name);
+ netdev_warn_once(priv->netdev,
+ "devices %s %s not on same switch HW, can't offload forwarding\n",
+ priv->netdev->name,
+ out_dev->name);
return -EOPNOTSUPP;
}

@@ -3843,10 +3846,10 @@ static int parse_tc_fdb_actions(struct mlx5e_priv *priv,
} else {
NL_SET_ERR_MSG_MOD(extack,
"devices are not on same switch HW, can't offload forwarding");
- netdev_warn(priv->netdev,
- "devices %s %s not on same switch HW, can't offload forwarding\n",
- priv->netdev->name,
- out_dev->name);
+ netdev_warn_once(priv->netdev,
+ "devices %s %s not on same switch HW, can't offload forwarding\n",
+ priv->netdev->name,
+ out_dev->name);
return -EINVAL;
}
}
@@ -3959,8 +3962,8 @@ static int parse_tc_fdb_actions(struct mlx5e_priv *priv,

NL_SET_ERR_MSG(extack,
"Decap with goto isn't supported");
- netdev_warn(priv->netdev,
- "Decap with goto isn't supported");
+ netdev_warn_once(priv->netdev,
+ "Decap with goto isn't supported");
return -EOPNOTSUPP;
}

--
2.25.1