[ovs-dev] [PATCH V4 06/17] netdev-offload-dpdk: Return UFID-rte_flow entry in find method
Eli Britstein
elibr at mellanox.com
Mon Dec 16 15:10:36 UTC 2019
Change the find method to return the whole entry of UFID-rte_flow
association instead of only the rte_flow field in it, as a pre-step
towards adding and using more fields into that map entry.
Signed-off-by: Eli Britstein <elibr at mellanox.com>
---
lib/netdev-offload-dpdk.c | 29 ++++++++++++++++++-----------
1 file changed, 18 insertions(+), 11 deletions(-)
diff --git a/lib/netdev-offload-dpdk.c b/lib/netdev-offload-dpdk.c
index 7cb24ddcd..536071ac4 100644
--- a/lib/netdev-offload-dpdk.c
+++ b/lib/netdev-offload-dpdk.c
@@ -59,15 +59,15 @@ struct ufid_to_rte_flow_data {
};
/* Find rte_flow with @ufid. */
-static struct rte_flow *
-ufid_to_rte_flow_find(const ovs_u128 *ufid)
+static struct ufid_to_rte_flow_data *
+ufid_to_rte_flow_data_find(const ovs_u128 *ufid)
{
size_t hash = hash_bytes(ufid, sizeof *ufid, 0);
struct ufid_to_rte_flow_data *data;
CMAP_FOR_EACH_WITH_HASH (data, node, hash, &ufid_to_rte_flow) {
if (ovs_u128_equals(*ufid, data->ufid)) {
- return data->rte_flow;
+ return data;
}
}
@@ -80,6 +80,7 @@ ufid_to_rte_flow_associate(const ovs_u128 *ufid,
{
size_t hash = hash_bytes(ufid, sizeof *ufid, 0);
struct ufid_to_rte_flow_data *data = xzalloc(sizeof *data);
+ struct ufid_to_rte_flow_data *data_prev;
/*
* We should not simply overwrite an existing rte flow.
@@ -87,7 +88,10 @@ ufid_to_rte_flow_associate(const ovs_u128 *ufid,
* Thus, if following assert triggers, something is wrong:
* the rte_flow is not destroyed.
*/
- ovs_assert(ufid_to_rte_flow_find(ufid) == NULL);
+ data_prev = ufid_to_rte_flow_data_find(ufid);
+ if (data_prev) {
+ ovs_assert(data_prev->rte_flow == NULL);
+ }
data->ufid = *ufid;
data->rte_flow = rte_flow;
@@ -829,16 +833,17 @@ netdev_offload_dpdk_flow_put(struct netdev *netdev, struct match *match,
const ovs_u128 *ufid, struct offload_info *info,
struct dpif_flow_stats *stats)
{
- struct rte_flow *rte_flow;
+ struct ufid_to_rte_flow_data *rte_flow_data;
int ret;
/*
* If an old rte_flow exists, it means it's a flow modification.
* Here destroy the old rte flow first before adding a new one.
*/
- rte_flow = ufid_to_rte_flow_find(ufid);
- if (rte_flow) {
- ret = netdev_offload_dpdk_destroy_flow(netdev, ufid, rte_flow);
+ rte_flow_data = ufid_to_rte_flow_data_find(ufid);
+ if (rte_flow_data && rte_flow_data->rte_flow) {
+ ret = netdev_offload_dpdk_destroy_flow(netdev, ufid,
+ rte_flow_data->rte_flow);
if (ret < 0) {
return ret;
}
@@ -860,16 +865,18 @@ static int
netdev_offload_dpdk_flow_del(struct netdev *netdev, const ovs_u128 *ufid,
struct dpif_flow_stats *stats)
{
- struct rte_flow *rte_flow = ufid_to_rte_flow_find(ufid);
+ struct ufid_to_rte_flow_data *rte_flow_data;
- if (!rte_flow) {
+ rte_flow_data = ufid_to_rte_flow_data_find(ufid);
+ if (!rte_flow_data || !rte_flow_data->rte_flow) {
return -1;
}
if (stats) {
memset(stats, 0, sizeof *stats);
}
- return netdev_offload_dpdk_destroy_flow(netdev, ufid, rte_flow);
+ return netdev_offload_dpdk_destroy_flow(netdev, ufid,
+ rte_flow_data->rte_flow);
}
static int
--
2.14.5
More information about the dev
mailing list