Skip to content

Commit

Permalink
net/mvpp2: fix configured state dependency
Browse files Browse the repository at this point in the history
[ upstream commit e622c1a ]

Need to set configure flag to allow create and commit mrvl tm
hierarchy tree. tm configuration depends on parameters that are
being set in port configure stage, e.g. nb_tx_queues.
This also aligned with the tm api description.

Fixes: 429c394 ("net/mvpp2: support traffic manager")

Signed-off-by: Dana Vardi <danat@marvell.com>
Reviewed-by: Liron Himi <lironh@marvell.com>
  • Loading branch information
Dana Vardi authored and bluca committed Jul 26, 2021
1 parent 9c8609a commit 6595f06
Show file tree
Hide file tree
Showing 3 changed files with 76 additions and 4 deletions.
12 changes: 9 additions & 3 deletions drivers/net/mvpp2/mrvl_ethdev.c
Expand Up @@ -398,12 +398,18 @@ mrvl_dev_configure(struct rte_eth_dev *dev)
dev->data->dev_conf.rxmode.mq_mode == ETH_MQ_RX_RSS) {
MRVL_LOG(WARNING, "Disabling hash for 1 rx queue");
priv->ppio_params.inqs_params.hash_type = PP2_PPIO_HASH_T_NONE;

priv->configured = 1;
return 0;
}

return mrvl_configure_rss(priv,
&dev->data->dev_conf.rx_adv_conf.rss_conf);
ret = mrvl_configure_rss(priv,
&dev->data->dev_conf.rx_adv_conf.rss_conf);
if (ret < 0)
return ret;

priv->configured = 1;

return 0;
}

/**
Expand Down
3 changes: 2 additions & 1 deletion drivers/net/mvpp2/mrvl_ethdev.h
Expand Up @@ -208,9 +208,10 @@ struct mrvl_priv {
LIST_HEAD(shaper_profiles, mrvl_tm_shaper_profile) shaper_profiles;
LIST_HEAD(nodes, mrvl_tm_node) nodes;
uint64_t rate_max;

uint8_t configured; /** indicates if device has been configured */
};

/** Flow operations forward declaration. */
extern const struct rte_flow_ops mrvl_flow_ops;

/** Meter operations forward declaration. */
Expand Down
65 changes: 65 additions & 0 deletions drivers/net/mvpp2/mrvl_tm.c
Expand Up @@ -146,6 +146,11 @@ mrvl_node_type_get(struct rte_eth_dev *dev, uint32_t node_id, int *is_leaf,
struct mrvl_priv *priv = dev->data->dev_private;
struct mrvl_tm_node *node;

if (!priv->configured)
return -rte_tm_error_set(error, ENODEV,
RTE_TM_ERROR_TYPE_UNSPECIFIED,
NULL, "Port didn't configured\n");

if (!is_leaf)
return -rte_tm_error_set(error, EINVAL,
RTE_TM_ERROR_TYPE_UNSPECIFIED,
Expand Down Expand Up @@ -177,6 +182,11 @@ mrvl_capabilities_get(struct rte_eth_dev *dev,
{
struct mrvl_priv *priv = dev->data->dev_private;

if (!priv->configured)
return -rte_tm_error_set(error, ENODEV,
RTE_TM_ERROR_TYPE_UNSPECIFIED,
NULL, "Port didn't configured\n");

if (!cap)
return -rte_tm_error_set(error, EINVAL,
RTE_TM_ERROR_TYPE_UNSPECIFIED,
Expand Down Expand Up @@ -228,6 +238,11 @@ mrvl_level_capabilities_get(struct rte_eth_dev *dev,
{
struct mrvl_priv *priv = dev->data->dev_private;

if (!priv->configured)
return -rte_tm_error_set(error, ENODEV,
RTE_TM_ERROR_TYPE_UNSPECIFIED,
NULL, "Port didn't configured\n");

if (!cap)
return -rte_tm_error_set(error, EINVAL,
RTE_TM_ERROR_TYPE_UNSPECIFIED,
Expand Down Expand Up @@ -294,6 +309,11 @@ mrvl_node_capabilities_get(struct rte_eth_dev *dev, uint32_t node_id,
struct mrvl_priv *priv = dev->data->dev_private;
struct mrvl_tm_node *node;

if (!priv->configured)
return -rte_tm_error_set(error, ENODEV,
RTE_TM_ERROR_TYPE_UNSPECIFIED,
NULL, "Port didn't configured\n");

if (!cap)
return -rte_tm_error_set(error, EINVAL,
RTE_TM_ERROR_TYPE_UNSPECIFIED,
Expand Down Expand Up @@ -366,6 +386,11 @@ mrvl_shaper_profile_add(struct rte_eth_dev *dev, uint32_t shaper_profile_id,
struct mrvl_priv *priv = dev->data->dev_private;
struct mrvl_tm_shaper_profile *profile;

if (!priv->configured)
return -rte_tm_error_set(error, ENODEV,
RTE_TM_ERROR_TYPE_UNSPECIFIED,
NULL, "Port didn't configured\n");

if (!params)
return -rte_tm_error_set(error, EINVAL,
RTE_TM_ERROR_TYPE_UNSPECIFIED,
Expand Down Expand Up @@ -434,6 +459,11 @@ mrvl_shaper_profile_delete(struct rte_eth_dev *dev, uint32_t shaper_profile_id,
struct mrvl_priv *priv = dev->data->dev_private;
struct mrvl_tm_shaper_profile *profile;

if (!priv->configured)
return -rte_tm_error_set(error, ENODEV,
RTE_TM_ERROR_TYPE_UNSPECIFIED,
NULL, "Port didn't configured\n");

profile = mrvl_shaper_profile_from_id(priv, shaper_profile_id);
if (!profile)
return -rte_tm_error_set(error, ENODEV,
Expand Down Expand Up @@ -580,6 +610,11 @@ mrvl_node_add(struct rte_eth_dev *dev, uint32_t node_id,
struct mrvl_tm_node *node, *parent = NULL;
int ret;

if (!priv->configured)
return -rte_tm_error_set(error, ENODEV,
RTE_TM_ERROR_TYPE_UNSPECIFIED,
NULL, "Port didn't configured\n");

if (priv->ppio)
return -rte_tm_error_set(error, EPERM,
RTE_TM_ERROR_TYPE_UNSPECIFIED,
Expand Down Expand Up @@ -665,6 +700,11 @@ mrvl_node_delete(struct rte_eth_dev *dev, uint32_t node_id,
struct mrvl_priv *priv = dev->data->dev_private;
struct mrvl_tm_node *node;

if (!priv->configured)
return -rte_tm_error_set(error, ENODEV,
RTE_TM_ERROR_TYPE_UNSPECIFIED,
NULL, "Port didn't configured\n");

if (priv->ppio) {
return -rte_tm_error_set(error, EPERM,
RTE_TM_ERROR_TYPE_UNSPECIFIED,
Expand Down Expand Up @@ -729,6 +769,11 @@ mrvl_node_suspend(struct rte_eth_dev *dev, uint32_t node_id,
struct mrvl_tm_node *node, *tmp;
int ret;

if (!priv->configured)
return -rte_tm_error_set(error, ENODEV,
RTE_TM_ERROR_TYPE_UNSPECIFIED,
NULL, "Port didn't configured\n");

node = mrvl_node_from_id(priv, node_id);
if (!node)
return -rte_tm_error_set(error, ENODEV,
Expand Down Expand Up @@ -770,6 +815,11 @@ mrvl_node_resume(struct rte_eth_dev *dev, uint32_t node_id,
struct mrvl_tm_node *node;
int ret;

if (!priv->configured)
return -rte_tm_error_set(error, ENODEV,
RTE_TM_ERROR_TYPE_UNSPECIFIED,
NULL, "Port didn't configured\n");

node = mrvl_node_from_id(priv, node_id);
if (!node)
return -rte_tm_error_set(error, ENODEV,
Expand Down Expand Up @@ -806,6 +856,11 @@ mrvl_hierarchy_commit(struct rte_eth_dev *dev, int clear_on_fail,
struct mrvl_tm_node *node;
int ret;

if (!priv->configured)
return -rte_tm_error_set(error, ENODEV,
RTE_TM_ERROR_TYPE_UNSPECIFIED,
NULL, "Port didn't configured\n");

if (priv->ppio) {
ret = -rte_tm_error_set(error, EPERM,
RTE_TM_ERROR_TYPE_UNSPECIFIED,
Expand Down Expand Up @@ -912,6 +967,11 @@ mrvl_node_stats_read(struct rte_eth_dev *dev, uint32_t node_id,
struct mrvl_tm_node *node;
int ret;

if (!priv->configured)
return -rte_tm_error_set(error, ENODEV,
RTE_TM_ERROR_TYPE_UNSPECIFIED,
NULL, "Port didn't configured\n");

if (!priv->ppio) {
return -rte_tm_error_set(error, EPERM,
RTE_TM_ERROR_TYPE_UNSPECIFIED,
Expand Down Expand Up @@ -981,6 +1041,11 @@ mrvl_node_stats_update(struct rte_eth_dev *dev, uint32_t node_id,
struct mrvl_priv *priv = dev->data->dev_private;
struct mrvl_tm_node *node;

if (!priv->configured)
return -rte_tm_error_set(error, ENODEV,
RTE_TM_ERROR_TYPE_UNSPECIFIED,
NULL, "Port didn't configured\n");

node = mrvl_node_from_id(priv, node_id);
if (!node)
return -rte_tm_error_set(error, ENODEV,
Expand Down

0 comments on commit 6595f06

Please sign in to comment.