From patchwork Mon Jul 26 08:14:54 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eli Britstein X-Patchwork-Id: 1509894 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=smtp2.osuosl.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=Nvidia.com header.i=@Nvidia.com header.a=rsa-sha256 header.s=selector2 header.b=Sf0DSRrB; dkim-atps=neutral Received: from smtp2.osuosl.org (smtp2.osuosl.org [140.211.166.133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4GYCRY19H0z9sWS for ; Mon, 26 Jul 2021 18:15:53 +1000 (AEST) Received: from localhost (localhost [127.0.0.1]) by smtp2.osuosl.org (Postfix) with ESMTP id 6C46B402F3; Mon, 26 Jul 2021 08:15:51 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp2.osuosl.org ([127.0.0.1]) by localhost (smtp2.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id Hnj3aQXnKvwL; Mon, 26 Jul 2021 08:15:50 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [IPv6:2605:bc80:3010:104::8cd3:938]) by smtp2.osuosl.org (Postfix) with ESMTPS id 871A7402E7; Mon, 26 Jul 2021 08:15:49 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id E4A6CC0028; Mon, 26 Jul 2021 08:15:48 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@lists.linuxfoundation.org Received: from smtp2.osuosl.org (smtp2.osuosl.org [IPv6:2605:bc80:3010::133]) by lists.linuxfoundation.org (Postfix) with ESMTP id 0400AC000E for ; Mon, 26 Jul 2021 08:15:46 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp2.osuosl.org (Postfix) with ESMTP id C9CB2402B8 for ; Mon, 26 Jul 2021 08:15:39 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp2.osuosl.org ([127.0.0.1]) by localhost (smtp2.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 4HmWeVilPD-5 for ; Mon, 26 Jul 2021 08:15:39 +0000 (UTC) X-Greylist: whitelisted by SQLgrey-1.8.0 Received: from NAM11-DM6-obe.outbound.protection.outlook.com (mail-dm6nam11on2045.outbound.protection.outlook.com [40.107.223.45]) by smtp2.osuosl.org (Postfix) with ESMTPS id 16700402BB for ; Mon, 26 Jul 2021 08:15:39 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=nDyrSbb2g2Gt0S0vcAAReaoxrIgt9BzH51Q/Qf12OIkDp1/V3wDZbTs1u1+AeVhOSBjenNI0r7PEpf6zUZEXTFQdv8KCkLKYjYrSY3beC6AansHIrhCG2kbaQXxlnW1phXnYnGb9wjDpdBkweNEVmOeO1MDyatKkZdIn2z4inwAJqDMrXdVvj8Ee/uajYXXqGgepSQmBDwK85CBH6yAVFhuiC7wfYc3FqikywhxBZkaNZSkm95idqYq4rs0gUWonGJ5KlC7TOlcA0h8TNyXVVoW+M5onUUZgWexcdl1dA/ec9SHIskWI8jps6d8aJHUHb8BJIUZsDwSrwGej/V8yhQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=uMoMy5/SmUwmje5upEgBDOqfSb4CFdeeD0N1KHHPuTU=; b=CWVDwXNlWCj6QWjUQix4jlV08obcMJKZhHycLGUpxcE7HZlDCzfynvuOjOIwNwP92PnJ0teE6EgQ5HUkCi/4Z+gCe3I7OO10Wkh3WwGTRlxURxeD/TUYKGjJvg1gOZBfM9gehRZ3BtKbX9d2p+4bcVdmsjMy0zBkHiNWUON6vf3pR9ocuRUp8iY/ZUXGmMMfeyEQHFDhUOpZvKy2geLpnKZbRzKHGdQGV1EgUYDrWlzE6pouu6eAmVvvpUJb6TAPOSPgkCiL4FfSDMYk8tFhh+oAJiM04MaC9HV8j5hEysADR+gbxAp8KYhaN96Qwka+EO5JLpk0PwgjxaEeviNU7A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.112.34) smtp.rcpttodomain=redhat.com smtp.mailfrom=nvidia.com; dmarc=pass (p=quarantine sp=none pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=uMoMy5/SmUwmje5upEgBDOqfSb4CFdeeD0N1KHHPuTU=; b=Sf0DSRrB05ctGX6CF4+fRil7mS54lalsx5gZBlv6U6/UIUvEq9HWeB+rv2RXU0XObRx8P19leT8LCR+gV9tFiTRUVLXsg6NirWwlc8sPQxINe4di88RsRDBCGBdnJ2ieL21ug6SOIT+NPIqLfA+eW75Wdl0uEk+IZb6l9VCfTI39QTjopLoTvReRQq0igaCA9Mt4sOnSMX105bUllFdQj/Zm/dAuOVLWoa0cTWM+QvfGb50KOMN4z8AR9p4b8B4zIyxbwdgvFqr3ee4UAhwK6YpWmpA182AP8iPylAfC3x35ZJ+uqgt0WRp0fDVM8MgJHV0CLfkR00DTR/vloHNLdw== Received: from DM5PR07CA0071.namprd07.prod.outlook.com (2603:10b6:4:ad::36) by BY5PR12MB4097.namprd12.prod.outlook.com (2603:10b6:a03:213::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4352.25; Mon, 26 Jul 2021 08:15:37 +0000 Received: from DM6NAM11FT023.eop-nam11.prod.protection.outlook.com (2603:10b6:4:ad:cafe::d4) by DM5PR07CA0071.outlook.office365.com (2603:10b6:4:ad::36) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4352.29 via Frontend Transport; Mon, 26 Jul 2021 08:15:37 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.112.34) smtp.mailfrom=nvidia.com; redhat.com; dkim=none (message not signed) header.d=none;redhat.com; dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.112.34 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.112.34; helo=mail.nvidia.com; Received: from mail.nvidia.com (216.228.112.34) by DM6NAM11FT023.mail.protection.outlook.com (10.13.173.96) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.4352.24 via Frontend Transport; Mon, 26 Jul 2021 08:15:37 +0000 Received: from nvidia.com (172.20.187.5) by HQMAIL107.nvidia.com (172.20.187.13) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Mon, 26 Jul 2021 08:15:24 +0000 To: , Ilya Maximets Date: Mon, 26 Jul 2021 11:14:54 +0300 Message-ID: <20210726081455.10632-4-elibr@nvidia.com> X-Mailer: git-send-email 2.18.1 In-Reply-To: <20210726081455.10632-1-elibr@nvidia.com> References: <20210726081455.10632-1-elibr@nvidia.com> MIME-Version: 1.0 X-Originating-IP: [172.20.187.5] X-ClientProxiedBy: HQMAIL107.nvidia.com (172.20.187.13) To HQMAIL107.nvidia.com (172.20.187.13) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 44353ba5-fe60-4d23-a70b-08d9500d8c80 X-MS-TrafficTypeDiagnostic: BY5PR12MB4097: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:8273; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: +ej2gMkUEHSZp4DRDlK2izYwjJTb1uWLZKuhuCbBAcEq7PvHf7B48hvvM/m9W4jtNfcFZowxWHym0LWAQ1XQik70geNi9frWDbNMlaElJenwZiuZQr64K0NRShsRIqIVdYoirkeYnyhvTYWWqG/XrYu1AX19mZnhVH3hJzW+F/uNJiDJ2tbgTmcQOVdHK7hufpKHxh/IiTQDxsYLAPOAaKQIEzHpIwLwtwPCPX7MTgodhUTuq+giHuddyuPBziix7wTS0AHJTC443HG7AKTdMQOz3vueaTUChNn8UBqFhfpnFYIxesF4CvXArlOPPrFeyua2XJnGhzsm4et9tzQidilSWl/uctjLUVIhBvKokBEepj2aei7RAJdhD0rsnIUcU8Qi0Ci1PLOxhKCigmuSlNezjK1zXBdCF52DGTNlHY914rANxZFDRYF92gQjmssCWKWSDIumCh5Ss1BMNlYFEn8bme1YZhx3XL2Fdmwjq9InwK39PiLWKSRyPFfkW9mJUXBHBrpnArZsWWTsK+6Xw40bQJnRMR/ZW87nTq0UQL5fuY1q6ZAPfRrmOLY4HmaWGFxrC5LJpVUV/u642D/MwTxlBFjBX7Ae6v+yVD3GipD8/D1RBdJ9siaX0jjojTVWimB1IvkrIf53X9SxGODf3kvtkMvOdIPONLtZ/n8yC7tGi/6pvFejaDlQQLYfMwp8Db1v0wck6c2nbB/tiYusjA== X-Forefront-Antispam-Report: CIP:216.228.112.34; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:schybrid03.nvidia.com; CAT:NONE; SFS:(4636009)(39860400002)(346002)(376002)(396003)(136003)(46966006)(36840700001)(1076003)(426003)(2616005)(478600001)(36906005)(7696005)(186003)(16526019)(36756003)(7636003)(8676002)(110136005)(54906003)(8936002)(2906002)(82310400003)(356005)(86362001)(26005)(4326008)(6666004)(55016002)(70206006)(6286002)(316002)(36860700001)(5660300002)(336012)(83380400001)(82740400003)(107886003)(70586007)(47076005); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Jul 2021 08:15:37.0425 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 44353ba5-fe60-4d23-a70b-08d9500d8c80 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.112.34]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: DM6NAM11FT023.eop-nam11.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR12MB4097 Cc: Eli Britstein , David Marchand , Majd Dibbiny Subject: [ovs-dev] [PATCH V3 3/4] dpif-netdev: Fix offloads of modified flows 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: Eli Britstein via dev From: Eli Britstein Reply-To: Eli Britstein Errors-To: ovs-dev-bounces@openvswitch.org Sender: "dev" Association of a mark to a flow is done as part of its offload handling, in the offloading thread. However, the PMD thread specifies whether an offload request is an "add" or "modify" by the association of a mark to the flow. This is exposed to a race condition. A flow might be created with actions that cannot be fully offloaded, for example flooding (before MAC learning), and later modified to have actions that can be fully offloaded. If the two requests are queued before the offload thread handling, they are both marked as "add". When the offload thread handles them, the first request is partially offloaded, and the second one is ignored as the flow is already considered as offloaded. Fix it by specifying add/modify of an offload request by the actual flow state change, without relying on the mark. Fixes: 3c7330ebf036 ("netdev-offload-dpdk: Support offload of output action.") Signed-off-by: Eli Britstein Reviewed-by: Gaetan Rivet --- lib/dpif-netdev.c | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c index 5fe06b996..6a7bed840 100644 --- a/lib/dpif-netdev.c +++ b/lib/dpif-netdev.c @@ -2714,10 +2714,9 @@ static void queue_netdev_flow_put(struct dp_netdev_pmd_thread *pmd, struct dp_netdev_flow *flow, struct match *match, const struct nlattr *actions, size_t actions_len, - odp_port_t orig_in_port) + odp_port_t orig_in_port, int op) { struct dp_flow_offload_item *offload; - int op; if (!netdev_is_flow_api_enabled()) { return; @@ -2730,11 +2729,6 @@ queue_netdev_flow_put(struct dp_netdev_pmd_thread *pmd, ovsthread_once_done(&offload_thread_once); } - if (flow->mark != INVALID_FLOW_MARK) { - op = DP_NETDEV_FLOW_OFFLOAD_OP_MOD; - } else { - op = DP_NETDEV_FLOW_OFFLOAD_OP_ADD; - } offload = dp_netdev_alloc_flow_offload(pmd, flow, op); offload->match = *match; offload->actions = xmalloc(actions_len); @@ -3586,7 +3580,7 @@ dp_netdev_flow_add(struct dp_netdev_pmd_thread *pmd, dp_netdev_flow_hash(&flow->ufid)); queue_netdev_flow_put(pmd, flow, match, actions, actions_len, - orig_in_port); + orig_in_port, DP_NETDEV_FLOW_OFFLOAD_OP_ADD); if (OVS_UNLIKELY(!VLOG_DROP_DBG((&upcall_rl)))) { struct ds ds = DS_EMPTY_INITIALIZER; @@ -3673,7 +3667,8 @@ flow_put_on_pmd(struct dp_netdev_pmd_thread *pmd, ovsrcu_set(&netdev_flow->actions, new_actions); queue_netdev_flow_put(pmd, netdev_flow, match, - put->actions, put->actions_len, ODPP_NONE); + put->actions, put->actions_len, ODPP_NONE, + DP_NETDEV_FLOW_OFFLOAD_OP_MOD); if (stats) { get_dpif_flow_status(pmd->dp, netdev_flow, stats, NULL);