sched: improve error log messages
Replace hard-coded numbers for reporting errors with error messages. Signed-off-by: Jasvinder Singh <jasvinder.singh@intel.com> Signed-off-by: Abraham Tovar <abrahamx.tovar@intel.com> Signed-off-by: Lukasz Krakowiak <lukaszx.krakowiak@intel.com>
This commit is contained in:
parent
db06a17ede
commit
3cd66f0093
@ -296,41 +296,66 @@ pipe_profile_check(struct rte_sched_pipe_params *params,
|
||||
uint32_t i;
|
||||
|
||||
/* Pipe parameters */
|
||||
if (params == NULL)
|
||||
return -10;
|
||||
if (params == NULL) {
|
||||
RTE_LOG(ERR, SCHED,
|
||||
"%s: Incorrect value for parameter params\n", __func__);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* TB rate: non-zero, not greater than port rate */
|
||||
if (params->tb_rate == 0 ||
|
||||
params->tb_rate > rate)
|
||||
return -11;
|
||||
params->tb_rate > rate) {
|
||||
RTE_LOG(ERR, SCHED,
|
||||
"%s: Incorrect value for tb rate\n", __func__);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* TB size: non-zero */
|
||||
if (params->tb_size == 0)
|
||||
return -12;
|
||||
if (params->tb_size == 0) {
|
||||
RTE_LOG(ERR, SCHED,
|
||||
"%s: Incorrect value for tb size\n", __func__);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* TC rate: non-zero if qsize non-zero, less than pipe rate */
|
||||
for (i = 0; i < RTE_SCHED_TRAFFIC_CLASSES_PER_PIPE; i++) {
|
||||
if ((qsize[i] == 0 && params->tc_rate[i] != 0) ||
|
||||
(qsize[i] != 0 && (params->tc_rate[i] == 0 ||
|
||||
params->tc_rate[i] > params->tb_rate)))
|
||||
return -13;
|
||||
params->tc_rate[i] > params->tb_rate))) {
|
||||
RTE_LOG(ERR, SCHED,
|
||||
"%s: Incorrect value for qsize or tc_rate\n", __func__);
|
||||
return -EINVAL;
|
||||
}
|
||||
}
|
||||
|
||||
if (params->tc_rate[RTE_SCHED_TRAFFIC_CLASS_BE] == 0 ||
|
||||
qsize[RTE_SCHED_TRAFFIC_CLASS_BE] == 0)
|
||||
return -13;
|
||||
qsize[RTE_SCHED_TRAFFIC_CLASS_BE] == 0) {
|
||||
RTE_LOG(ERR, SCHED,
|
||||
"%s: Incorrect value for be traffic class rate\n", __func__);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* TC period: non-zero */
|
||||
if (params->tc_period == 0)
|
||||
return -14;
|
||||
if (params->tc_period == 0) {
|
||||
RTE_LOG(ERR, SCHED,
|
||||
"%s: Incorrect value for tc period\n", __func__);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* Best effort tc oversubscription weight: non-zero */
|
||||
if (params->tc_ov_weight == 0)
|
||||
return -15;
|
||||
if (params->tc_ov_weight == 0) {
|
||||
RTE_LOG(ERR, SCHED,
|
||||
"%s: Incorrect value for tc ov weight\n", __func__);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* Queue WRR weights: non-zero */
|
||||
for (i = 0; i < RTE_SCHED_BE_QUEUES_PER_PIPE; i++) {
|
||||
if (params->wrr_weights[i] == 0)
|
||||
return -16;
|
||||
if (params->wrr_weights[i] == 0) {
|
||||
RTE_LOG(ERR, SCHED,
|
||||
"%s: Incorrect value for wrr weight\n", __func__);
|
||||
return -EINVAL;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
@ -341,56 +366,83 @@ rte_sched_port_check_params(struct rte_sched_port_params *params)
|
||||
{
|
||||
uint32_t i;
|
||||
|
||||
if (params == NULL)
|
||||
return -1;
|
||||
if (params == NULL) {
|
||||
RTE_LOG(ERR, SCHED,
|
||||
"%s: Incorrect value for parameter params\n", __func__);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* socket */
|
||||
if (params->socket < 0)
|
||||
return -3;
|
||||
if (params->socket < 0) {
|
||||
RTE_LOG(ERR, SCHED,
|
||||
"%s: Incorrect value for socket id\n", __func__);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* rate */
|
||||
if (params->rate == 0)
|
||||
return -4;
|
||||
if (params->rate == 0) {
|
||||
RTE_LOG(ERR, SCHED,
|
||||
"%s: Incorrect value for rate\n", __func__);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* mtu */
|
||||
if (params->mtu == 0)
|
||||
return -5;
|
||||
if (params->mtu == 0) {
|
||||
RTE_LOG(ERR, SCHED,
|
||||
"%s: Incorrect value for mtu\n", __func__);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* n_subports_per_port: non-zero, limited to 16 bits, power of 2 */
|
||||
if (params->n_subports_per_port == 0 ||
|
||||
params->n_subports_per_port > 1u << 16 ||
|
||||
!rte_is_power_of_2(params->n_subports_per_port))
|
||||
return -6;
|
||||
!rte_is_power_of_2(params->n_subports_per_port)) {
|
||||
RTE_LOG(ERR, SCHED,
|
||||
"%s: Incorrect value for number of subports\n", __func__);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* n_pipes_per_subport: non-zero, power of 2 */
|
||||
if (params->n_pipes_per_subport == 0 ||
|
||||
!rte_is_power_of_2(params->n_pipes_per_subport))
|
||||
return -7;
|
||||
!rte_is_power_of_2(params->n_pipes_per_subport)) {
|
||||
RTE_LOG(ERR, SCHED,
|
||||
"%s: Incorrect value for pipes number\n", __func__);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* qsize: non-zero, power of 2,
|
||||
/* qsize: if non-zero, power of 2,
|
||||
* no bigger than 32K (due to 16-bit read/write pointers)
|
||||
*/
|
||||
for (i = 0; i < RTE_SCHED_TRAFFIC_CLASSES_PER_PIPE; i++) {
|
||||
uint16_t qsize = params->qsize[i];
|
||||
|
||||
if ((qsize != 0 && !rte_is_power_of_2(qsize)) ||
|
||||
((i == RTE_SCHED_TRAFFIC_CLASS_BE) && (qsize == 0)))
|
||||
return -8;
|
||||
((i == RTE_SCHED_TRAFFIC_CLASS_BE) && (qsize == 0))) {
|
||||
RTE_LOG(ERR, SCHED,
|
||||
"%s: Incorrect value for tc rate\n", __func__);
|
||||
return -EINVAL;
|
||||
}
|
||||
}
|
||||
|
||||
/* pipe_profiles and n_pipe_profiles */
|
||||
if (params->pipe_profiles == NULL ||
|
||||
params->n_pipe_profiles == 0 ||
|
||||
params->n_pipe_profiles > params->n_max_pipe_profiles)
|
||||
return -9;
|
||||
params->n_pipe_profiles > params->n_max_pipe_profiles) {
|
||||
RTE_LOG(ERR, SCHED,
|
||||
"%s: Incorrect value for number of pipe profiles\n", __func__);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
for (i = 0; i < params->n_pipe_profiles; i++) {
|
||||
struct rte_sched_pipe_params *p = params->pipe_profiles + i;
|
||||
int status;
|
||||
|
||||
status = pipe_profile_check(p, params->rate, ¶ms->qsize[0]);
|
||||
if (status != 0)
|
||||
return status;
|
||||
if (status != 0) {
|
||||
RTE_LOG(ERR, SCHED,
|
||||
"%s: Pipe profile check failed(%d)\n", __func__, status);
|
||||
return -EINVAL;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
@ -853,16 +905,35 @@ rte_sched_subport_config(struct rte_sched_port *port,
|
||||
uint32_t i;
|
||||
|
||||
/* Check user parameters */
|
||||
if (port == NULL ||
|
||||
subport_id >= port->n_subports_per_port ||
|
||||
params == NULL)
|
||||
return -1;
|
||||
if (port == NULL) {
|
||||
RTE_LOG(ERR, SCHED,
|
||||
"%s: Incorrect value for parameter port\n", __func__);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (params->tb_rate == 0 || params->tb_rate > port->rate)
|
||||
return -2;
|
||||
if (subport_id >= port->n_subports_per_port) {
|
||||
RTE_LOG(ERR, SCHED,
|
||||
"%s: Incorrect value for subport id\n", __func__);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (params->tb_size == 0)
|
||||
return -3;
|
||||
if (params == NULL) {
|
||||
RTE_LOG(ERR, SCHED,
|
||||
"%s: Incorrect value for parameter params\n", __func__);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (params->tb_rate == 0 || params->tb_rate > port->rate) {
|
||||
RTE_LOG(ERR, SCHED,
|
||||
"%s: Incorrect value for tb rate\n", __func__);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (params->tb_size == 0) {
|
||||
RTE_LOG(ERR, SCHED,
|
||||
"%s: Incorrect value for tb size\n", __func__);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
for (i = 0; i < RTE_SCHED_TRAFFIC_CLASSES_PER_PIPE; i++) {
|
||||
uint32_t tc_rate = params->tc_rate[i];
|
||||
@ -870,16 +941,25 @@ rte_sched_subport_config(struct rte_sched_port *port,
|
||||
|
||||
if ((qsize == 0 && tc_rate != 0) ||
|
||||
(qsize != 0 && tc_rate == 0) ||
|
||||
(tc_rate > params->tb_rate))
|
||||
return -4;
|
||||
(tc_rate > params->tb_rate)) {
|
||||
RTE_LOG(ERR, SCHED,
|
||||
"%s: Incorrect value for tc rate\n", __func__);
|
||||
return -EINVAL;
|
||||
}
|
||||
}
|
||||
|
||||
if (port->qsize[RTE_SCHED_TRAFFIC_CLASS_BE] == 0 ||
|
||||
params->tc_rate[RTE_SCHED_TRAFFIC_CLASS_BE] == 0)
|
||||
return -4;
|
||||
params->tc_rate[RTE_SCHED_TRAFFIC_CLASS_BE] == 0) {
|
||||
RTE_LOG(ERR, SCHED,
|
||||
"%s: Incorrect value for tc rate(best effort)\n", __func__);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (params->tc_period == 0)
|
||||
return -5;
|
||||
if (params->tc_period == 0) {
|
||||
RTE_LOG(ERR, SCHED,
|
||||
"%s: Incorrect value for tc period\n", __func__);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
s = port->subport + subport_id;
|
||||
|
||||
@ -942,17 +1022,37 @@ rte_sched_pipe_config(struct rte_sched_port *port,
|
||||
profile = (uint32_t) pipe_profile;
|
||||
deactivate = (pipe_profile < 0);
|
||||
|
||||
if (port == NULL ||
|
||||
subport_id >= port->n_subports_per_port ||
|
||||
pipe_id >= port->n_pipes_per_subport ||
|
||||
(!deactivate && profile >= port->n_pipe_profiles))
|
||||
return -1;
|
||||
if (port == NULL) {
|
||||
RTE_LOG(ERR, SCHED,
|
||||
"%s: Incorrect value for parameter port\n", __func__);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (subport_id >= port->n_subports_per_port) {
|
||||
RTE_LOG(ERR, SCHED,
|
||||
"%s: Incorrect value for parameter subport id\n", __func__);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (pipe_id >= port->n_pipes_per_subport) {
|
||||
RTE_LOG(ERR, SCHED,
|
||||
"%s: Incorrect value for parameter pipe id\n", __func__);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (!deactivate && profile >= port->n_pipe_profiles) {
|
||||
RTE_LOG(ERR, SCHED,
|
||||
"%s: Incorrect value for parameter pipe profile\n", __func__);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* Check that subport configuration is valid */
|
||||
s = port->subport + subport_id;
|
||||
if (s->tb_period == 0)
|
||||
return -2;
|
||||
if (s->tb_period == 0) {
|
||||
RTE_LOG(ERR, SCHED,
|
||||
"%s: Subport configuration invalid\n", __func__);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
p = port->pipe + (subport_id * port->n_pipes_per_subport + pipe_id);
|
||||
|
||||
@ -1037,25 +1137,37 @@ rte_sched_port_pipe_profile_add(struct rte_sched_port *port,
|
||||
int status;
|
||||
|
||||
/* Port */
|
||||
if (port == NULL)
|
||||
return -1;
|
||||
if (port == NULL) {
|
||||
RTE_LOG(ERR, SCHED,
|
||||
"%s: Incorrect value for parameter port\n", __func__);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* Pipe profiles not exceeds the max limit */
|
||||
if (port->n_pipe_profiles >= port->n_max_pipe_profiles)
|
||||
return -2;
|
||||
if (port->n_pipe_profiles >= port->n_max_pipe_profiles) {
|
||||
RTE_LOG(ERR, SCHED,
|
||||
"%s: Number of pipe profiles exceeds the max limit\n", __func__);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* Pipe params */
|
||||
status = pipe_profile_check(params, port->rate, &port->qsize[0]);
|
||||
if (status != 0)
|
||||
return status;
|
||||
if (status != 0) {
|
||||
RTE_LOG(ERR, SCHED,
|
||||
"%s: Pipe profile check failed(%d)\n", __func__, status);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
pp = &port->pipe_profiles[port->n_pipe_profiles];
|
||||
rte_sched_pipe_profile_convert(port, params, pp, port->rate);
|
||||
|
||||
/* Pipe profile not exists */
|
||||
for (i = 0; i < port->n_pipe_profiles; i++)
|
||||
if (memcmp(port->pipe_profiles + i, pp, sizeof(*pp)) == 0)
|
||||
return -3;
|
||||
if (memcmp(port->pipe_profiles + i, pp, sizeof(*pp)) == 0) {
|
||||
RTE_LOG(ERR, SCHED,
|
||||
"%s: Pipe profile doesn't exist\n", __func__);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* Pipe profile commit */
|
||||
*pipe_profile_id = port->n_pipe_profiles;
|
||||
@ -1125,9 +1237,29 @@ rte_sched_subport_read_stats(struct rte_sched_port *port,
|
||||
struct rte_sched_subport *s;
|
||||
|
||||
/* Check user parameters */
|
||||
if (port == NULL || subport_id >= port->n_subports_per_port ||
|
||||
stats == NULL || tc_ov == NULL)
|
||||
return -1;
|
||||
if (port == NULL) {
|
||||
RTE_LOG(ERR, SCHED,
|
||||
"%s: Incorrect value for parameter port\n", __func__);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (subport_id >= port->n_subports_per_port) {
|
||||
RTE_LOG(ERR, SCHED,
|
||||
"%s: Incorrect value for subport id\n", __func__);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (stats == NULL) {
|
||||
RTE_LOG(ERR, SCHED,
|
||||
"%s: Incorrect value for parameter stats\n", __func__);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (tc_ov == NULL) {
|
||||
RTE_LOG(ERR, SCHED,
|
||||
"%s: Incorrect value for tc_ov\n", __func__);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
s = port->subport + subport_id;
|
||||
|
||||
@ -1151,11 +1283,28 @@ rte_sched_queue_read_stats(struct rte_sched_port *port,
|
||||
struct rte_sched_queue_extra *qe;
|
||||
|
||||
/* Check user parameters */
|
||||
if ((port == NULL) ||
|
||||
(queue_id >= rte_sched_port_queues_per_port(port)) ||
|
||||
(stats == NULL) ||
|
||||
(qlen == NULL)) {
|
||||
return -1;
|
||||
if (port == NULL) {
|
||||
RTE_LOG(ERR, SCHED,
|
||||
"%s: Incorrect value for parameter port\n", __func__);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (queue_id >= rte_sched_port_queues_per_port(port)) {
|
||||
RTE_LOG(ERR, SCHED,
|
||||
"%s: Incorrect value for queue id\n", __func__);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (stats == NULL) {
|
||||
RTE_LOG(ERR, SCHED,
|
||||
"%s: Incorrect value for parameter stats\n", __func__);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (qlen == NULL) {
|
||||
RTE_LOG(ERR, SCHED,
|
||||
"%s: Incorrect value for parameter qlen\n", __func__);
|
||||
return -EINVAL;
|
||||
}
|
||||
q = port->queue + queue_id;
|
||||
qe = port->queue_extra + queue_id;
|
||||
|
Loading…
x
Reference in New Issue
Block a user