mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-28 11:18:45 +07:00
nfp: abm: pass band parameter to functions
In preparation for per-band RED offload pass band parameter to functions. For now it will always be 0. Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com> Reviewed-by: John Hurley <john.hurley@netronome.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
3a44820591
commit
5720769609
@ -30,23 +30,25 @@
|
||||
|
||||
static int
|
||||
nfp_abm_ctrl_stat(struct nfp_abm_link *alink, const struct nfp_rtsym *sym,
|
||||
unsigned int stride, unsigned int offset, unsigned int i,
|
||||
bool is_u64, u64 *res)
|
||||
unsigned int stride, unsigned int offset, unsigned int band,
|
||||
unsigned int queue, bool is_u64, u64 *res)
|
||||
{
|
||||
struct nfp_cpp *cpp = alink->abm->app->cpp;
|
||||
u64 val, sym_offset;
|
||||
unsigned int qid;
|
||||
u32 val32;
|
||||
int err;
|
||||
|
||||
sym_offset = (alink->queue_base + i) * stride + offset;
|
||||
qid = band * NFP_NET_MAX_RX_RINGS + alink->queue_base + queue;
|
||||
|
||||
sym_offset = qid * stride + offset;
|
||||
if (is_u64)
|
||||
err = __nfp_rtsym_readq(cpp, sym, 3, 0, sym_offset, &val);
|
||||
else
|
||||
err = __nfp_rtsym_readl(cpp, sym, 3, 0, sym_offset, &val32);
|
||||
if (err) {
|
||||
nfp_err(cpp,
|
||||
"RED offload reading stat failed on vNIC %d queue %d\n",
|
||||
alink->id, i);
|
||||
nfp_err(cpp, "RED offload reading stat failed on vNIC %d band %d queue %d (+ %d)\n",
|
||||
alink->id, band, queue, alink->queue_base);
|
||||
return err;
|
||||
}
|
||||
|
||||
@ -77,12 +79,12 @@ int __nfp_abm_ctrl_set_q_lvl(struct nfp_abm *abm, unsigned int id, u32 val)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int nfp_abm_ctrl_set_q_lvl(struct nfp_abm_link *alink, unsigned int queue,
|
||||
u32 val)
|
||||
int nfp_abm_ctrl_set_q_lvl(struct nfp_abm_link *alink, unsigned int band,
|
||||
unsigned int queue, u32 val)
|
||||
{
|
||||
unsigned int threshold;
|
||||
|
||||
threshold = alink->queue_base + queue;
|
||||
threshold = band * NFP_NET_MAX_RX_RINGS + alink->queue_base + queue;
|
||||
|
||||
return __nfp_abm_ctrl_set_q_lvl(alink->abm, threshold, val);
|
||||
}
|
||||
@ -92,7 +94,7 @@ u64 nfp_abm_ctrl_stat_non_sto(struct nfp_abm_link *alink, unsigned int i)
|
||||
u64 val;
|
||||
|
||||
if (nfp_abm_ctrl_stat(alink, alink->abm->qm_stats, NFP_QMSTAT_STRIDE,
|
||||
NFP_QMSTAT_NON_STO, i, true, &val))
|
||||
NFP_QMSTAT_NON_STO, 0, i, true, &val))
|
||||
return 0;
|
||||
return val;
|
||||
}
|
||||
@ -102,56 +104,58 @@ u64 nfp_abm_ctrl_stat_sto(struct nfp_abm_link *alink, unsigned int i)
|
||||
u64 val;
|
||||
|
||||
if (nfp_abm_ctrl_stat(alink, alink->abm->qm_stats, NFP_QMSTAT_STRIDE,
|
||||
NFP_QMSTAT_STO, i, true, &val))
|
||||
NFP_QMSTAT_STO, 0, i, true, &val))
|
||||
return 0;
|
||||
return val;
|
||||
}
|
||||
|
||||
int nfp_abm_ctrl_read_q_stats(struct nfp_abm_link *alink, unsigned int i,
|
||||
struct nfp_alink_stats *stats)
|
||||
int nfp_abm_ctrl_read_q_stats(struct nfp_abm_link *alink, unsigned int band,
|
||||
unsigned int queue, struct nfp_alink_stats *stats)
|
||||
{
|
||||
int err;
|
||||
|
||||
stats->tx_pkts = nn_readq(alink->vnic, NFP_NET_CFG_RXR_STATS(i));
|
||||
stats->tx_bytes = nn_readq(alink->vnic, NFP_NET_CFG_RXR_STATS(i) + 8);
|
||||
stats->tx_pkts += nn_readq(alink->vnic, NFP_NET_CFG_RXR_STATS(queue));
|
||||
stats->tx_bytes += nn_readq(alink->vnic,
|
||||
NFP_NET_CFG_RXR_STATS(queue) + 8);
|
||||
|
||||
err = nfp_abm_ctrl_stat(alink, alink->abm->q_lvls,
|
||||
NFP_QLVL_STRIDE, NFP_QLVL_BLOG_BYTES,
|
||||
i, false, &stats->backlog_bytes);
|
||||
err = nfp_abm_ctrl_stat(alink, alink->abm->q_lvls, NFP_QLVL_STRIDE,
|
||||
NFP_QLVL_BLOG_BYTES, band, queue, false,
|
||||
&stats->backlog_bytes);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
err = nfp_abm_ctrl_stat(alink, alink->abm->q_lvls,
|
||||
NFP_QLVL_STRIDE, NFP_QLVL_BLOG_PKTS,
|
||||
i, false, &stats->backlog_pkts);
|
||||
band, queue, false, &stats->backlog_pkts);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
err = nfp_abm_ctrl_stat(alink, alink->abm->qm_stats,
|
||||
NFP_QMSTAT_STRIDE, NFP_QMSTAT_DROP,
|
||||
i, true, &stats->drops);
|
||||
band, queue, true, &stats->drops);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
return nfp_abm_ctrl_stat(alink, alink->abm->qm_stats,
|
||||
NFP_QMSTAT_STRIDE, NFP_QMSTAT_ECN,
|
||||
i, true, &stats->overlimits);
|
||||
band, queue, true, &stats->overlimits);
|
||||
}
|
||||
|
||||
int nfp_abm_ctrl_read_q_xstats(struct nfp_abm_link *alink, unsigned int i,
|
||||
int nfp_abm_ctrl_read_q_xstats(struct nfp_abm_link *alink,
|
||||
unsigned int band, unsigned int queue,
|
||||
struct nfp_alink_xstats *xstats)
|
||||
{
|
||||
int err;
|
||||
|
||||
err = nfp_abm_ctrl_stat(alink, alink->abm->qm_stats,
|
||||
NFP_QMSTAT_STRIDE, NFP_QMSTAT_DROP,
|
||||
i, true, &xstats->pdrop);
|
||||
band, queue, true, &xstats->pdrop);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
return nfp_abm_ctrl_stat(alink, alink->abm->qm_stats,
|
||||
NFP_QMSTAT_STRIDE, NFP_QMSTAT_ECN,
|
||||
i, true, &xstats->ecn_marked);
|
||||
band, queue, true, &xstats->ecn_marked);
|
||||
}
|
||||
|
||||
int nfp_abm_ctrl_qm_enable(struct nfp_abm *abm)
|
||||
|
@ -188,11 +188,13 @@ int nfp_abm_setup_tc_mq(struct net_device *netdev, struct nfp_abm_link *alink,
|
||||
void nfp_abm_ctrl_read_params(struct nfp_abm_link *alink);
|
||||
int nfp_abm_ctrl_find_addrs(struct nfp_abm *abm);
|
||||
int __nfp_abm_ctrl_set_q_lvl(struct nfp_abm *abm, unsigned int id, u32 val);
|
||||
int nfp_abm_ctrl_set_q_lvl(struct nfp_abm_link *alink, unsigned int queue,
|
||||
u32 val);
|
||||
int nfp_abm_ctrl_read_q_stats(struct nfp_abm_link *alink, unsigned int i,
|
||||
int nfp_abm_ctrl_set_q_lvl(struct nfp_abm_link *alink, unsigned int band,
|
||||
unsigned int queue, u32 val);
|
||||
int nfp_abm_ctrl_read_q_stats(struct nfp_abm_link *alink,
|
||||
unsigned int band, unsigned int queue,
|
||||
struct nfp_alink_stats *stats);
|
||||
int nfp_abm_ctrl_read_q_xstats(struct nfp_abm_link *alink, unsigned int i,
|
||||
int nfp_abm_ctrl_read_q_xstats(struct nfp_abm_link *alink,
|
||||
unsigned int band, unsigned int queue,
|
||||
struct nfp_alink_xstats *xstats);
|
||||
u64 nfp_abm_ctrl_stat_non_sto(struct nfp_abm_link *alink, unsigned int i);
|
||||
u64 nfp_abm_ctrl_stat_sto(struct nfp_abm_link *alink, unsigned int i);
|
||||
|
@ -51,15 +51,15 @@ nfp_abm_stats_update_red(struct nfp_abm_link *alink, struct nfp_qdisc *qdisc,
|
||||
if (!qdisc->offloaded)
|
||||
return;
|
||||
|
||||
err = nfp_abm_ctrl_read_q_stats(alink, queue, &qdisc->red.stats);
|
||||
err = nfp_abm_ctrl_read_q_stats(alink, 0, queue, &qdisc->red.stats);
|
||||
if (err)
|
||||
nfp_err(cpp, "RED stats (%d) read failed with error %d\n",
|
||||
queue, err);
|
||||
nfp_err(cpp, "RED stats (%d, %d) read failed with error %d\n",
|
||||
0, queue, err);
|
||||
|
||||
err = nfp_abm_ctrl_read_q_xstats(alink, queue, &qdisc->red.xstats);
|
||||
err = nfp_abm_ctrl_read_q_xstats(alink, 0, queue, &qdisc->red.xstats);
|
||||
if (err)
|
||||
nfp_err(cpp, "RED xstats (%d) read failed with error %d\n",
|
||||
queue, err);
|
||||
nfp_err(cpp, "RED xstats (%d, %d) read failed with error %d\n",
|
||||
0, queue, err);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -126,7 +126,7 @@ nfp_abm_qdisc_offload_stop(struct nfp_abm_link *alink, struct nfp_qdisc *qdisc)
|
||||
}
|
||||
|
||||
static int
|
||||
__nfp_abm_stats_init(struct nfp_abm_link *alink,
|
||||
__nfp_abm_stats_init(struct nfp_abm_link *alink, unsigned int band,
|
||||
unsigned int queue, struct nfp_alink_stats *prev_stats,
|
||||
struct nfp_alink_xstats *prev_xstats)
|
||||
{
|
||||
@ -139,19 +139,19 @@ __nfp_abm_stats_init(struct nfp_abm_link *alink,
|
||||
backlog_pkts = prev_stats->backlog_pkts;
|
||||
backlog_bytes = prev_stats->backlog_bytes;
|
||||
|
||||
err = nfp_abm_ctrl_read_q_stats(alink, queue, prev_stats);
|
||||
err = nfp_abm_ctrl_read_q_stats(alink, band, queue, prev_stats);
|
||||
if (err) {
|
||||
nfp_err(alink->abm->app->cpp,
|
||||
"RED stats init (%d) failed with error %d\n",
|
||||
queue, err);
|
||||
"RED stats init (%d, %d) failed with error %d\n",
|
||||
band, queue, err);
|
||||
return err;
|
||||
}
|
||||
|
||||
err = nfp_abm_ctrl_read_q_xstats(alink, queue, prev_xstats);
|
||||
err = nfp_abm_ctrl_read_q_xstats(alink, band, queue, prev_xstats);
|
||||
if (err) {
|
||||
nfp_err(alink->abm->app->cpp,
|
||||
"RED xstats init (%d) failed with error %d\n",
|
||||
queue, err);
|
||||
"RED xstats init (%d, %d) failed with error %d\n",
|
||||
band, queue, err);
|
||||
return err;
|
||||
}
|
||||
|
||||
@ -164,7 +164,7 @@ static int
|
||||
nfp_abm_stats_init(struct nfp_abm_link *alink, struct nfp_qdisc *qdisc,
|
||||
unsigned int queue)
|
||||
{
|
||||
return __nfp_abm_stats_init(alink, queue,
|
||||
return __nfp_abm_stats_init(alink, 0, queue,
|
||||
&qdisc->red.prev_stats,
|
||||
&qdisc->red.prev_xstats);
|
||||
}
|
||||
@ -186,7 +186,7 @@ nfp_abm_offload_compile_red(struct nfp_abm_link *alink, struct nfp_qdisc *qdisc,
|
||||
if (!qdisc->offload_mark)
|
||||
return;
|
||||
|
||||
nfp_abm_ctrl_set_q_lvl(alink, queue, qdisc->red.threshold);
|
||||
nfp_abm_ctrl_set_q_lvl(alink, 0, queue, qdisc->red.threshold);
|
||||
}
|
||||
|
||||
static void
|
||||
|
Loading…
Reference in New Issue
Block a user