[dpdk-dev] [PATCH v5 33/34] net/mlx5: make shared action list thread safe
Suanming Mou
suanmingm at nvidia.com
Wed Oct 28 10:33:52 CET 2020
This commit uses spinlock to protect the shared action list in multiple
thread.
Signed-off-by: Suanming Mou <suanmingm at nvidia.com>
Acked-by: Matan Azrad <matan at nvidia.com>
---
drivers/net/mlx5/linux/mlx5_os.c | 1 +
drivers/net/mlx5/mlx5.h | 1 +
drivers/net/mlx5/mlx5_flow_dv.c | 5 +++++
3 files changed, 7 insertions(+)
diff --git a/drivers/net/mlx5/linux/mlx5_os.c b/drivers/net/mlx5/linux/mlx5_os.c
index 5856981..8612cab 100644
--- a/drivers/net/mlx5/linux/mlx5_os.c
+++ b/drivers/net/mlx5/linux/mlx5_os.c
@@ -1534,6 +1534,7 @@
}
priv->mreg_cp_tbl->ctx = eth_dev;
}
+ rte_spinlock_init(&priv->shared_act_sl);
mlx5_flow_counter_mode_config(eth_dev);
return eth_dev;
error:
diff --git a/drivers/net/mlx5/mlx5.h b/drivers/net/mlx5/mlx5.h
index ac7a026..be21a9a 100644
--- a/drivers/net/mlx5/mlx5.h
+++ b/drivers/net/mlx5/mlx5.h
@@ -912,6 +912,7 @@ struct mlx5_priv {
uint8_t fdb_def_rule; /* Whether fdb jump to table 1 is configured. */
struct mlx5_mp_id mp_id; /* ID of a multi-process process */
LIST_HEAD(fdir, mlx5_fdir_flow) fdir_flows; /* fdir flows. */
+ rte_spinlock_t shared_act_sl; /* Shared actions spinlock. */
LIST_HEAD(shared_action, rte_flow_shared_action) shared_actions;
/* shared actions */
};
diff --git a/drivers/net/mlx5/mlx5_flow_dv.c b/drivers/net/mlx5/mlx5_flow_dv.c
index 08bbc5d..cf48402 100644
--- a/drivers/net/mlx5/mlx5_flow_dv.c
+++ b/drivers/net/mlx5/mlx5_flow_dv.c
@@ -11191,7 +11191,9 @@ struct mlx5_cache_entry *
if (shared_action) {
__atomic_add_fetch(&shared_action->refcnt, 1,
__ATOMIC_RELAXED);
+ rte_spinlock_lock(&priv->shared_act_sl);
LIST_INSERT_HEAD(&priv->shared_actions, shared_action, next);
+ rte_spinlock_unlock(&priv->shared_act_sl);
}
return shared_action;
}
@@ -11218,6 +11220,7 @@ struct mlx5_cache_entry *
struct rte_flow_shared_action *action,
struct rte_flow_error *error)
{
+ struct mlx5_priv *priv = dev->data->dev_private;
int ret;
switch (action->type) {
@@ -11232,7 +11235,9 @@ struct mlx5_cache_entry *
}
if (ret)
return ret;
+ rte_spinlock_lock(&priv->shared_act_sl);
LIST_REMOVE(action, next);
+ rte_spinlock_unlock(&priv->shared_act_sl);
rte_free(action);
return 0;
}
--
1.8.3.1
More information about the dev
mailing list