From patchwork Mon Dec 28 09:24:48 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: taoyunxiang X-Patchwork-Id: 1420983 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.133; helo=hemlock.osuosl.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=cmss.chinamobile.com Received: from hemlock.osuosl.org (smtp2.osuosl.org [140.211.166.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4D4Qck5ttCz9sVv for ; Tue, 29 Dec 2020 05:12:22 +1100 (AEDT) Received: from localhost (localhost [127.0.0.1]) by hemlock.osuosl.org (Postfix) with ESMTP id 64580875CD; Mon, 28 Dec 2020 18:12:21 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from hemlock.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 42n1NLCnhKr2; Mon, 28 Dec 2020 18:12:19 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by hemlock.osuosl.org (Postfix) with ESMTP id 63AB9872E0; Mon, 28 Dec 2020 18:11:36 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 3B27FC1EF9; Mon, 28 Dec 2020 18:11:36 +0000 (UTC) X-Original-To: ovs-dev@openvswitch.org Delivered-To: ovs-dev@lists.linuxfoundation.org Received: from silver.osuosl.org (smtp3.osuosl.org [140.211.166.136]) by lists.linuxfoundation.org (Postfix) with ESMTP id D966CC1D9C for ; Mon, 28 Dec 2020 09:26:18 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by silver.osuosl.org (Postfix) with ESMTP id BF6022046B for ; Mon, 28 Dec 2020 09:26:18 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from silver.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id UNl8QcPeEhGg for ; Mon, 28 Dec 2020 09:26:17 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6 Received: from cmccmta2.chinamobile.com (cmccmta2.chinamobile.com [221.176.66.80]) by silver.osuosl.org (Postfix) with ESMTP id 20E772045F for ; Mon, 28 Dec 2020 09:26:16 +0000 (UTC) Received: from spf.mail.chinamobile.com (unknown[172.16.121.3]) by rmmx-syy-dmz-app07-12007 (RichMail) with SMTP id 2ee75fe9a498b17-c336f; Mon, 28 Dec 2020 17:25:45 +0800 (CST) X-RM-TRANSID: 2ee75fe9a498b17-c336f X-RM-TagInfo: emlType=0 X-RM-SPAM-FLAG: 00000000 Received: from yun.localdomain (unknown[112.25.154.146]) by rmsmtp-syy-appsvr02-12002 (RichMail) with SMTP id 2ee25fe9a48a90b-7b896; Mon, 28 Dec 2020 17:25:45 +0800 (CST) X-RM-TRANSID: 2ee25fe9a48a90b-7b896 From: Tao YunXiang To: ovs-dev@openvswitch.org Date: Mon, 28 Dec 2020 01:24:48 -0800 Message-Id: <20201228092520.11807-31-taoyunxiang@cmss.chinamobile.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20201228092520.11807-1-taoyunxiang@cmss.chinamobile.com> References: <8> <20201228092520.11807-1-taoyunxiang@cmss.chinamobile.com> MIME-Version: 1.0 X-Mailman-Approved-At: Mon, 28 Dec 2020 18:10:34 +0000 Cc: Rongyin Subject: [ovs-dev] [PATCH 30/62] dpif-netdev: free mark value if the offloaded fail flow deleted 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: , Errors-To: ovs-dev-bounces@openvswitch.org Sender: "dev" From: Rongyin Code Source From: Self Code Description: free mark value if the offloaded fail flow deleted Jira: #[Optional] 市场项目编号(名称):[Optional] --- lib/dpif-netdev.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c index db28b88..73367ab 100644 --- a/lib/dpif-netdev.c +++ b/lib/dpif-netdev.c @@ -2444,6 +2444,13 @@ dp_netdev_flow_offload_put(struct dp_flow_offload_item *offload) if (megaflow_to_offload_st_find(&flow->ufid) == true) { return -1; } + /* There are two possibilities when runs here: + * 1. This flow is new, has never been offloaded before + * 2. This flow has been offload before and succeed + * means hw flow is ageout,ovs should offload it again + * So for 1. we should alloc new mark value from pool + * for 2. we should assert flow->mark == mark + */ if (mark != INVALID_FLOW_MARK) { VLOG_DBG("Flow has already been offloaded with mark %u\n", mark); if (flow->mark != INVALID_FLOW_MARK) { @@ -2611,11 +2618,21 @@ dp_netdev_pmd_remove_flow(struct dp_netdev_pmd_thread *pmd, struct cmap_node *node = CONST_CAST(struct cmap_node *, &flow->node); struct dpcls *cls; odp_port_t in_port = flow->flow.in_port.odp_port; + uint32_t mark ; cls = dp_netdev_pmd_lookup_dpcls(pmd, in_port); ovs_assert(cls != NULL); dpcls_remove(cls, &flow->cr); cmap_remove(&pmd->flow_table, node, dp_netdev_flow_hash(&flow->ufid)); + /* There is one condition that offloaded failed flows should also + * free mark value + */ + if (megaflow_to_offload_st_find(&flow->ufid) == true ){ + mark = megaflow_to_mark_find(&flow->ufid); + if (mark != INVALID_FLOW_MARK) { + flow_mark_free(mark); + } + } if (flow->mark != INVALID_FLOW_MARK) { queue_netdev_flow_del(pmd, flow); }