From patchwork Mon Jun 29 09:50:16 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sriharsha Basavapatna X-Patchwork-Id: 1318807 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.138; helo=whitealder.osuosl.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=openvswitch.org Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=broadcom.com header.i=@broadcom.com header.a=rsa-sha256 header.s=google header.b=Ea55B/wD; dkim-atps=neutral Received: from whitealder.osuosl.org (smtp1.osuosl.org [140.211.166.138]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 49wN5q35ZSz9sQx for ; Mon, 29 Jun 2020 19:50:39 +1000 (AEST) Received: from localhost (localhost [127.0.0.1]) by whitealder.osuosl.org (Postfix) with ESMTP id EE54788822; Mon, 29 Jun 2020 09:50:37 +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 vJwk2y8ZTnWm; Mon, 29 Jun 2020 09:50:36 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by whitealder.osuosl.org (Postfix) with ESMTP id C175988831; Mon, 29 Jun 2020 09:50:36 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id A72F2C07FF; Mon, 29 Jun 2020 09:50:36 +0000 (UTC) X-Original-To: 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 82444C016E for ; Mon, 29 Jun 2020 09:50:35 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by silver.osuosl.org (Postfix) with ESMTP id 7CDB925DA8 for ; Mon, 29 Jun 2020 09:50:35 +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 6AauJsdfXKvL for ; Mon, 29 Jun 2020 09:50:34 +0000 (UTC) X-Greylist: from auto-whitelisted by SQLgrey-1.7.6 Received: from mail-pg1-f194.google.com (mail-pg1-f194.google.com [209.85.215.194]) by silver.osuosl.org (Postfix) with ESMTPS id 4782120477 for ; Mon, 29 Jun 2020 09:50:34 +0000 (UTC) Received: by mail-pg1-f194.google.com with SMTP id l63so8041009pge.12 for ; Mon, 29 Jun 2020 02:50:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=GhGJps1+4f/oN2TO1fSyLo71zkJigauZ4HT+v9cdaco=; b=Ea55B/wDQqbuz39fp/oY3cTrSgf2/zHvgd1nMBqb1txUmtjcgujRtzLOrD9z3/rFQN Wqak46ss5PBb1xXC7JYhrcMl0sePBx9EWZZKXuk1qneSGDxyGghCjzzMVnj1qlGvtnMU 6QBDbyObqZodhhtxT+G/sBnAoMozBareEyUk0= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=GhGJps1+4f/oN2TO1fSyLo71zkJigauZ4HT+v9cdaco=; b=VG+LTy0TdO0uO5EP8aqI58qj9behkkHpu5WxqRsrVlLQBVzC7ubp/oqxxCg+YnYr8M 6W+u3qW9n0xGYX7Q5R5+EvBrqIVl3UkksVtBXlcKmcyNqWz0qK+oVQXvjtWKBzmrI74M LxdbQzmJlQ8necHsesgxzhOSmUlZZo0d2VkP7DZwPOb28d7h3B1yzEuYn2G2+oKhmZ3Y FQzmQJIGsiP5h8Xb1NvKu/xORFis6xAN62Tkq9dDi+5WwbQ5vC2035u7t+CvEbLCrxr1 BWTnzNuEBbYatnLqmmw9dnTFfopJqO+pggC4R1SXqd9ToewZw3imViRqPT6GQdjaoykr GYrA== X-Gm-Message-State: AOAM530qx4e/slitQW1ge/FfBhiSAPMe5haZDr8t23Nll4EY+GFb0rEa EIOI6kfuIY2WmoKN/13kjoSnegGam2UMxbWeKFTay++TsH+edEFHBDHON97jwoMO/9zXOLaTbOv 2O2ek2OFkuurF6wa2iowB902H00JVbmaHu1p77XOLs8YHtana5hwA+94HKxUgbXjRMU6CBiDCr6 Orm723 X-Google-Smtp-Source: ABdhPJwm1GkDckv2yfZYbDv1GQral9EfzwKjLRv2xha1BuMEv0llB432LkRPMTSmMemFZVx/OBcolA== X-Received: by 2002:a63:c150:: with SMTP id p16mr9730929pgi.141.1593424233180; Mon, 29 Jun 2020 02:50:33 -0700 (PDT) Received: from dhcp-10-123-153-36.dhcp.broadcom.net ([192.19.234.250]) by smtp.gmail.com with ESMTPSA id mr8sm1227888pjb.5.2020.06.29.02.50.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 29 Jun 2020 02:50:32 -0700 (PDT) To: dev@openvswitch.org Date: Mon, 29 Jun 2020 05:50:16 -0400 Message-Id: <20200629095020.8491-2-sriharsha.basavapatna@broadcom.com> X-Mailer: git-send-email 2.25.0.rc2 In-Reply-To: <20200629095020.8491-1-sriharsha.basavapatna@broadcom.com> References: <20200629095020.8491-1-sriharsha.basavapatna@broadcom.com> MIME-Version: 1.0 Subject: [ovs-dev] [PATCH v4 1/5] dpif-netdev: Refactor dp_netdev_flow_offload_put() 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: , X-Patchwork-Original-From: Sriharsha Basavapatna via dev From: Sriharsha Basavapatna Reply-To: Sriharsha Basavapatna Errors-To: ovs-dev-bounces@openvswitch.org Sender: "dev" This patch refactors dp_netdev_flow_offload_put() to prepare for changes to support partial action offload, in subsequent patches. - Move mark allocation code into a separate wrapper function, outside of dp_netdev_flow_offload_put() to improve readability and to facilitate more changes in this function to support partial action offload. - We need to get the in-port's netdev-type (e.g, vhost) to determine if the flow should be offloaded on the egress device instead. To facilitate such changes, netdev_ports_get() is moved ahead of mark allocation. Signed-off-by: Sriharsha Basavapatna --- lib/dpif-netdev.c | 72 +++++++++++++++++++++++++++++------------------ 1 file changed, 45 insertions(+), 27 deletions(-) diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c index 285c1c52f..7adea8c40 100644 --- a/lib/dpif-netdev.c +++ b/lib/dpif-netdev.c @@ -2482,6 +2482,43 @@ dp_netdev_flow_offload_del(struct dp_flow_offload_item *offload) return mark_to_flow_disassociate(offload->pmd, offload->flow); } +static int +dp_netdev_alloc_flow_mark(struct dp_netdev_flow *flow, bool modification, + uint32_t *markp) +{ + uint32_t mark; + + if (modification) { + mark = flow->mark; + ovs_assert(mark != INVALID_FLOW_MARK); + *markp = mark; + return 0; + } + + /* + * If a mega flow has already been offloaded (from other PMD + * instances), do not offload it again. + */ + mark = megaflow_to_mark_find(&flow->mega_ufid); + if (mark != INVALID_FLOW_MARK) { + VLOG_DBG("Flow has already been offloaded with mark %u\n", mark); + if (flow->mark != INVALID_FLOW_MARK) { + ovs_assert(flow->mark == mark); + } else { + mark_to_flow_associate(mark, flow); + } + return 1; + } + + mark = flow_mark_alloc(); + if (mark == INVALID_FLOW_MARK) { + VLOG_ERR("Failed to allocate flow mark!\n"); + } + + *markp = mark; + return 0; +} + /* * There are two flow offload operations here: addition and modification. * @@ -2510,37 +2547,18 @@ dp_netdev_flow_offload_put(struct dp_flow_offload_item *offload) return -1; } - if (modification) { - mark = flow->mark; - ovs_assert(mark != INVALID_FLOW_MARK); - } else { - /* - * If a mega flow has already been offloaded (from other PMD - * instances), do not offload it again. - */ - mark = megaflow_to_mark_find(&flow->mega_ufid); - if (mark != INVALID_FLOW_MARK) { - VLOG_DBG("Flow has already been offloaded with mark %u\n", mark); - if (flow->mark != INVALID_FLOW_MARK) { - ovs_assert(flow->mark == mark); - } else { - mark_to_flow_associate(mark, flow); - } - return 0; - } + port = netdev_ports_get(in_port, dpif_type_str); + if (!port) { + return -1; + } - mark = flow_mark_alloc(); - if (mark == INVALID_FLOW_MARK) { - VLOG_ERR("Failed to allocate flow mark!\n"); - } + if (dp_netdev_alloc_flow_mark(flow, modification, &mark)) { + /* flow already offloaded */ + netdev_close(port); + return 0; } info.flow_mark = mark; - port = netdev_ports_get(in_port, dpif_type_str); - if (!port || netdev_vport_is_vport_class(port->netdev_class)) { - netdev_close(port); - goto err_free; - } /* Taking a global 'port_mutex' to fulfill thread safety restrictions for * the netdev-offload-dpdk module. */ ovs_mutex_lock(&pmd->dp->port_mutex);