From: Roni Bar Yanai <ron...@mellanox.com> Before offloading code was added to the netdev-dpdk.c file (MARK and RSS actions) the only DPDK RTE calls in use were rte_flow_create() and rte_flow_destroy(). In preparation for splitting the offloading code from the netdev-dpdk.c file to a separate file, it is required to embed these RTE calls into a global netdev-dpdk-* API so that they can be called from the new file. An example for this requirement can be seen in the handling of dev->mutex, which should be encapsulated inside netdev-dpdk class (netdev-dpdk.c file), and should be unknown to the outside callers. This commit embeds the rte_flow_create() call inside the netdev_dpdk_flow_create() API and the rte_flow_destroy() call inside the netdev_dpdk_rte_flow_destroy() API.
Reviewed-by: Asaf Penso <as...@mellanox.com> Signed-off-by: Roni Bar Yanai <ron...@mellanox.com> Signed-off-by: Ophir Munk <ophi...@mellanox.com> --- lib/netdev-dpdk.c | 44 ++++++++++++++++++++++++++++++++------------ lib/netdev-dpdk.h | 16 ++++++++++++++++ 2 files changed, 48 insertions(+), 12 deletions(-) diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c index 32a6ffd..57f9c25 100644 --- a/lib/netdev-dpdk.c +++ b/lib/netdev-dpdk.c @@ -4203,6 +4203,35 @@ unlock: return err; } +int +netdev_dpdk_rte_flow_destroy(struct netdev *netdev, + struct rte_flow *rte_flow, + struct rte_flow_error *error) +{ + struct netdev_dpdk *dev = netdev_dpdk_cast(netdev); + int ret; + + ovs_mutex_lock(&dev->mutex); + ret = rte_flow_destroy(dev->port_id, rte_flow, error); + ovs_mutex_unlock(&dev->mutex); + return ret; +} + +struct rte_flow * +netdev_dpdk_rte_flow_create(struct netdev *netdev, + const struct rte_flow_attr *attr, + const struct rte_flow_item *items, + const struct rte_flow_action *actions, + struct rte_flow_error *error) +{ + struct rte_flow *flow; + struct netdev_dpdk *dev = netdev_dpdk_cast(netdev); + + ovs_mutex_lock(&dev->mutex); + flow = rte_flow_create(dev->port_id, attr, items, actions, error); + ovs_mutex_unlock(&dev->mutex); + return flow; +} /* Find rte_flow with @ufid */ static struct rte_flow * @@ -4554,7 +4583,6 @@ netdev_dpdk_add_rte_flow_offload(struct netdev *netdev, size_t actions_len OVS_UNUSED, const ovs_u128 *ufid, struct offload_info *info) { - struct netdev_dpdk *dev = netdev_dpdk_cast(netdev); const struct rte_flow_attr flow_attr = { .group = 0, .priority = 0, @@ -4759,15 +4787,12 @@ end_proto_check: mark.id = info->flow_mark; add_flow_action(&actions, RTE_FLOW_ACTION_TYPE_MARK, &mark); - ovs_mutex_lock(&dev->mutex); rss = add_flow_rss_action(&actions, netdev); add_flow_action(&actions, RTE_FLOW_ACTION_TYPE_END, NULL); - flow = rte_flow_create(dev->port_id, &flow_attr, patterns.items, - actions.actions, &error); - - ovs_mutex_unlock(&dev->mutex); + flow = netdev_dpdk_rte_flow_create(netdev, &flow_attr,patterns.items, + actions.actions, &error); free(rss); if (!flow) { @@ -4861,13 +4886,9 @@ static int netdev_dpdk_destroy_rte_flow(struct netdev *netdev, const ovs_u128 *ufid, struct rte_flow *rte_flow) { - struct netdev_dpdk *dev = netdev_dpdk_cast(netdev); struct rte_flow_error error; - int ret; + int ret = netdev_dpdk_rte_flow_destroy(netdev, rte_flow, &error); - ovs_mutex_lock(&dev->mutex); - - ret = rte_flow_destroy(dev->port_id, 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", @@ -4878,7 +4899,6 @@ netdev_dpdk_destroy_rte_flow(struct netdev *netdev, netdev_get_name(netdev), error.type, error.message); } - ovs_mutex_unlock(&dev->mutex); return ret; } diff --git a/lib/netdev-dpdk.h b/lib/netdev-dpdk.h index b7d02a7..ab36032 100644 --- a/lib/netdev-dpdk.h +++ b/lib/netdev-dpdk.h @@ -22,11 +22,27 @@ #include "openvswitch/compiler.h" struct dp_packet; +struct netdev; +struct rte_flow; +struct rte_flow_error; +struct rte_flow_attr; +struct rte_flow_item; +struct rte_flow_action; #ifdef DPDK_NETDEV void netdev_dpdk_register(void); void free_dpdk_buf(struct dp_packet *); +int +netdev_dpdk_rte_flow_destroy(struct netdev *netdev, + struct rte_flow *rte_flow, + struct rte_flow_error *error); +struct rte_flow * +netdev_dpdk_rte_flow_create(struct netdev *netdev, + const struct rte_flow_attr *attr, + const struct rte_flow_item *items, + const struct rte_flow_action *actions, + struct rte_flow_error *error); #else -- 1.8.3.1 _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev