Commit cae5f48e authored by Jakub Kicinski's avatar Jakub Kicinski Committed by David S. Miller

nfp: abm: don't set negative threshold

Turns out the threshold value is used in signed compares in the FW,
so we should avoid setting the top bit.
Signed-off-by: default avatarJakub Kicinski <jakub.kicinski@netronome.com>
Reviewed-by: default avatarJohn Hurley <john.hurley@netronome.com>
Reviewed-by: default avatarQuentin Monnet <quentin.monnet@netronome.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 032748ac
...@@ -4,9 +4,12 @@ ...@@ -4,9 +4,12 @@
#ifndef __NFP_ABM_H__ #ifndef __NFP_ABM_H__
#define __NFP_ABM_H__ 1 #define __NFP_ABM_H__ 1
#include <linux/bits.h>
#include <net/devlink.h> #include <net/devlink.h>
#include <net/pkt_cls.h> #include <net/pkt_cls.h>
#define NFP_ABM_LVL_INFINITY S32_MAX
struct nfp_app; struct nfp_app;
struct nfp_net; struct nfp_net;
......
...@@ -31,7 +31,7 @@ static void ...@@ -31,7 +31,7 @@ static void
nfp_abm_reset_root(struct net_device *netdev, struct nfp_abm_link *alink, nfp_abm_reset_root(struct net_device *netdev, struct nfp_abm_link *alink,
u32 handle, unsigned int qs) u32 handle, unsigned int qs)
{ {
__nfp_abm_reset_root(netdev, alink, handle, qs, ~0); __nfp_abm_reset_root(netdev, alink, handle, qs, NFP_ABM_LVL_INFINITY);
} }
static int static int
...@@ -67,7 +67,7 @@ nfp_abm_red_destroy(struct net_device *netdev, struct nfp_abm_link *alink, ...@@ -67,7 +67,7 @@ nfp_abm_red_destroy(struct net_device *netdev, struct nfp_abm_link *alink,
if (alink->parent == TC_H_ROOT) { if (alink->parent == TC_H_ROOT) {
nfp_abm_reset_root(netdev, alink, TC_H_ROOT, 0); nfp_abm_reset_root(netdev, alink, TC_H_ROOT, 0);
} else { } else {
nfp_abm_ctrl_set_q_lvl(alink, i, ~0); nfp_abm_ctrl_set_q_lvl(alink, i, NFP_ABM_LVL_INFINITY);
memset(&alink->qdiscs[i], 0, sizeof(*alink->qdiscs)); memset(&alink->qdiscs[i], 0, sizeof(*alink->qdiscs));
} }
} }
...@@ -88,6 +88,12 @@ nfp_abm_red_check_params(struct nfp_abm_link *alink, ...@@ -88,6 +88,12 @@ nfp_abm_red_check_params(struct nfp_abm_link *alink,
opt->parent, opt->handle); opt->parent, opt->handle);
return false; return false;
} }
if (opt->set.min > NFP_ABM_LVL_INFINITY) {
nfp_warn(cpp, "RED offload failed - threshold too large %d > %d (p:%08x h:%08x)\n",
opt->set.min, NFP_ABM_LVL_INFINITY, opt->parent,
opt->handle);
return false;
}
return true; return true;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment