[ovs-dev] [PATCH V3 08/19] netdev-offload-dpdk: Protect UFID map by mutex
Eli Britstein
elibr at mellanox.com
Sun Dec 8 13:22:53 UTC 2019
Flow deletion and dumping for statistics collection are called from
different threads. As a pre-step towards collecting HW statistics,
protect the UFID map by mutex to make it thread safe.
Signed-off-by: Eli Britstein <elibr at mellanox.com>
---
lib/netdev-offload-dpdk.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/lib/netdev-offload-dpdk.c b/lib/netdev-offload-dpdk.c
index b2ec05cec..5568400b6 100644
--- a/lib/netdev-offload-dpdk.c
+++ b/lib/netdev-offload-dpdk.c
@@ -51,6 +51,7 @@ static struct vlog_rate_limit error_rl = VLOG_RATE_LIMIT_INIT(100, 5);
* A mapping from ufid to dpdk rte_flow.
*/
static struct cmap ufid_to_rte_flow = CMAP_INITIALIZER;
+static struct ovs_mutex ufid_map_mutex = OVS_MUTEX_INITIALIZER;
struct ufid_to_rte_flow_data {
struct cmap_node node;
@@ -630,8 +631,11 @@ netdev_offload_dpdk_destroy_flow(struct netdev *netdev,
struct rte_flow *rte_flow)
{
struct rte_flow_error error;
- int ret = netdev_dpdk_rte_flow_destroy(netdev, rte_flow, &error);
+ int ret;
+
+ ovs_mutex_lock(&ufid_map_mutex);
+ ret = netdev_dpdk_rte_flow_destroy(netdev, rte_flow, &error);
if (ret == 0) {
ufid_to_rte_flow_disassociate(ufid);
VLOG_DBG("%s: removed rte flow %p associated with ufid " UUID_FMT "\n",
@@ -642,6 +646,7 @@ netdev_offload_dpdk_destroy_flow(struct netdev *netdev,
netdev_get_name(netdev), error.message, error.type);
}
+ ovs_mutex_unlock(&ufid_map_mutex);
return ret;
}
--
2.14.5
More information about the dev
mailing list