From patchwork Sun Jun 11 15:58:27 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eli Britstein X-Patchwork-Id: 1793591 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=openvswitch.org (client-ip=140.211.166.136; helo=smtp3.osuosl.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=) Authentication-Results: legolas.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=jf0Eqkw0; dkim-atps=neutral Received: from smtp3.osuosl.org (smtp3.osuosl.org [140.211.166.136]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-384) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4QfKJ25ZDZz20fV for ; Mon, 12 Jun 2023 01:59:14 +1000 (AEST) Received: from localhost (localhost [127.0.0.1]) by smtp3.osuosl.org (Postfix) with ESMTP id 5047660E89; Sun, 11 Jun 2023 15:59:12 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp3.osuosl.org 5047660E89 Authentication-Results: smtp3.osuosl.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=jf0Eqkw0 X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp3.osuosl.org ([127.0.0.1]) by localhost (smtp3.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id WtlB0Ba6v-TT; Sun, 11 Jun 2023 15:59:11 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by smtp3.osuosl.org (Postfix) with ESMTPS id 21A0260759; Sun, 11 Jun 2023 15:59:10 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp3.osuosl.org 21A0260759 Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id E2164C008B; Sun, 11 Jun 2023 15:59:07 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@lists.linuxfoundation.org Received: from smtp1.osuosl.org (smtp1.osuosl.org [IPv6:2605:bc80:3010::138]) by lists.linuxfoundation.org (Postfix) with ESMTP id 0E3EAC0029 for ; Sun, 11 Jun 2023 15:59:07 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp1.osuosl.org (Postfix) with ESMTP id BF9728214B for ; Sun, 11 Jun 2023 15:59:05 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp1.osuosl.org BF9728214B Authentication-Results: smtp1.osuosl.org; dkim=pass (2048-bit key, unprotected) header.d=Nvidia.com header.i=@Nvidia.com header.a=rsa-sha256 header.s=selector2 header.b=jf0Eqkw0 X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp1.osuosl.org ([127.0.0.1]) by localhost (smtp1.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id wS_np5kvWCnW for ; Sun, 11 Jun 2023 15:59:05 +0000 (UTC) X-Greylist: whitelisted by SQLgrey-1.8.0 DKIM-Filter: OpenDKIM Filter v2.11.0 smtp1.osuosl.org C8ACB82157 Received: from NAM02-BN1-obe.outbound.protection.outlook.com (mail-bn1nam02on2061f.outbound.protection.outlook.com [IPv6:2a01:111:f400:7eb2::61f]) by smtp1.osuosl.org (Postfix) with ESMTPS id C8ACB82157 for ; Sun, 11 Jun 2023 15:59:04 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=gPHMPvSbyt5k4wmS6Z7TdHVx5PcUVNSfgKLWIXT7EzlF2uifgoq34oKfsrDCMdanENtFcfXvSc+tfGdLskBaWWYpLavMEVkXOFsaQBoFcmfS432X3XFMGiVMdLZqY72TPmxouHkGAEJ4mL+wtDLWl4FNUjC+GVJEasdsUGAij3v9PYY3q0HHQJPRRJxZOWJJ+rYvTN99+9wIrkn3cQJfovUwrPENCF503lbGX1EJS4saGEi8CFgtGBHRWAUy9F+C8F4zsLu43pa1Pq9XyAW5BhygKn7fyhTjg2ogHUeoZVHua228uokJOnz5kfTF2Z+ey8AMs5oHStHSUFq9D+U4Fg== 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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=favKsS4bBn8dA9I3+T63vcfwCRnQAXsRMI7zME5f1Qk=; b=SZP0JlpDM85HwjU6uEAz0PnlGuldGGrfwbF/AJFZUYTgd2EEtLjaZQ8Pc/eUc7t6XASl5pGsY2oEyZIo1wzl4roBkOjHo/xqI67jvLIQf2iU6hxjgsnwDVx5e16n7r5rGS7ACy5cqEHcZ+vx+3lIFUlTdGxmj8o/G1OPV59U5Ao1YLNDNOpcGp8jdmM6yXtOyHdRwscfIPZtBXWSoILSMMMd7ySipoyP5YZKYDr096NPa7G3jtgmHgF1R6CL0s8GzzL+YAsBDReLtcfY7yXWZYcj0+0jPcsJ26a6Vt79csbjU270utIhd2wfNOqSnW8g/lIliIxoW709y0m5A5tNyQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.160) smtp.rcpttodomain=openvswitch.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject 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=favKsS4bBn8dA9I3+T63vcfwCRnQAXsRMI7zME5f1Qk=; b=jf0Eqkw0R/sYTeTDTbree4pEFGmAOCGUamKWB7twMcWruHRH+C367f71/I/njwJoBQYr2Mjdf4K9TjwltwgA2M0mihvYbVafKEEI3AN0xtu/be6ybpCTN9n0vfLHnm5V5cOwJ3qqhn3cdGKIVZ+HhP3V/l8QiWx6qlHHJ/p6g8Ni1dL3WV3HHt9cCbTEwR2hLZdZhFrXEfTnW9YxBVY5dDgvcOUbyj1tI50OcBM47SuJtwiNIZvK+K32k+WYFOrM0qN5j/AbHBLbIAvTos59YLcxe70dy15N/tqjHr3/Zrod1ldYN3N6wUsHNewhsFeEa0bG93ewriwKd/GQNylo7g== Received: from MW4PR04CA0329.namprd04.prod.outlook.com (2603:10b6:303:82::34) by SA3PR12MB8811.namprd12.prod.outlook.com (2603:10b6:806:312::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6455.33; Sun, 11 Jun 2023 15:59:00 +0000 Received: from CO1NAM11FT089.eop-nam11.prod.protection.outlook.com (2603:10b6:303:82:cafe::49) by MW4PR04CA0329.outlook.office365.com (2603:10b6:303:82::34) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6477.33 via Frontend Transport; Sun, 11 Jun 2023 15:58:59 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.160) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.160 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.160; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.160) by CO1NAM11FT089.mail.protection.outlook.com (10.13.175.179) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6477.33 via Frontend Transport; Sun, 11 Jun 2023 15:58:59 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by mail.nvidia.com (10.129.200.66) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.5; Sun, 11 Jun 2023 08:58:58 -0700 Received: from nvidia.com (10.126.231.35) by rnnvmail201.nvidia.com (10.129.68.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.37; Sun, 11 Jun 2023 08:58:56 -0700 To: Date: Sun, 11 Jun 2023 18:58:27 +0300 Message-ID: <20230611155827.1957023-2-elibr@nvidia.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230611155827.1957023-1-elibr@nvidia.com> References: <20230611155827.1957023-1-elibr@nvidia.com> MIME-Version: 1.0 X-Originating-IP: [10.126.231.35] X-ClientProxiedBy: rnnvmail201.nvidia.com (10.129.68.8) To rnnvmail201.nvidia.com (10.129.68.8) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CO1NAM11FT089:EE_|SA3PR12MB8811:EE_ X-MS-Office365-Filtering-Correlation-Id: 0fe514cd-7cd4-4f5b-61fe-08db6a94c50f X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: cU/2z63nTU/Pvg8EogXx058yzYv2+BWPWeBWH1mpLkAGVVMzBaHcyskltg/q5vqAQKMiD9lo4xrqE2jA61pSuROAIaElEBoalXp2xdbQvdMj6Kn0xSOAMht7AQzNsAq/r/z85Bd7+BndHHssJhZzRjW6DafCWwY4suq6xxtNmzeOMXA3K+oCFpaXywuzRX1Tpybr8MUTGF2o/j/ukP/FDF4maPYj6dbcoQIoUyqeWZSddYGMgzAVbN1TT4LOFsIf+FcMSKzora2coOAOJAR9Zc6rs5csw8wbgyjvFU5nnmmCAKrSIyMndE7d0ceLCYqjtRESwyNwibb6OD++QWPFm2si0+McQ9Ku+q+D+sHVc/hthNPOJvY+dYTvl4fIUFk7eAXQa0uZPDGN5BscMc1xBycY/tLG69fGx/ibRWdokUOWxY0GKdXnjF8N0/bR1wciFQHGwqhnYFZwMkaGgf2vA9HN9Mx/QngGoSL5L5jHG7dcEDUCSRdLUPWtPkC7+CTduQ87VAKJ5LTxib6cOrqDOeyl77WD5N8jqazxy2TSgzRU65S/5u3ohUFwOgD/dwVIYQtgiiCQAkCnUb9WewmoJXoGDmy36Y4sI2NzZvXkHNweCWH7HcJVtX6+2yikErbRUZSm7m/hD7Iq/gAk3eK7XvM9J5czM2dFhcCVBApng5N5wybKCpsG0DXxjkpWWupNPCWovXuC8hkx6498SVmBVZt6FGHBuTOwQ+lA3vFns/vEFhM8O4Rp6LRUqOC3ODsg X-Forefront-Antispam-Report: CIP:216.228.117.160; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge1.nvidia.com; CAT:NONE; SFS:(13230028)(4636009)(39860400002)(396003)(136003)(346002)(376002)(451199021)(40470700004)(36840700001)(46966006)(4326008)(70206006)(6916009)(8936002)(70586007)(8676002)(36756003)(7696005)(478600001)(86362001)(41300700001)(316002)(83380400001)(40460700003)(36860700001)(356005)(6666004)(5660300002)(54906003)(55016003)(40480700001)(2906002)(186003)(16526019)(82740400003)(82310400005)(2616005)(7636003)(47076005)(6286002)(336012)(426003)(107886003)(26005)(1076003); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Jun 2023 15:58:59.5943 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 0fe514cd-7cd4-4f5b-61fe-08db6a94c50f X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.117.160]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: CO1NAM11FT089.eop-nam11.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA3PR12MB8811 Cc: wuxi_seu@163.com, Simon Horman , David Marchand , Ilya Maximets , Eli Britstein Subject: [ovs-dev] [PATCH V3 2/2] dpif-netdev: Fix flushing of a vport 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" When using a userspace vport ("vxlan0"), dpif-netdev adds an additional netdev ("vxlan_sys_4789"). The dpif netdev ("vxlan0") is added to the netdev-offload ports map, thus flows are associated on this netdev. However, flushing is done on the dpif-netdev level ("vxlan_sys_4789"), and relevant offload flows are not destroyed. To fix it, add the datapath netdev to the netdev-offload ports map. In case there is no different internal netdev, use the dpif netdev, as before. Fixes: adbd4301a249 ("netdev-offload-dpdk: Use per-netdev offload metadata.") Signed-off-by: Eli Britstein Acked-by: Simon Horman --- lib/dpif-netdev.c | 15 ++++++++++----- lib/dpif-netlink.c | 5 ++++- lib/dpif-provider.h | 5 +++-- lib/dpif.c | 8 +++++--- 4 files changed, 22 insertions(+), 11 deletions(-) diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c index 70b953ae6..52d2998d7 100644 --- a/lib/dpif-netdev.c +++ b/lib/dpif-netdev.c @@ -547,7 +547,8 @@ static int get_port_by_name(struct dp_netdev *dp, const char *devname, static void dp_netdev_free(struct dp_netdev *) OVS_REQUIRES(dp_netdev_mutex); static int do_add_port(struct dp_netdev *dp, const char *devname, - const char *type, odp_port_t port_no) + const char *type, odp_port_t port_no, + struct netdev **datapath_netdev) OVS_REQ_WRLOCK(dp->port_rwlock); static void do_del_port(struct dp_netdev *dp, struct dp_netdev_port *) OVS_REQ_WRLOCK(dp->port_rwlock); @@ -1884,7 +1885,7 @@ create_dp_netdev(const char *name, const struct dpif_class *class, error = do_add_port(dp, name, dpif_netdev_port_open_type(dp->class, "internal"), - ODPP_LOCAL); + ODPP_LOCAL, NULL); ovs_rwlock_unlock(&dp->port_rwlock); if (error) { dp_netdev_free(dp); @@ -2151,7 +2152,7 @@ out: static int do_add_port(struct dp_netdev *dp, const char *devname, const char *type, - odp_port_t port_no) + odp_port_t port_no, struct netdev **datapath_netdev) OVS_REQ_WRLOCK(dp->port_rwlock) { struct netdev_saved_flags *sf; @@ -2167,6 +2168,9 @@ do_add_port(struct dp_netdev *dp, const char *devname, const char *type, if (error) { return error; } + if (datapath_netdev) { + *datapath_netdev = port->netdev; + } hmap_insert(&dp->ports, &port->node, hash_port_no(port_no)); seq_change(dp->port_seq); @@ -2196,7 +2200,7 @@ do_add_port(struct dp_netdev *dp, const char *devname, const char *type, static int dpif_netdev_port_add(struct dpif *dpif, struct netdev *netdev, - odp_port_t *port_nop) + odp_port_t *port_nop, struct netdev **datapath_netdev) { struct dp_netdev *dp = get_dp_netdev(dpif); char namebuf[NETDEV_VPORT_NAME_BUFSIZE]; @@ -2215,7 +2219,8 @@ dpif_netdev_port_add(struct dpif *dpif, struct netdev *netdev, } if (!error) { *port_nop = port_no; - error = do_add_port(dp, dpif_port, netdev_get_type(netdev), port_no); + error = do_add_port(dp, dpif_port, netdev_get_type(netdev), port_no, + datapath_netdev); } ovs_rwlock_unlock(&dp->port_rwlock); diff --git a/lib/dpif-netlink.c b/lib/dpif-netlink.c index 60bd39643..a02f0f2d9 100644 --- a/lib/dpif-netlink.c +++ b/lib/dpif-netlink.c @@ -1144,7 +1144,7 @@ dpif_netlink_rtnl_port_create_and_add(struct dpif_netlink *dpif, static int dpif_netlink_port_add(struct dpif *dpif_, struct netdev *netdev, - odp_port_t *port_nop) + odp_port_t *port_nop, struct netdev **datapath_netdev) { struct dpif_netlink *dpif = dpif_netlink_cast(dpif_); int error = EOPNOTSUPP; @@ -1157,6 +1157,9 @@ dpif_netlink_port_add(struct dpif *dpif_, struct netdev *netdev, error = dpif_netlink_port_add_compat(dpif, netdev, port_nop); } fat_rwlock_unlock(&dpif->upcall_lock); + if (datapath_netdev) { + *datapath_netdev = netdev; + } return error; } diff --git a/lib/dpif-provider.h b/lib/dpif-provider.h index a33c6ec30..47c573d95 100644 --- a/lib/dpif-provider.h +++ b/lib/dpif-provider.h @@ -203,10 +203,11 @@ struct dpif_class { * ODPP_NONE, attempts to use that as the port's port number. * * If port is successfully added, sets '*port_no' to the new port's - * port number. Returns EBUSY if caller attempted to choose a port + * port number, and datapath_netdev to a potentially created netdev in the + * dpif-class level. Returns EBUSY if caller attempted to choose a port * number, and it was in use. */ int (*port_add)(struct dpif *dpif, struct netdev *netdev, - odp_port_t *port_no); + odp_port_t *port_no, struct netdev **datapath_netdev); /* Removes port numbered 'port_no' from 'dpif'. */ int (*port_del)(struct dpif *dpif, odp_port_t port_no); diff --git a/lib/dpif.c b/lib/dpif.c index 3305401fe..926b4ca6d 100644 --- a/lib/dpif.c +++ b/lib/dpif.c @@ -586,6 +586,7 @@ dpif_port_add(struct dpif *dpif, struct netdev *netdev, odp_port_t *port_nop) { const char *netdev_name = netdev_get_name(netdev); odp_port_t port_no = ODPP_NONE; + struct netdev *datapath_netdev; int error; COVERAGE_INC(dpif_port_add); @@ -594,7 +595,8 @@ dpif_port_add(struct dpif *dpif, struct netdev *netdev, odp_port_t *port_nop) port_no = *port_nop; } - error = dpif->dpif_class->port_add(dpif, netdev, &port_no); + error = dpif->dpif_class->port_add(dpif, netdev, &port_no, + &datapath_netdev); if (!error) { VLOG_DBG_RL(&dpmsg_rl, "%s: added %s as port %"PRIu32, dpif_name(dpif), netdev_name, port_no); @@ -604,12 +606,12 @@ dpif_port_add(struct dpif *dpif, struct netdev *netdev, odp_port_t *port_nop) const char *dpif_type_str = dpif_normalize_type(dpif_type(dpif)); struct dpif_port dpif_port; - netdev_set_dpif_type(netdev, dpif_type_str); + netdev_set_dpif_type(datapath_netdev, dpif_type_str); dpif_port.type = CONST_CAST(char *, netdev_get_type(netdev)); dpif_port.name = CONST_CAST(char *, netdev_name); dpif_port.port_no = port_no; - netdev_ports_insert(netdev, &dpif_port); + netdev_ports_insert(datapath_netdev, &dpif_port); } } else { VLOG_WARN_RL(&error_rl, "%s: failed to add %s as port: %s",