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

marcelo.leitner
2020-04-03T02:48:42Z

On Fri, Apr 03, 2020 at 02:27:08AM +0000, Saeed Mahameed wrote:
> On Thu, 2020-04-02 at 21:11 -0300, Marcelo Ricardo Leitner wrote:
> > 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.
> >
>
> ++ mlnx TC stake holders
>
> The fact that for all of the suppressed messages we will still have NL
> extack reporting, makes it easier for me to agree with this patch. but
> there is a loss of information since now we will stop printing the
> attribute/params which caused the failure in most of the cases, and it
> will be harder for the user and the developer to understand why these
> attributes are not working ..

I see.

>
> I understand it is for debug only but i strongly suggest to not totally
> suppress these messages and maybe just move them to tracepoints buffer
> ? for those who would want to really debug ..
>
> we already have some tracepoints implemented for en_tc.c
> mlx5/core/diag/en_tc_tracepoints.c, maybe we should define a tracepoint
> for error reporting ..

That, or s/netdev_warn/netdev_dbg/, but both are more hidden to the
user than the _once.

>
> > Signed-off-by: Marcelo Ricardo Leitner <marcelo.leitner@gmail.com>
>
> net patches must have a "Fixes:" tag

I know that it is strongly recommended, but there is nothing really
broken here. It's a small cleanup to code already there. Now I'm
confused, isn't that what net is meant for, and a Fixes tag would be
an abuse of it here?

>
> > ---
> > .../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..1182fba3edbb8cf7bd59557b7ec
> > e18765c704186 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;
> > }
> >