diff mbox series

[ovs-dev,2/4] netdev-offload-dpdk: Keep netdev in offload object

Message ID 20201202072304.1242-3-elibr@nvidia.com
State Changes Requested
Headers show
Series netdev datapath flush offloaded flows | expand

Commit Message

Eli Britstein Dec. 2, 2020, 7:23 a.m. UTC
Keep the netdev of the offload rule as a field in the offload object as
a pre-step towards support flushing of the offload rules.

Signed-off-by: Eli Britstein <elibr@nvidia.com>
Reviewed-by: Gaetan Rivet <gaetanr@nvidia.com>
---
 lib/netdev-offload-dpdk.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)
diff mbox series

Patch

diff --git a/lib/netdev-offload-dpdk.c b/lib/netdev-offload-dpdk.c
index 01c52e1de..5b22becd0 100644
--- a/lib/netdev-offload-dpdk.c
+++ b/lib/netdev-offload-dpdk.c
@@ -57,6 +57,7 @@  static struct cmap ufid_to_rte_flow = CMAP_INITIALIZER;
 struct ufid_to_rte_flow_data {
     struct cmap_node node;
     ovs_u128 ufid;
+    struct netdev *netdev;
     struct rte_flow *rte_flow;
     bool actions_offloaded;
     struct dpif_flow_stats stats;
@@ -79,7 +80,7 @@  ufid_to_rte_flow_data_find(const ovs_u128 *ufid)
 }
 
 static inline struct ufid_to_rte_flow_data *
-ufid_to_rte_flow_associate(const ovs_u128 *ufid,
+ufid_to_rte_flow_associate(const ovs_u128 *ufid, struct netdev *netdev,
                            struct rte_flow *rte_flow, bool actions_offloaded)
 {
     size_t hash = hash_bytes(ufid, sizeof *ufid, 0);
@@ -98,6 +99,7 @@  ufid_to_rte_flow_associate(const ovs_u128 *ufid,
     }
 
     data->ufid = *ufid;
+    data->netdev = netdev_ref(netdev);
     data->rte_flow = rte_flow;
     data->actions_offloaded = actions_offloaded;
 
@@ -116,6 +118,7 @@  ufid_to_rte_flow_disassociate(const ovs_u128 *ufid)
         if (ovs_u128_equals(*ufid, data->ufid)) {
             cmap_remove(&ufid_to_rte_flow,
                         CONST_CAST(struct cmap_node *, &data->node), hash);
+            netdev_close(data->netdev);
             ovsrcu_postpone(free, data);
             return;
         }
@@ -1435,7 +1438,8 @@  netdev_offload_dpdk_add_flow(struct netdev *netdev,
     if (!flow) {
         goto out;
     }
-    flows_data = ufid_to_rte_flow_associate(ufid, flow, actions_offloaded);
+    flows_data = ufid_to_rte_flow_associate(ufid, netdev, flow,
+                                            actions_offloaded);
     VLOG_DBG("%s: installed flow %p by ufid "UUID_FMT,
              netdev_get_name(netdev), flow, UUID_ARGS((struct uuid *)ufid));