From patchwork Wed Dec 18 14:40:58 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eli Britstein X-Patchwork-Id: 1212478 X-Patchwork-Delegate: i.maximets@samsung.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=openvswitch.org (client-ip=140.211.166.137; helo=fraxinus.osuosl.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=mellanox.com Received: from fraxinus.osuosl.org (smtp4.osuosl.org [140.211.166.137]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 47dHlV4xr2z9sP3 for ; Thu, 19 Dec 2019 01:41:58 +1100 (AEDT) Received: from localhost (localhost [127.0.0.1]) by fraxinus.osuosl.org (Postfix) with ESMTP id D98F586C73; Wed, 18 Dec 2019 14:41:55 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from fraxinus.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id DXfJjK6E7Wdo; Wed, 18 Dec 2019 14:41:54 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by fraxinus.osuosl.org (Postfix) with ESMTP id 1429186C8D; Wed, 18 Dec 2019 14:41:37 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id EA89EC1D8A; Wed, 18 Dec 2019 14:41:36 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@lists.linuxfoundation.org Received: from whitealder.osuosl.org (smtp1.osuosl.org [140.211.166.138]) by lists.linuxfoundation.org (Postfix) with ESMTP id 632DEC1D81 for ; Wed, 18 Dec 2019 14:41:28 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by whitealder.osuosl.org (Postfix) with ESMTP id 48ECA85B48 for ; Wed, 18 Dec 2019 14:41:28 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from whitealder.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id cT7npnnuYO2k for ; Wed, 18 Dec 2019 14:41:27 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6 Received: from mellanox.co.il (mail-il-dmz.mellanox.com [193.47.165.129]) by whitealder.osuosl.org (Postfix) with ESMTP id CEF2586576 for ; Wed, 18 Dec 2019 14:41:25 +0000 (UTC) Received: from Internal Mail-Server by MTLPINE1 (envelope-from elibr@mellanox.com) with ESMTPS (AES256-SHA encrypted); 18 Dec 2019 16:41:22 +0200 Received: from dev-r-vrt-215.mtr.labs.mlnx. (dev-r-vrt-215.mtr.labs.mlnx [10.212.215.1]) by labmailer.mlnx (8.13.8/8.13.8) with ESMTP id xBIEfMlt027222; Wed, 18 Dec 2019 16:41:22 +0200 From: Eli Britstein To: dev@openvswitch.org, Ilya Maximets Date: Wed, 18 Dec 2019 14:40:58 +0000 Message-Id: <20191218144110.18653-7-elibr@mellanox.com> X-Mailer: git-send-email 2.14.5 In-Reply-To: <20191218144110.18653-1-elibr@mellanox.com> References: <20191218144110.18653-1-elibr@mellanox.com> Cc: Oz Shlomo , Simon Horman , Majd Dibbiny , Eli Britstein , Ameer Mahagneh Subject: [ovs-dev] [PATCH V5 06/18] netdev-offload-dpdk: Return UFID-rte_flow entry in find method X-BeenThere: ovs-dev@openvswitch.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: ovs-dev-bounces@openvswitch.org Sender: "dev" 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 --- 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 90fa8bec7..e95db821e 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; @@ -831,16 +835,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; } @@ -862,16 +867,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