From nobody Thu Oct 9 20:22:56 2025 Received: from mail-pg1-f170.google.com (mail-pg1-f170.google.com [209.85.215.170]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1270B20C030; Mon, 16 Jun 2025 16:21:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.170 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750090882; cv=none; b=ogg1PLD7jiNZ4SOoaHeV4mVk08Ha40s0BCL/Wi2/n4Tim4F48EczC5Ito6lgI3MYvH+WRHDqbAOBmQ7Bf42bV+8SmgnMrqMRDjT0Sgo/uMgyZAxs1IWn6ww2rTzKfeAzhfIyLOSh2w1hKJc9ivC4sIZqA6pljfhjvldc6QpbccI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750090882; c=relaxed/simple; bh=JkoN2dWrcEqUNM0emlkw41oWkqb12RsAg6lhxUAnLNY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=fOfbvJHeV8Dh7NIuh5cRxWkb5iQTaIJT4+/uvuozekYbDyDjNYWST/n/Zj8u6Lm/V593yZEuWtsWTp9ZEQ41CMrqRBdtd8j1j5yEda0GGXdjU4Z4ikZP34R+q2QdjmybeiXVruzPMXW71SQmCXRRBOfsaaCNUZe2g8W85Wvt0jQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=XKV+K8WO; arc=none smtp.client-ip=209.85.215.170 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="XKV+K8WO" Received: by mail-pg1-f170.google.com with SMTP id 41be03b00d2f7-b2c4476d381so3920983a12.0; Mon, 16 Jun 2025 09:21:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1750090880; x=1750695680; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=OBk8y2WrRSYe0+qd1bXdlKUoFp7dWqpBPCvB8ZCmdDU=; b=XKV+K8WOm0jGD5QyKsFUwfAfRfz9SHvQCmmhLFpypVJnS1aZHge14zf4UoT0SZRxmh t0YGba0YnmsZD6Yp6DGY7eS+Vz5Ny6Yc7xGIbC/tkSZBnyQCggNijeVWk6dEhY6d6pO5 V0nSr1BteNC7P2uAYCKQEi3hzDlcWeFc403BZg9Bw06hIm2F76rM8xHgc8TDf4ioqngt BxvdmQc+XljNHZd+hpWHJcE34kmUwQKHj7yMN87h7BkbdFbQFOb0MYffA/+8CvZOT6bc FUxQe6LRF8AeFHxt+xaUj3fooZpjEWT4n2c22d2IJej0T634D9ybdLyHZFGLh1oqGoRB tNjw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1750090880; x=1750695680; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=OBk8y2WrRSYe0+qd1bXdlKUoFp7dWqpBPCvB8ZCmdDU=; b=k1QyztUKAzrjep3LiXQ1tkQzXpDUxyNaBit/UkOYTcTeG8ydYgwXPE+3Ku8EVwexYY rpBmFPubhH6+QstkwrrqRi5O2pZopNHTFB/kMeYUZCcaDZgN5Ybpfo+wv4566J6N+6VK yNTCZwR6RR6ezXLN/pFCKM231qlahw2YMYCOaZAqyeupiWGl8oLP/2TtrlYb3UGjpByv B066tDAhSIkvFhXtf4YyFG3Kgl9l9R+SnzpVbRjaTgs6l5wPa/WmpjzriuhK2W2QGQ0F q1Iw3OWIbW3xSMqMoGzvltWZLF0azT94Za4Vphjz3dwyw7Z/+tyTtuTQ1QLNIaDJjM9l EDHA== X-Forwarded-Encrypted: i=1; AJvYcCW6bY/k0XwiNTh/giyNbWvjlFMBMQgosuBjCFE7jLeuFPBeFGhkmse9ME+Uw0lB2VnKr/9FU0w6SoYHBxM7GmIW@vger.kernel.org, AJvYcCWNPiNBhCAd8lTZW4Yt4U/NQsfJmusRR58qd82CuuDFdzKZs58UUtUZeQuMvPO80Xu8BXJDMasWw/vCbEs=@vger.kernel.org, AJvYcCXJiUZoRMdo2J3deafRvYglrdyHNTL2OMeYpmaHYAX5s0utFL/s06bD8U6ePwb0a59QwvL0JP3nh7y7Aw==@vger.kernel.org X-Gm-Message-State: AOJu0YwxLw/a687Kcpum+kgVJXXXxFDEiMJMS3GwA3AwcRC0sa+/CEur iIk0SBzk//cKF+cLiYh3MGRnFtZ7FCTfK0mO38m0V7X+ywlavReoTfS6mrvj X-Gm-Gg: ASbGncul6fGmiYFwlpUw1zZaASLPkPKW53HxGW5w6wJoVJ6v1q7dSmFzqb9X/NGUvTK 9t2jKVljwxvZnBMidHiBqrIqbsIrBLeiUl0cCAs4bmWbQiqzhoUPgIW+BeAFOdgSLkhDaMwKze4 P2r9GzgEBhkx2lW0U3JUS7MBoPbfIyf7qSjyoTLN54BSENqd4qGVC9ZgWYbcUDXnWnQVG1XO3aH W5xKMRQzSf5M6R4FatysEebXddfIZUqa3XtRcOIPWHYBkfuXIBRqwuUl4sX1IsiCwwh8Jri7nLx r13OVmlokuLrFWHJqnHQzQe2UYoVGAy3RhExsfNYUGuJudh972lQ2Ta9FOqSmdEcuLPiIngC4iP RqgakSzzGQS43QhgP9QDgxv4= X-Google-Smtp-Source: AGHT+IHyoBgAUnwaUWLXy/Vb8z5LsefTqBIJ7QsHNJx+nbM6WP3gEInOzLa9AqIKcqN8pQhevPrvfA== X-Received: by 2002:a05:6a20:7487:b0:218:f95:f84a with SMTP id adf61e73a8af0-21fb8e7a542mr18650975637.4.1750090879810; Mon, 16 Jun 2025 09:21:19 -0700 (PDT) Received: from localhost (c-73-158-218-242.hsd1.ca.comcast.net. [73.158.218.242]) by smtp.gmail.com with UTF8SMTPSA id 41be03b00d2f7-b2fe1689814sm5944845a12.51.2025.06.16.09.21.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 16 Jun 2025 09:21:19 -0700 (PDT) From: Stanislav Fomichev To: netdev@vger.kernel.org Cc: davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, skalluru@marvell.com, manishc@marvell.com, andrew+netdev@lunn.ch, michael.chan@broadcom.com, pavan.chebbi@broadcom.com, ajit.khaparde@broadcom.com, sriharsha.basavapatna@broadcom.com, somnath.kotur@broadcom.com, anthony.l.nguyen@intel.com, przemyslaw.kitszel@intel.com, tariqt@nvidia.com, saeedm@nvidia.com, louis.peens@corigine.com, shshaikh@marvell.com, GR-Linux-NIC-Dev@marvell.com, ecree.xilinx@gmail.com, horms@kernel.org, dsahern@kernel.org, shuah@kernel.org, tglx@linutronix.de, mingo@kernel.org, ruanjinjie@huawei.com, idosch@nvidia.com, razor@blackwall.org, petrm@nvidia.com, kuniyu@google.com, sdf@fomichev.me, linux-kernel@vger.kernel.org, intel-wired-lan@lists.osuosl.org, linux-rdma@vger.kernel.org, oss-drivers@corigine.com, linux-net-drivers@amd.com, linux-kselftest@vger.kernel.org, leon@kernel.org Subject: [PATCH net-next v5 1/6] geneve: rely on rtnl lock in geneve_offload_rx_ports Date: Mon, 16 Jun 2025 09:21:12 -0700 Message-ID: <20250616162117.287806-2-stfomichev@gmail.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250616162117.287806-1-stfomichev@gmail.com> References: <20250616162117.287806-1-stfomichev@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" udp_tunnel_push_rx_port will grab mutex in the next patch so we can't use rcu. geneve_offload_rx_ports is called from geneve_netdevice_event for NETDEV_UDP_TUNNEL_PUSH_INFO and NETDEV_UDP_TUNNEL_DROP_INFO which both have ASSERT_RTNL. Entries are added to and removed from the sock_list under rtnl lock as well (when adding or removing a tunneling device). Signed-off-by: Stanislav Fomichev Reviewed-by: Nikolay Aleksandrov --- drivers/net/geneve.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/drivers/net/geneve.c b/drivers/net/geneve.c index ffc15a432689..9efedc6758bf 100644 --- a/drivers/net/geneve.c +++ b/drivers/net/geneve.c @@ -41,6 +41,7 @@ MODULE_PARM_DESC(log_ecn_error, "Log packets received wit= h corrupted ECN"); /* per-network namespace private data for this module */ struct geneve_net { struct list_head geneve_list; + /* sock_list is protected by rtnl lock */ struct list_head sock_list; }; =20 @@ -1179,8 +1180,9 @@ static void geneve_offload_rx_ports(struct net_device= *dev, bool push) struct geneve_net *gn =3D net_generic(net, geneve_net_id); struct geneve_sock *gs; =20 - rcu_read_lock(); - list_for_each_entry_rcu(gs, &gn->sock_list, list) { + ASSERT_RTNL(); + + list_for_each_entry(gs, &gn->sock_list, list) { if (push) { udp_tunnel_push_rx_port(dev, gs->sock, UDP_TUNNEL_TYPE_GENEVE); @@ -1189,7 +1191,6 @@ static void geneve_offload_rx_ports(struct net_device= *dev, bool push) UDP_TUNNEL_TYPE_GENEVE); } } - rcu_read_unlock(); } =20 /* Initialize the device structure. */ --=20 2.49.0 From nobody Thu Oct 9 20:22:56 2025 Received: from mail-pj1-f52.google.com (mail-pj1-f52.google.com [209.85.216.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 61EC4286D5D; Mon, 16 Jun 2025 16:21:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750090884; cv=none; b=qcPIwuGry2Nh/5u0sBNgpEsEkEt6bArZdH+Rry+2PP2krKQ5nFknaAR2OJauCd+53CTJgxiwl3JBnZtKWhQe0AY/YfVta2Pyp9hGecYXsDogCNLJeQjaEZYf40iVpn58SMSkadZ66dyWjGYbt0myVWisBJqxnjIWExKFnSi7gos= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750090884; c=relaxed/simple; bh=ybzdEKFoXnN30cRASg2fmf1ICH7BtS5CDfPQ1BrrNm4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=SNU6F7g9AS/plHMKwOhOaUNiiy6r+xFenOPdrsL3g8puvnaC/O28nqlEp5LjRagWdStfvZsR9gqVJfJPbLox/Y39e8gkSgZw8KI6A0S+L8KSBKwRMn097sVW9fZNtp1ROjFY4KUCpX5GouojnOO3q1iHdp6zLlHXj0+Bm+FB/do= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=mY64G0VX; arc=none smtp.client-ip=209.85.216.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="mY64G0VX" Received: by mail-pj1-f52.google.com with SMTP id 98e67ed59e1d1-3138d31e40aso4700792a91.1; Mon, 16 Jun 2025 09:21:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1750090881; x=1750695681; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=1xlGbr7S7dkulxlPf5XLC+Ja0lhJQ4XwBOGvbFljsao=; b=mY64G0VXMrKXQwt4VHoSuEbLR/IjVi4jLlAjU3gY0dVotmDoRUKn3YNkPgcXlgQl4t 82OJGlRNZEadFCGJzC81ls9SLu1jh3CjV60ND0aBcM7ZdmPAggrhU/HhKb5EF14lpvOQ 2qch9N1EPHmG2f2EHrJtQUvKuIn6G7KlcF+hsALLbf7WPKn8pS8ZoBj8EvJ0kNNh+8zd qwBy8qI+/BQPuWjxMa8stxYHxbYEZX90YC5J9tqQx3CfdYAuzka44+xQE09ThG6Ylr4p Jvru0qDhLaj7AfPT4lnxJd/wau3AppvDyGA/5+VIUfThH6Wmm0MMAwliNCVeryihe+4j 68Jg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1750090881; x=1750695681; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=1xlGbr7S7dkulxlPf5XLC+Ja0lhJQ4XwBOGvbFljsao=; b=b7d+a78HrfkJGTNr0sqvqGFzFoLQp/GVkcG5UR7nWSA1vMql/TlSfibqwrLLpF1cmH fak1eCKa/v0REEM6wCgmz6tEqpbU53yNaQeuzrH8HkQSbHfFBRBqOD8Cc051diKTZ3K/ /45yOZYe/XV2xc/yin1sVxTZugwDM8v6z+ELXn2gkB7f38YRFsAqcYWADBInlAY5vfum /Cc0VTH7AEJolSWSyq4pLWznHxlBpURaGmGmNLHxdDuvW5OOZ6NuGvuszDxgybPfs1OO AMXzpfJRJO0PXm3QZXlmBbfUGBRCt8HSDpdDl7Q2MV4AAc7zxukZPbYZPDl1JDQv/tEf StYw== X-Forwarded-Encrypted: i=1; AJvYcCU8ijIGqLNbZaxmLa5bt7flovhB7MtX2XL43wm3zpBRAB43sTQGgeP8Z+1uwUZX6Y1Ka8JRQHC+YxN5nw==@vger.kernel.org, AJvYcCUq1TDoayq54whqomthOspH5MCrnNEwsMy+PVuzdftdiyezds1LEY9NXIhJ1dqVsHEv3HaMarE0uevgKnpcJIND@vger.kernel.org, AJvYcCX8hYPNB8tZwnn9XrRIH1seNP0yQ1JNZ6DuBVzgaKtaMIEWHKlCLAt8L1nCIA0zmY5ZVCnWv9ywOTSSTM0=@vger.kernel.org X-Gm-Message-State: AOJu0Yw69feI4V5FKO3ysjB2xB5t/OMYbAEjhW4F/IstlYHVIMcWE8nH FkFXK1XShvQ3psJmJQzy3kkKNZyEA3zgUbmffvJaeftq9SHRcjV7BYBPj36W X-Gm-Gg: ASbGncvreja9JiQFQLR2xnuu1t7VZOCk/lNuv4JOLPzo5yp9jdzKTYrSsiKeajxg3Xa xIqqwa9apnvND+RDwYQfsjguwuD6nshYNuSOhQ4BCDXngOz2ZanTVcrqGUnYWyB4fwMJCvx0sNE yM6JH5yYLdb50bLVAhnn7uWpuL3gjsjs9ovs+Y9stnBF+gO4BEddqfdb7OatnHrL01FRTEbhycW rKncIDRjcXcwlE8I3i8Q9EJhyLC9QbiMDHrhN1L++GkfJiblIzTWPAtg7DGaZFHLwr9oNVI4blh thjCIYV6wtERlMtuMzrHVLt44siYAX5JDCLUg+8+zoQa39cQK5h2VSbfTL4Y1eJJPRIDwLJeawj y1ozuS9LAKkMW08qhUwQi5bs= X-Google-Smtp-Source: AGHT+IF7Gy6U2OL6gPix8g51SpcUE/2qYnFFOYPZXfOzRPgtiht0N+QO0UDM5lmm0Sw3NeYwiMvL/g== X-Received: by 2002:a17:90b:1b48:b0:311:df4b:4b91 with SMTP id 98e67ed59e1d1-313f1ca77e4mr16887983a91.7.1750090881242; Mon, 16 Jun 2025 09:21:21 -0700 (PDT) Received: from localhost (c-73-158-218-242.hsd1.ca.comcast.net. [73.158.218.242]) by smtp.gmail.com with UTF8SMTPSA id 98e67ed59e1d1-313c1b6d56bsm9952895a91.46.2025.06.16.09.21.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 16 Jun 2025 09:21:20 -0700 (PDT) From: Stanislav Fomichev To: netdev@vger.kernel.org Cc: davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, skalluru@marvell.com, manishc@marvell.com, andrew+netdev@lunn.ch, michael.chan@broadcom.com, pavan.chebbi@broadcom.com, ajit.khaparde@broadcom.com, sriharsha.basavapatna@broadcom.com, somnath.kotur@broadcom.com, anthony.l.nguyen@intel.com, przemyslaw.kitszel@intel.com, tariqt@nvidia.com, saeedm@nvidia.com, louis.peens@corigine.com, shshaikh@marvell.com, GR-Linux-NIC-Dev@marvell.com, ecree.xilinx@gmail.com, horms@kernel.org, dsahern@kernel.org, shuah@kernel.org, tglx@linutronix.de, mingo@kernel.org, ruanjinjie@huawei.com, idosch@nvidia.com, razor@blackwall.org, petrm@nvidia.com, kuniyu@google.com, sdf@fomichev.me, linux-kernel@vger.kernel.org, intel-wired-lan@lists.osuosl.org, linux-rdma@vger.kernel.org, oss-drivers@corigine.com, linux-net-drivers@amd.com, linux-kselftest@vger.kernel.org, leon@kernel.org Subject: [PATCH net-next v5 2/6] vxlan: drop sock_lock Date: Mon, 16 Jun 2025 09:21:13 -0700 Message-ID: <20250616162117.287806-3-stfomichev@gmail.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250616162117.287806-1-stfomichev@gmail.com> References: <20250616162117.287806-1-stfomichev@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" We won't be able to sleep soon in vxlan_offload_rx_ports and won't be able to grab sock_lock. Instead of having separate spinlock to manage sockets, rely on rtnl lock. This is similar to how geneve manages its sockets. Signed-off-by: Stanislav Fomichev Reviewed-by: Ido Schimmel Reviewed-by: Nikolay Aleksandrov --- drivers/net/vxlan/vxlan_core.c | 35 ++++++++++++----------------- drivers/net/vxlan/vxlan_private.h | 2 +- drivers/net/vxlan/vxlan_vnifilter.c | 18 ++++++--------- 3 files changed, 22 insertions(+), 33 deletions(-) diff --git a/drivers/net/vxlan/vxlan_core.c b/drivers/net/vxlan/vxlan_core.c index 97792de896b7..9d7249caf137 100644 --- a/drivers/net/vxlan/vxlan_core.c +++ b/drivers/net/vxlan/vxlan_core.c @@ -1485,21 +1485,18 @@ static enum skb_drop_reason vxlan_snoop(struct net_= device *dev, =20 static bool __vxlan_sock_release_prep(struct vxlan_sock *vs) { - struct vxlan_net *vn; + ASSERT_RTNL(); =20 if (!vs) return false; if (!refcount_dec_and_test(&vs->refcnt)) return false; =20 - vn =3D net_generic(sock_net(vs->sock->sk), vxlan_net_id); - spin_lock(&vn->sock_lock); hlist_del_rcu(&vs->hlist); udp_tunnel_notify_del_rx_port(vs->sock, (vs->flags & VXLAN_F_GPE) ? UDP_TUNNEL_TYPE_VXLAN_GPE : UDP_TUNNEL_TYPE_VXLAN); - spin_unlock(&vn->sock_lock); =20 return true; } @@ -2847,26 +2844,23 @@ static void vxlan_cleanup(struct timer_list *t) =20 static void vxlan_vs_del_dev(struct vxlan_dev *vxlan) { - struct vxlan_net *vn =3D net_generic(vxlan->net, vxlan_net_id); + ASSERT_RTNL(); =20 - spin_lock(&vn->sock_lock); hlist_del_init_rcu(&vxlan->hlist4.hlist); #if IS_ENABLED(CONFIG_IPV6) hlist_del_init_rcu(&vxlan->hlist6.hlist); #endif - spin_unlock(&vn->sock_lock); } =20 static void vxlan_vs_add_dev(struct vxlan_sock *vs, struct vxlan_dev *vxla= n, struct vxlan_dev_node *node) { - struct vxlan_net *vn =3D net_generic(vxlan->net, vxlan_net_id); __be32 vni =3D vxlan->default_dst.remote_vni; =20 + ASSERT_RTNL(); + node->vxlan =3D vxlan; - spin_lock(&vn->sock_lock); hlist_add_head_rcu(&node->hlist, vni_head(vs, vni)); - spin_unlock(&vn->sock_lock); } =20 /* Setup stats when device is created */ @@ -3291,9 +3285,10 @@ static void vxlan_offload_rx_ports(struct net_device= *dev, bool push) struct vxlan_net *vn =3D net_generic(net, vxlan_net_id); unsigned int i; =20 - spin_lock(&vn->sock_lock); + ASSERT_RTNL(); + for (i =3D 0; i < PORT_HASH_SIZE; ++i) { - hlist_for_each_entry_rcu(vs, &vn->sock_list[i], hlist) { + hlist_for_each_entry(vs, &vn->sock_list[i], hlist) { unsigned short type; =20 if (vs->flags & VXLAN_F_GPE) @@ -3307,7 +3302,6 @@ static void vxlan_offload_rx_ports(struct net_device = *dev, bool push) udp_tunnel_drop_rx_port(dev, vs->sock, type); } } - spin_unlock(&vn->sock_lock); } =20 /* Initialize the device structure. */ @@ -3537,12 +3531,13 @@ static struct vxlan_sock *vxlan_socket_create(struc= t net *net, bool ipv6, __be16 port, u32 flags, int ifindex) { - struct vxlan_net *vn =3D net_generic(net, vxlan_net_id); struct vxlan_sock *vs; struct socket *sock; unsigned int h; struct udp_tunnel_sock_cfg tunnel_cfg; =20 + ASSERT_RTNL(); + vs =3D kzalloc(sizeof(*vs), GFP_KERNEL); if (!vs) return ERR_PTR(-ENOMEM); @@ -3560,13 +3555,11 @@ static struct vxlan_sock *vxlan_socket_create(struc= t net *net, bool ipv6, refcount_set(&vs->refcnt, 1); vs->flags =3D (flags & VXLAN_F_RCV_FLAGS); =20 - spin_lock(&vn->sock_lock); hlist_add_head_rcu(&vs->hlist, vs_head(net, port)); udp_tunnel_notify_add_rx_port(sock, (vs->flags & VXLAN_F_GPE) ? UDP_TUNNEL_TYPE_VXLAN_GPE : UDP_TUNNEL_TYPE_VXLAN); - spin_unlock(&vn->sock_lock); =20 /* Mark socket as an encapsulation socket. */ memset(&tunnel_cfg, 0, sizeof(tunnel_cfg)); @@ -3590,26 +3583,27 @@ static struct vxlan_sock *vxlan_socket_create(struc= t net *net, bool ipv6, =20 static int __vxlan_sock_add(struct vxlan_dev *vxlan, bool ipv6) { - struct vxlan_net *vn =3D net_generic(vxlan->net, vxlan_net_id); bool metadata =3D vxlan->cfg.flags & VXLAN_F_COLLECT_METADATA; struct vxlan_sock *vs =3D NULL; struct vxlan_dev_node *node; int l3mdev_index =3D 0; =20 + ASSERT_RTNL(); + if (vxlan->cfg.remote_ifindex) l3mdev_index =3D l3mdev_master_upper_ifindex_by_index( vxlan->net, vxlan->cfg.remote_ifindex); =20 if (!vxlan->cfg.no_share) { - spin_lock(&vn->sock_lock); + rcu_read_lock(); vs =3D vxlan_find_sock(vxlan->net, ipv6 ? AF_INET6 : AF_INET, vxlan->cfg.dst_port, vxlan->cfg.flags, l3mdev_index); if (vs && !refcount_inc_not_zero(&vs->refcnt)) { - spin_unlock(&vn->sock_lock); + rcu_read_unlock(); return -EBUSY; } - spin_unlock(&vn->sock_lock); + rcu_read_unlock(); } if (!vs) vs =3D vxlan_socket_create(vxlan->net, ipv6, @@ -4875,7 +4869,6 @@ static __net_init int vxlan_init_net(struct net *net) unsigned int h; =20 INIT_LIST_HEAD(&vn->vxlan_list); - spin_lock_init(&vn->sock_lock); vn->nexthop_notifier_block.notifier_call =3D vxlan_nexthop_event; =20 for (h =3D 0; h < PORT_HASH_SIZE; ++h) diff --git a/drivers/net/vxlan/vxlan_private.h b/drivers/net/vxlan/vxlan_pr= ivate.h index d328aed9feef..6c625fb29c6c 100644 --- a/drivers/net/vxlan/vxlan_private.h +++ b/drivers/net/vxlan/vxlan_private.h @@ -19,8 +19,8 @@ extern const struct rhashtable_params vxlan_vni_rht_param= s; /* per-network namespace private data for this module */ struct vxlan_net { struct list_head vxlan_list; + /* sock_list is protected by rtnl lock */ struct hlist_head sock_list[PORT_HASH_SIZE]; - spinlock_t sock_lock; struct notifier_block nexthop_notifier_block; }; =20 diff --git a/drivers/net/vxlan/vxlan_vnifilter.c b/drivers/net/vxlan/vxlan_= vnifilter.c index 186d0660669a..4ff56d9f8f28 100644 --- a/drivers/net/vxlan/vxlan_vnifilter.c +++ b/drivers/net/vxlan/vxlan_vnifilter.c @@ -40,11 +40,11 @@ static void vxlan_vs_add_del_vninode(struct vxlan_dev *= vxlan, struct vxlan_vni_node *v, bool del) { - struct vxlan_net *vn =3D net_generic(vxlan->net, vxlan_net_id); struct vxlan_dev_node *node; struct vxlan_sock *vs; =20 - spin_lock(&vn->sock_lock); + ASSERT_RTNL(); + if (del) { if (!hlist_unhashed(&v->hlist4.hlist)) hlist_del_init_rcu(&v->hlist4.hlist); @@ -52,7 +52,7 @@ static void vxlan_vs_add_del_vninode(struct vxlan_dev *vx= lan, if (!hlist_unhashed(&v->hlist6.hlist)) hlist_del_init_rcu(&v->hlist6.hlist); #endif - goto out; + return; } =20 #if IS_ENABLED(CONFIG_IPV6) @@ -67,23 +67,21 @@ static void vxlan_vs_add_del_vninode(struct vxlan_dev *= vxlan, node =3D &v->hlist4; hlist_add_head_rcu(&node->hlist, vni_head(vs, v->vni)); } -out: - spin_unlock(&vn->sock_lock); } =20 void vxlan_vs_add_vnigrp(struct vxlan_dev *vxlan, struct vxlan_sock *vs, bool ipv6) { - struct vxlan_net *vn =3D net_generic(vxlan->net, vxlan_net_id); struct vxlan_vni_group *vg =3D rtnl_dereference(vxlan->vnigrp); struct vxlan_vni_node *v, *tmp; struct vxlan_dev_node *node; =20 + ASSERT_RTNL(); + if (!vg) return; =20 - spin_lock(&vn->sock_lock); list_for_each_entry_safe(v, tmp, &vg->vni_list, vlist) { #if IS_ENABLED(CONFIG_IPV6) if (ipv6) @@ -94,26 +92,24 @@ void vxlan_vs_add_vnigrp(struct vxlan_dev *vxlan, node->vxlan =3D vxlan; hlist_add_head_rcu(&node->hlist, vni_head(vs, v->vni)); } - spin_unlock(&vn->sock_lock); } =20 void vxlan_vs_del_vnigrp(struct vxlan_dev *vxlan) { struct vxlan_vni_group *vg =3D rtnl_dereference(vxlan->vnigrp); - struct vxlan_net *vn =3D net_generic(vxlan->net, vxlan_net_id); struct vxlan_vni_node *v, *tmp; =20 + ASSERT_RTNL(); + if (!vg) return; =20 - spin_lock(&vn->sock_lock); list_for_each_entry_safe(v, tmp, &vg->vni_list, vlist) { hlist_del_init_rcu(&v->hlist4.hlist); #if IS_ENABLED(CONFIG_IPV6) hlist_del_init_rcu(&v->hlist6.hlist); #endif } - spin_unlock(&vn->sock_lock); } =20 static void vxlan_vnifilter_stats_get(const struct vxlan_vni_node *vninode, --=20 2.49.0 From nobody Thu Oct 9 20:22:56 2025 Received: from mail-pl1-f182.google.com (mail-pl1-f182.google.com [209.85.214.182]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 014F220FAA4; Mon, 16 Jun 2025 16:21:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.182 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750090886; cv=none; b=AnMnVUknBhyW8oLdL2MRMGthPYyv4li2WBzChjNsEE7cTqq3bxOa7bH0Xig7DqqgczffWzvSmNtIMGDbqzZLCsVT1wtWgVilOVHU8NciJ2JVVUHNuK3cHlJwxB621J1ROnG89f8/HpSRQ8ZWMKXaxX7/VNheD0dakOwSlB+bBJM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750090886; c=relaxed/simple; bh=KY6IiRl6p2PlEPEvdZnbvsSCfFOcMhrTRPlkAhtYd20=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=betKugUmLR9vZPBXL4140IVQQj+phBQv5G+/1V0ZUXWdyDHIp2+yXFJQ4uFv6BfPY/Ulk8BKgs08mj3tM6+rwuFK8cE+KtBHoGPuv42KtPN/nAk8CMFyFxb48t2jMc50srQIEM3t77fkzSX7k1LJS6yJgBK42REL7YaNkqs+M6Y= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=ifz+QRt0; arc=none smtp.client-ip=209.85.214.182 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="ifz+QRt0" Received: by mail-pl1-f182.google.com with SMTP id d9443c01a7336-235ea292956so42141295ad.1; Mon, 16 Jun 2025 09:21:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1750090883; x=1750695683; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=eEUUsHlzqWUQPhx/paAUd1ykUlSo8UWhiWmoQqL46tk=; b=ifz+QRt0ZzkZVuWF6atohIrGyBhsqVBAkUbrcCxrbJE9lXLf0U1GviDt9nMkC6b9ya WEqP4MVjNNWO1lt/5746bnxRyriVEbLpqpOQAHJ2Uxw/HsQOXHiLXqtzepHpx3y3Zy8G NnxznBLO//OnpFT5dyBw4hsUUEabLuZ1UFA//vwde8RXFnTW5f7duslKOWQlKRMBYMVd I3Xv0ibSBnh6r3Y2TzxLmvPsCUi4zup2l/exeEfhzcgInFaZpmBeDPORp8OmO9TdWVel Fjjo3R3eh+smCeKV4KiEjPUttgArGaC0imOKYBendBGsaukPc9wg7kWiZIDTQh5OkGJR WrMw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1750090883; x=1750695683; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=eEUUsHlzqWUQPhx/paAUd1ykUlSo8UWhiWmoQqL46tk=; b=b7G5IH/8norVPRkRzumSjv3kITANIlKVjNjMrYzu+NVEeNiy/li/U+pMrNzDt5POdN 8DY3fao6Qsizbtjppa0KFSLKKfef2aK/dDEv/iCTFcq+d/Mzkego6n/aDBs44vnDyE3K wkz0OmP/SUmYWVI30KYIY/jFVpmROklXc0JUWqSLcDMZsz1ZIlDhxMuv6WGHVgLUHvYf brZpbt3oNoupuD4iBocp9RT0MafDfnGw3k8gBBahTh20dTchmcIZFqcaluRKfZMk1SvB fUHo3xnRrQc3/xneE4biCIlYCrbhkCmDJPrg8Ff9jK3xCMXDFcAf9oJgtDxc1oKYO2dD igRQ== X-Forwarded-Encrypted: i=1; AJvYcCUBNGwECDy9qIAx9mS7gxXeXieT1MDKf3AFFJmeJMJ4BZcErTao/8Q/rlye5Cgjk4iTEVArMD4GNUUhejNmHiyA@vger.kernel.org, AJvYcCUpCKmQjXGZ9zrhGc9bd4FYwV6sUkL8U/Q039ZusZ0ia94CvM9KShOLxSKOdGg1AkDY9xHKf4LHsofLifM=@vger.kernel.org, AJvYcCX7TyYRBJYq4EHi25vei+7DTrcLxBAPzNC7u9Vx1IbagiXVwbkPa/NuDUS4NwdBfYmN7kztKQL0rCPcPw==@vger.kernel.org X-Gm-Message-State: AOJu0YxH2M5ntLS4oz/ztxPmHfOFrekdroKlL2w8yTJPQpsdGbUyci/e w7k3zYm57/6LEJ/KfEtxYqyuCCK+tafxFtGWNyYCFfwQbuQqG1LkFyg/cFdc X-Gm-Gg: ASbGncvM7iv3qyys0QuvY18DRhzFN7j1SM28LGFqoP8rog4X2iIuxy/UMZz28M9yshp lECujsz8/DrmjRCTYTe4XcLxi4A9DOf+y87bD+QwhfcCXEtOh7sY8rq7HsujUdTp9xm2qxsm1ol 2qDv1Z8ifC8YGfHdzz21nKeFpjtAzD3QryZ04ZQK4GQ/9bT1JoOMlRC0Dmn0GptfWLF+0fxXxBT kw6fT4cngKaslva+GOgjnPffSRdJl1N9Jk5knOvOwXHA0XQzfHXxovPNV2SpRholk/BWz/TJ21r HIA+xbBX4/DaJ/no78M3fajl971m5ZPp8qgCQbYOXfVn3mioxWmMgwY4Ta3LqAoJmxuxhrpZXcj UIUGG5LGGBjlmQCGprUMS2DM= X-Google-Smtp-Source: AGHT+IFVtwHur230ABZ+F3dpDob/8VZnaMCzxdgSsvSbg8eDNxQGKmLOd+byj774QWmhx80wWzGP2w== X-Received: by 2002:a17:902:e54a:b0:235:ef67:b5a0 with SMTP id d9443c01a7336-2366b14e37amr154528915ad.36.1750090882657; Mon, 16 Jun 2025 09:21:22 -0700 (PDT) Received: from localhost (c-73-158-218-242.hsd1.ca.comcast.net. [73.158.218.242]) by smtp.gmail.com with UTF8SMTPSA id d9443c01a7336-2365dea88desm63131615ad.150.2025.06.16.09.21.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 16 Jun 2025 09:21:22 -0700 (PDT) From: Stanislav Fomichev To: netdev@vger.kernel.org Cc: davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, skalluru@marvell.com, manishc@marvell.com, andrew+netdev@lunn.ch, michael.chan@broadcom.com, pavan.chebbi@broadcom.com, ajit.khaparde@broadcom.com, sriharsha.basavapatna@broadcom.com, somnath.kotur@broadcom.com, anthony.l.nguyen@intel.com, przemyslaw.kitszel@intel.com, tariqt@nvidia.com, saeedm@nvidia.com, louis.peens@corigine.com, shshaikh@marvell.com, GR-Linux-NIC-Dev@marvell.com, ecree.xilinx@gmail.com, horms@kernel.org, dsahern@kernel.org, shuah@kernel.org, tglx@linutronix.de, mingo@kernel.org, ruanjinjie@huawei.com, idosch@nvidia.com, razor@blackwall.org, petrm@nvidia.com, kuniyu@google.com, sdf@fomichev.me, linux-kernel@vger.kernel.org, intel-wired-lan@lists.osuosl.org, linux-rdma@vger.kernel.org, oss-drivers@corigine.com, linux-net-drivers@amd.com, linux-kselftest@vger.kernel.org, leon@kernel.org Subject: [PATCH net-next v5 3/6] udp_tunnel: remove rtnl_lock dependency Date: Mon, 16 Jun 2025 09:21:14 -0700 Message-ID: <20250616162117.287806-4-stfomichev@gmail.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250616162117.287806-1-stfomichev@gmail.com> References: <20250616162117.287806-1-stfomichev@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Drivers that are using ops lock and don't depend on RTNL lock still need to manage it because udp_tunnel's RTNL dependency. Introduce new udp_tunnel_nic_lock and use it instead of rtnl_lock. Drop non-UDP_TUNNEL_NIC_INFO_MAY_SLEEP mode from udp_tunnel infra (udp_tunnel_nic_device_sync_work needs to grab udp_tunnel_nic_lock mutex and might sleep). Cover more places in v4: - netlink - udp_tunnel_notify_add_rx_port (ndo_open) - triggers udp_tunnel_nic_device_sync_work - udp_tunnel_notify_del_rx_port (ndo_stop) - triggers udp_tunnel_nic_device_sync_work - udp_tunnel_get_rx_info (__netdev_update_features) - triggers NETDEV_UDP_TUNNEL_PUSH_INFO - udp_tunnel_drop_rx_info (__netdev_update_features) - triggers NETDEV_UDP_TUNNEL_DROP_INFO - udp_tunnel_nic_reset_ntf (ndo_open) - notifiers - udp_tunnel_nic_netdevice_event, depending on the event: - triggers NETDEV_UDP_TUNNEL_PUSH_INFO - triggers NETDEV_UDP_TUNNEL_DROP_INFO - ethnl_tunnel_info_reply_size - udp_tunnel_nic_set_port_priv (two intel drivers) Cc: Michael Chan Suggested-by: Jakub Kicinski Signed-off-by: Stanislav Fomichev --- .../net/ethernet/broadcom/bnx2x/bnx2x_main.c | 3 +- drivers/net/ethernet/broadcom/bnxt/bnxt.c | 6 +- drivers/net/ethernet/emulex/benet/be_main.c | 3 +- drivers/net/ethernet/intel/i40e/i40e_main.c | 1 - drivers/net/ethernet/intel/ice/ice_main.c | 1 - .../net/ethernet/mellanox/mlx4/en_netdev.c | 3 +- .../net/ethernet/mellanox/mlx5/core/en_main.c | 3 +- .../ethernet/netronome/nfp/nfp_net_common.c | 3 +- .../net/ethernet/qlogic/qede/qede_filter.c | 3 - .../net/ethernet/qlogic/qlcnic/qlcnic_main.c | 1 - drivers/net/ethernet/sfc/ef10.c | 1 - drivers/net/netdevsim/udp_tunnels.c | 4 - include/net/udp_tunnel.h | 87 ++++++++++++++----- net/core/dev.c | 2 + net/ipv4/udp_tunnel_core.c | 16 ++-- net/ipv4/udp_tunnel_nic.c | 78 +++++++++++++---- 16 files changed, 142 insertions(+), 73 deletions(-) diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c b/drivers/net= /ethernet/broadcom/bnx2x/bnx2x_main.c index c9a1a1d504c0..3ee4b848ef53 100644 --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c @@ -10219,8 +10219,7 @@ static int bnx2x_udp_tunnel_sync(struct net_device = *netdev, unsigned int table) =20 static const struct udp_tunnel_nic_info bnx2x_udp_tunnels =3D { .sync_table =3D bnx2x_udp_tunnel_sync, - .flags =3D UDP_TUNNEL_NIC_INFO_MAY_SLEEP | - UDP_TUNNEL_NIC_INFO_OPEN_ONLY, + .flags =3D UDP_TUNNEL_NIC_INFO_OPEN_ONLY, .tables =3D { { .n_entries =3D 1, .tunnel_types =3D UDP_TUNNEL_TYPE_VXLAN, }, { .n_entries =3D 1, .tunnel_types =3D UDP_TUNNEL_TYPE_GENEVE, }, diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethern= et/broadcom/bnxt/bnxt.c index 869580b6f70d..7946586802af 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c @@ -15573,8 +15573,7 @@ static int bnxt_udp_tunnel_unset_port(struct net_de= vice *netdev, unsigned int ta static const struct udp_tunnel_nic_info bnxt_udp_tunnels =3D { .set_port =3D bnxt_udp_tunnel_set_port, .unset_port =3D bnxt_udp_tunnel_unset_port, - .flags =3D UDP_TUNNEL_NIC_INFO_MAY_SLEEP | - UDP_TUNNEL_NIC_INFO_OPEN_ONLY, + .flags =3D UDP_TUNNEL_NIC_INFO_OPEN_ONLY, .tables =3D { { .n_entries =3D 1, .tunnel_types =3D UDP_TUNNEL_TYPE_VXLAN, }, { .n_entries =3D 1, .tunnel_types =3D UDP_TUNNEL_TYPE_GENEVE, }, @@ -15582,8 +15581,7 @@ static const struct udp_tunnel_nic_info bnxt_udp_tu= nnels =3D { }, bnxt_udp_tunnels_p7 =3D { .set_port =3D bnxt_udp_tunnel_set_port, .unset_port =3D bnxt_udp_tunnel_unset_port, - .flags =3D UDP_TUNNEL_NIC_INFO_MAY_SLEEP | - UDP_TUNNEL_NIC_INFO_OPEN_ONLY, + .flags =3D UDP_TUNNEL_NIC_INFO_OPEN_ONLY, .tables =3D { { .n_entries =3D 1, .tunnel_types =3D UDP_TUNNEL_TYPE_VXLAN, }, { .n_entries =3D 1, .tunnel_types =3D UDP_TUNNEL_TYPE_GENEVE, }, diff --git a/drivers/net/ethernet/emulex/benet/be_main.c b/drivers/net/ethe= rnet/emulex/benet/be_main.c index 3d2e21592119..f49400ba9729 100644 --- a/drivers/net/ethernet/emulex/benet/be_main.c +++ b/drivers/net/ethernet/emulex/benet/be_main.c @@ -4031,8 +4031,7 @@ static int be_vxlan_unset_port(struct net_device *net= dev, unsigned int table, static const struct udp_tunnel_nic_info be_udp_tunnels =3D { .set_port =3D be_vxlan_set_port, .unset_port =3D be_vxlan_unset_port, - .flags =3D UDP_TUNNEL_NIC_INFO_MAY_SLEEP | - UDP_TUNNEL_NIC_INFO_OPEN_ONLY, + .flags =3D UDP_TUNNEL_NIC_INFO_OPEN_ONLY, .tables =3D { { .n_entries =3D 1, .tunnel_types =3D UDP_TUNNEL_TYPE_VXLAN, }, }, diff --git a/drivers/net/ethernet/intel/i40e/i40e_main.c b/drivers/net/ethe= rnet/intel/i40e/i40e_main.c index 1156a5b3055c..3b4f59d978a5 100644 --- a/drivers/net/ethernet/intel/i40e/i40e_main.c +++ b/drivers/net/ethernet/intel/i40e/i40e_main.c @@ -15895,7 +15895,6 @@ static int i40e_probe(struct pci_dev *pdev, const s= truct pci_device_id *ent) =20 pf->udp_tunnel_nic.set_port =3D i40e_udp_tunnel_set_port; pf->udp_tunnel_nic.unset_port =3D i40e_udp_tunnel_unset_port; - pf->udp_tunnel_nic.flags =3D UDP_TUNNEL_NIC_INFO_MAY_SLEEP; pf->udp_tunnel_nic.shared =3D &pf->udp_tunnel_shared; pf->udp_tunnel_nic.tables[0].n_entries =3D I40E_MAX_PF_UDP_OFFLOAD_PORTS; pf->udp_tunnel_nic.tables[0].tunnel_types =3D UDP_TUNNEL_TYPE_VXLAN | diff --git a/drivers/net/ethernet/intel/ice/ice_main.c b/drivers/net/ethern= et/intel/ice/ice_main.c index 7959a65c0903..f8ef80069e3d 100644 --- a/drivers/net/ethernet/intel/ice/ice_main.c +++ b/drivers/net/ethernet/intel/ice/ice_main.c @@ -4767,7 +4767,6 @@ int ice_init_dev(struct ice_pf *pf) =20 pf->hw.udp_tunnel_nic.set_port =3D ice_udp_tunnel_set_port; pf->hw.udp_tunnel_nic.unset_port =3D ice_udp_tunnel_unset_port; - pf->hw.udp_tunnel_nic.flags =3D UDP_TUNNEL_NIC_INFO_MAY_SLEEP; pf->hw.udp_tunnel_nic.shared =3D &pf->hw.udp_tunnel_shared; if (pf->hw.tnl.valid_count[TNL_VXLAN]) { pf->hw.udp_tunnel_nic.tables[0].n_entries =3D diff --git a/drivers/net/ethernet/mellanox/mlx4/en_netdev.c b/drivers/net/e= thernet/mellanox/mlx4/en_netdev.c index 281b34af0bb4..d2071aff7b8f 100644 --- a/drivers/net/ethernet/mellanox/mlx4/en_netdev.c +++ b/drivers/net/ethernet/mellanox/mlx4/en_netdev.c @@ -2670,8 +2670,7 @@ static int mlx4_udp_tunnel_sync(struct net_device *de= v, unsigned int table) =20 static const struct udp_tunnel_nic_info mlx4_udp_tunnels =3D { .sync_table =3D mlx4_udp_tunnel_sync, - .flags =3D UDP_TUNNEL_NIC_INFO_MAY_SLEEP | - UDP_TUNNEL_NIC_INFO_IPV4_ONLY, + .flags =3D UDP_TUNNEL_NIC_INFO_IPV4_ONLY, .tables =3D { { .n_entries =3D 1, .tunnel_types =3D UDP_TUNNEL_TYPE_VXLAN, }, }, diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c b/drivers/ne= t/ethernet/mellanox/mlx5/core/en_main.c index ea822c69d137..ccde53f94045 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c @@ -5303,8 +5303,7 @@ void mlx5e_vxlan_set_netdev_info(struct mlx5e_priv *p= riv) =20 priv->nic_info.set_port =3D mlx5e_vxlan_set_port; priv->nic_info.unset_port =3D mlx5e_vxlan_unset_port; - priv->nic_info.flags =3D UDP_TUNNEL_NIC_INFO_MAY_SLEEP | - UDP_TUNNEL_NIC_INFO_STATIC_IANA_VXLAN; + priv->nic_info.flags =3D UDP_TUNNEL_NIC_INFO_STATIC_IANA_VXLAN; priv->nic_info.tables[0].tunnel_types =3D UDP_TUNNEL_TYPE_VXLAN; /* Don't count the space hard-coded to the IANA port */ priv->nic_info.tables[0].n_entries =3D diff --git a/drivers/net/ethernet/netronome/nfp/nfp_net_common.c b/drivers/= net/ethernet/netronome/nfp/nfp_net_common.c index 932f59d70f41..132626a3f9f7 100644 --- a/drivers/net/ethernet/netronome/nfp/nfp_net_common.c +++ b/drivers/net/ethernet/netronome/nfp/nfp_net_common.c @@ -2394,8 +2394,7 @@ static int nfp_udp_tunnel_sync(struct net_device *net= dev, unsigned int table) =20 static const struct udp_tunnel_nic_info nfp_udp_tunnels =3D { .sync_table =3D nfp_udp_tunnel_sync, - .flags =3D UDP_TUNNEL_NIC_INFO_MAY_SLEEP | - UDP_TUNNEL_NIC_INFO_OPEN_ONLY, + .flags =3D UDP_TUNNEL_NIC_INFO_OPEN_ONLY, .tables =3D { { .n_entries =3D NFP_NET_N_VXLAN_PORTS, diff --git a/drivers/net/ethernet/qlogic/qede/qede_filter.c b/drivers/net/e= thernet/qlogic/qede/qede_filter.c index 985026dd816f..7e341e026489 100644 --- a/drivers/net/ethernet/qlogic/qede/qede_filter.c +++ b/drivers/net/ethernet/qlogic/qede/qede_filter.c @@ -987,20 +987,17 @@ static int qede_udp_tunnel_sync(struct net_device *de= v, unsigned int table) =20 static const struct udp_tunnel_nic_info qede_udp_tunnels_both =3D { .sync_table =3D qede_udp_tunnel_sync, - .flags =3D UDP_TUNNEL_NIC_INFO_MAY_SLEEP, .tables =3D { { .n_entries =3D 1, .tunnel_types =3D UDP_TUNNEL_TYPE_VXLAN, }, { .n_entries =3D 1, .tunnel_types =3D UDP_TUNNEL_TYPE_GENEVE, }, }, }, qede_udp_tunnels_vxlan =3D { .sync_table =3D qede_udp_tunnel_sync, - .flags =3D UDP_TUNNEL_NIC_INFO_MAY_SLEEP, .tables =3D { { .n_entries =3D 1, .tunnel_types =3D UDP_TUNNEL_TYPE_VXLAN, }, }, }, qede_udp_tunnels_geneve =3D { .sync_table =3D qede_udp_tunnel_sync, - .flags =3D UDP_TUNNEL_NIC_INFO_MAY_SLEEP, .tables =3D { { .n_entries =3D 1, .tunnel_types =3D UDP_TUNNEL_TYPE_GENEVE, }, }, diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c b/drivers/net= /ethernet/qlogic/qlcnic/qlcnic_main.c index eb69121df726..53cdd36c4123 100644 --- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c +++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c @@ -486,7 +486,6 @@ static int qlcnic_udp_tunnel_sync(struct net_device *de= v, unsigned int table) =20 static const struct udp_tunnel_nic_info qlcnic_udp_tunnels =3D { .sync_table =3D qlcnic_udp_tunnel_sync, - .flags =3D UDP_TUNNEL_NIC_INFO_MAY_SLEEP, .tables =3D { { .n_entries =3D 1, .tunnel_types =3D UDP_TUNNEL_TYPE_VXLAN, }, }, diff --git a/drivers/net/ethernet/sfc/ef10.c b/drivers/net/ethernet/sfc/ef1= 0.c index 47349c148c0c..fcec81f862ec 100644 --- a/drivers/net/ethernet/sfc/ef10.c +++ b/drivers/net/ethernet/sfc/ef10.c @@ -3985,7 +3985,6 @@ static int efx_ef10_udp_tnl_unset_port(struct net_dev= ice *dev, static const struct udp_tunnel_nic_info efx_ef10_udp_tunnels =3D { .set_port =3D efx_ef10_udp_tnl_set_port, .unset_port =3D efx_ef10_udp_tnl_unset_port, - .flags =3D UDP_TUNNEL_NIC_INFO_MAY_SLEEP, .tables =3D { { .n_entries =3D 16, diff --git a/drivers/net/netdevsim/udp_tunnels.c b/drivers/net/netdevsim/ud= p_tunnels.c index 640b4983a9a0..10cbbf1c584b 100644 --- a/drivers/net/netdevsim/udp_tunnels.c +++ b/drivers/net/netdevsim/udp_tunnels.c @@ -112,12 +112,10 @@ nsim_udp_tunnels_info_reset_write(struct file *file, = const char __user *data, struct net_device *dev =3D file->private_data; struct netdevsim *ns =3D netdev_priv(dev); =20 - rtnl_lock(); if (dev->reg_state =3D=3D NETREG_REGISTERED) { memset(ns->udp_ports.ports, 0, sizeof(ns->udp_ports.__ports)); udp_tunnel_nic_reset_ntf(dev); } - rtnl_unlock(); =20 return count; } @@ -181,8 +179,6 @@ int nsim_udp_tunnels_info_create(struct nsim_dev *nsim_= dev, info->sync_table =3D NULL; } =20 - if (ns->udp_ports.sleep) - info->flags |=3D UDP_TUNNEL_NIC_INFO_MAY_SLEEP; if (nsim_dev->udp_ports.open_only) info->flags |=3D UDP_TUNNEL_NIC_INFO_OPEN_ONLY; if (nsim_dev->udp_ports.ipv4_only) diff --git a/include/net/udp_tunnel.h b/include/net/udp_tunnel.h index 2df3b8344eb5..0106e2dc2af1 100644 --- a/include/net/udp_tunnel.h +++ b/include/net/udp_tunnel.h @@ -130,22 +130,6 @@ void udp_tunnel_drop_rx_port(struct net_device *dev, s= truct socket *sock, void udp_tunnel_notify_add_rx_port(struct socket *sock, unsigned short typ= e); void udp_tunnel_notify_del_rx_port(struct socket *sock, unsigned short typ= e); =20 -static inline void udp_tunnel_get_rx_info(struct net_device *dev) -{ - ASSERT_RTNL(); - if (!(dev->features & NETIF_F_RX_UDP_TUNNEL_PORT)) - return; - call_netdevice_notifiers(NETDEV_UDP_TUNNEL_PUSH_INFO, dev); -} - -static inline void udp_tunnel_drop_rx_info(struct net_device *dev) -{ - ASSERT_RTNL(); - if (!(dev->features & NETIF_F_RX_UDP_TUNNEL_PORT)) - return; - call_netdevice_notifiers(NETDEV_UDP_TUNNEL_DROP_INFO, dev); -} - /* Transmit the skb using UDP encapsulation. */ void udp_tunnel_xmit_skb(struct rtable *rt, struct sock *sk, struct sk_buf= f *skb, __be32 src, __be32 dst, __u8 tos, __u8 ttl, @@ -221,19 +205,17 @@ static inline void udp_tunnel_encap_enable(struct soc= k *sk) #define UDP_TUNNEL_NIC_MAX_TABLES 4 =20 enum udp_tunnel_nic_info_flags { - /* Device callbacks may sleep */ - UDP_TUNNEL_NIC_INFO_MAY_SLEEP =3D BIT(0), /* Device only supports offloads when it's open, all ports * will be removed before close and re-added after open. */ - UDP_TUNNEL_NIC_INFO_OPEN_ONLY =3D BIT(1), + UDP_TUNNEL_NIC_INFO_OPEN_ONLY =3D BIT(0), /* Device supports only IPv4 tunnels */ - UDP_TUNNEL_NIC_INFO_IPV4_ONLY =3D BIT(2), + UDP_TUNNEL_NIC_INFO_IPV4_ONLY =3D BIT(1), /* Device has hard-coded the IANA VXLAN port (4789) as VXLAN. * This port must not be counted towards n_entries of any table. * Driver will not receive any callback associated with port 4789. */ - UDP_TUNNEL_NIC_INFO_STATIC_IANA_VXLAN =3D BIT(3), + UDP_TUNNEL_NIC_INFO_STATIC_IANA_VXLAN =3D BIT(2), }; =20 struct udp_tunnel_nic; @@ -324,6 +306,9 @@ struct udp_tunnel_nic_ops { size_t (*dump_size)(struct net_device *dev, unsigned int table); int (*dump_write)(struct net_device *dev, unsigned int table, struct sk_buff *skb); + void (*assert_locked)(struct net_device *dev); + void (*lock)(struct net_device *dev); + void (*unlock)(struct net_device *dev); }; =20 #ifdef CONFIG_INET @@ -352,8 +337,29 @@ static inline void udp_tunnel_nic_set_port_priv(struct net_device *dev, unsigned int table, unsigned int idx, u8 priv) { - if (udp_tunnel_nic_ops) + if (udp_tunnel_nic_ops) { + udp_tunnel_nic_ops->lock(dev); udp_tunnel_nic_ops->set_port_priv(dev, table, idx, priv); + udp_tunnel_nic_ops->unlock(dev); + } +} + +static inline void udp_tunnel_nic_assert_locked(struct net_device *dev) +{ + if (udp_tunnel_nic_ops) + udp_tunnel_nic_ops->assert_locked(dev); +} + +static inline void udp_tunnel_nic_lock(struct net_device *dev) +{ + if (udp_tunnel_nic_ops) + udp_tunnel_nic_ops->lock(dev); +} + +static inline void udp_tunnel_nic_unlock(struct net_device *dev) +{ + if (udp_tunnel_nic_ops) + udp_tunnel_nic_ops->unlock(dev); } =20 static inline void @@ -395,17 +401,50 @@ static inline void udp_tunnel_nic_reset_ntf(struct ne= t_device *dev) static inline size_t udp_tunnel_nic_dump_size(struct net_device *dev, unsigned int table) { + size_t ret; + if (!udp_tunnel_nic_ops) return 0; - return udp_tunnel_nic_ops->dump_size(dev, table); + + udp_tunnel_nic_ops->lock(dev); + ret =3D udp_tunnel_nic_ops->dump_size(dev, table); + udp_tunnel_nic_ops->unlock(dev); + + return ret; } =20 static inline int udp_tunnel_nic_dump_write(struct net_device *dev, unsigned int table, struct sk_buff *skb) { + int ret; + if (!udp_tunnel_nic_ops) return 0; - return udp_tunnel_nic_ops->dump_write(dev, table, skb); + + udp_tunnel_nic_ops->lock(dev); + ret =3D udp_tunnel_nic_ops->dump_write(dev, table, skb); + udp_tunnel_nic_ops->unlock(dev); + + return ret; +} + +static inline void udp_tunnel_get_rx_info(struct net_device *dev) +{ + ASSERT_RTNL(); + if (!(dev->features & NETIF_F_RX_UDP_TUNNEL_PORT)) + return; + udp_tunnel_nic_assert_locked(dev); + call_netdevice_notifiers(NETDEV_UDP_TUNNEL_PUSH_INFO, dev); } + +static inline void udp_tunnel_drop_rx_info(struct net_device *dev) +{ + ASSERT_RTNL(); + if (!(dev->features & NETIF_F_RX_UDP_TUNNEL_PORT)) + return; + udp_tunnel_nic_assert_locked(dev); + call_netdevice_notifiers(NETDEV_UDP_TUNNEL_DROP_INFO, dev); +} + #endif diff --git a/net/core/dev.c b/net/core/dev.c index 5baa4691074f..43f56b44f351 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -10771,12 +10771,14 @@ int __netdev_update_features(struct net_device *d= ev) * *before* calling udp_tunnel_get_rx_info, * but *after* calling udp_tunnel_drop_rx_info. */ + udp_tunnel_nic_lock(dev); if (features & NETIF_F_RX_UDP_TUNNEL_PORT) { dev->features =3D features; udp_tunnel_get_rx_info(dev); } else { udp_tunnel_drop_rx_info(dev); } + udp_tunnel_nic_unlock(dev); } =20 if (diff & NETIF_F_HW_VLAN_CTAG_FILTER) { diff --git a/net/ipv4/udp_tunnel_core.c b/net/ipv4/udp_tunnel_core.c index 2326548997d3..433283dd0e70 100644 --- a/net/ipv4/udp_tunnel_core.c +++ b/net/ipv4/udp_tunnel_core.c @@ -134,15 +134,17 @@ void udp_tunnel_notify_add_rx_port(struct socket *soc= k, unsigned short type) struct udp_tunnel_info ti; struct net_device *dev; =20 + ASSERT_RTNL(); + ti.type =3D type; ti.sa_family =3D sk->sk_family; ti.port =3D inet_sk(sk)->inet_sport; =20 - rcu_read_lock(); - for_each_netdev_rcu(net, dev) { + for_each_netdev(net, dev) { + udp_tunnel_nic_lock(dev); udp_tunnel_nic_add_port(dev, &ti); + udp_tunnel_nic_unlock(dev); } - rcu_read_unlock(); } EXPORT_SYMBOL_GPL(udp_tunnel_notify_add_rx_port); =20 @@ -154,15 +156,17 @@ void udp_tunnel_notify_del_rx_port(struct socket *soc= k, unsigned short type) struct udp_tunnel_info ti; struct net_device *dev; =20 + ASSERT_RTNL(); + ti.type =3D type; ti.sa_family =3D sk->sk_family; ti.port =3D inet_sk(sk)->inet_sport; =20 - rcu_read_lock(); - for_each_netdev_rcu(net, dev) { + for_each_netdev(net, dev) { + udp_tunnel_nic_lock(dev); udp_tunnel_nic_del_port(dev, &ti); + udp_tunnel_nic_unlock(dev); } - rcu_read_unlock(); } EXPORT_SYMBOL_GPL(udp_tunnel_notify_del_rx_port); =20 diff --git a/net/ipv4/udp_tunnel_nic.c b/net/ipv4/udp_tunnel_nic.c index b6d2d16189c0..ff66db48453c 100644 --- a/net/ipv4/udp_tunnel_nic.c +++ b/net/ipv4/udp_tunnel_nic.c @@ -29,6 +29,7 @@ struct udp_tunnel_nic_table_entry { * struct udp_tunnel_nic - UDP tunnel port offload state * @work: async work for talking to hardware from process context * @dev: netdev pointer + * @lock: protects all fields * @need_sync: at least one port start changed * @need_replay: space was freed, we need a replay of all ports * @work_pending: @work is currently scheduled @@ -41,6 +42,8 @@ struct udp_tunnel_nic { =20 struct net_device *dev; =20 + struct mutex lock; + u8 need_sync:1; u8 need_replay:1; u8 work_pending:1; @@ -298,22 +301,11 @@ __udp_tunnel_nic_device_sync(struct net_device *dev, = struct udp_tunnel_nic *utn) static void udp_tunnel_nic_device_sync(struct net_device *dev, struct udp_tunnel_nic *= utn) { - const struct udp_tunnel_nic_info *info =3D dev->udp_tunnel_nic_info; - bool may_sleep; - if (!utn->need_sync) return; =20 - /* Drivers which sleep in the callback need to update from - * the workqueue, if we come from the tunnel driver's notification. - */ - may_sleep =3D info->flags & UDP_TUNNEL_NIC_INFO_MAY_SLEEP; - if (!may_sleep) - __udp_tunnel_nic_device_sync(dev, utn); - if (may_sleep || utn->need_replay) { - queue_work(udp_tunnel_nic_workqueue, &utn->work); - utn->work_pending =3D 1; - } + queue_work(udp_tunnel_nic_workqueue, &utn->work); + utn->work_pending =3D 1; } =20 static bool @@ -554,12 +546,12 @@ static void __udp_tunnel_nic_reset_ntf(struct net_dev= ice *dev) struct udp_tunnel_nic *utn; unsigned int i, j; =20 - ASSERT_RTNL(); - utn =3D dev->udp_tunnel_nic; if (!utn) return; =20 + mutex_lock(&utn->lock); + utn->need_sync =3D false; for (i =3D 0; i < utn->n_tables; i++) for (j =3D 0; j < info->tables[i].n_entries; j++) { @@ -569,7 +561,7 @@ static void __udp_tunnel_nic_reset_ntf(struct net_devic= e *dev) =20 entry->flags &=3D ~(UDP_TUNNEL_NIC_ENTRY_DEL | UDP_TUNNEL_NIC_ENTRY_OP_FAIL); - /* We don't release rtnl across ops */ + /* We don't release utn lock across ops */ WARN_ON(entry->flags & UDP_TUNNEL_NIC_ENTRY_FROZEN); if (!entry->use_cnt) continue; @@ -579,6 +571,8 @@ static void __udp_tunnel_nic_reset_ntf(struct net_devic= e *dev) } =20 __udp_tunnel_nic_device_sync(dev, utn); + + mutex_unlock(&utn->lock); } =20 static size_t @@ -643,6 +637,33 @@ __udp_tunnel_nic_dump_write(struct net_device *dev, un= signed int table, return -EMSGSIZE; } =20 +static void __udp_tunnel_nic_assert_locked(struct net_device *dev) +{ + struct udp_tunnel_nic *utn; + + utn =3D dev->udp_tunnel_nic; + if (utn) + lockdep_assert_held(&utn->lock); +} + +static void __udp_tunnel_nic_lock(struct net_device *dev) +{ + struct udp_tunnel_nic *utn; + + utn =3D dev->udp_tunnel_nic; + if (utn) + mutex_lock(&utn->lock); +} + +static void __udp_tunnel_nic_unlock(struct net_device *dev) +{ + struct udp_tunnel_nic *utn; + + utn =3D dev->udp_tunnel_nic; + if (utn) + mutex_unlock(&utn->lock); +} + static const struct udp_tunnel_nic_ops __udp_tunnel_nic_ops =3D { .get_port =3D __udp_tunnel_nic_get_port, .set_port_priv =3D __udp_tunnel_nic_set_port_priv, @@ -651,6 +672,9 @@ static const struct udp_tunnel_nic_ops __udp_tunnel_nic= _ops =3D { .reset_ntf =3D __udp_tunnel_nic_reset_ntf, .dump_size =3D __udp_tunnel_nic_dump_size, .dump_write =3D __udp_tunnel_nic_dump_write, + .assert_locked =3D __udp_tunnel_nic_assert_locked, + .lock =3D __udp_tunnel_nic_lock, + .unlock =3D __udp_tunnel_nic_unlock, }; =20 static void @@ -710,11 +734,15 @@ static void udp_tunnel_nic_device_sync_work(struct wo= rk_struct *work) container_of(work, struct udp_tunnel_nic, work); =20 rtnl_lock(); + mutex_lock(&utn->lock); + utn->work_pending =3D 0; __udp_tunnel_nic_device_sync(utn->dev, utn); =20 if (utn->need_replay) udp_tunnel_nic_replay(utn->dev, utn); + + mutex_unlock(&utn->lock); rtnl_unlock(); } =20 @@ -730,6 +758,7 @@ udp_tunnel_nic_alloc(const struct udp_tunnel_nic_info *= info, return NULL; utn->n_tables =3D n_tables; INIT_WORK(&utn->work, udp_tunnel_nic_device_sync_work); + mutex_init(&utn->lock); =20 for (i =3D 0; i < n_tables; i++) { utn->entries[i] =3D kcalloc(info->tables[i].n_entries, @@ -821,8 +850,11 @@ static int udp_tunnel_nic_register(struct net_device *= dev) dev_hold(dev); dev->udp_tunnel_nic =3D utn; =20 - if (!(info->flags & UDP_TUNNEL_NIC_INFO_OPEN_ONLY)) + if (!(info->flags & UDP_TUNNEL_NIC_INFO_OPEN_ONLY)) { + udp_tunnel_nic_lock(dev); udp_tunnel_get_rx_info(dev); + udp_tunnel_nic_unlock(dev); + } =20 return 0; } @@ -832,6 +864,8 @@ udp_tunnel_nic_unregister(struct net_device *dev, struc= t udp_tunnel_nic *utn) { const struct udp_tunnel_nic_info *info =3D dev->udp_tunnel_nic_info; =20 + udp_tunnel_nic_lock(dev); + /* For a shared table remove this dev from the list of sharing devices * and if there are other devices just detach. */ @@ -841,8 +875,10 @@ udp_tunnel_nic_unregister(struct net_device *dev, stru= ct udp_tunnel_nic *utn) list_for_each_entry(node, &info->shared->devices, list) if (node->dev =3D=3D dev) break; - if (list_entry_is_head(node, &info->shared->devices, list)) + if (list_entry_is_head(node, &info->shared->devices, list)) { + udp_tunnel_nic_unlock(dev); return; + } =20 list_del(&node->list); kfree(node); @@ -852,6 +888,7 @@ udp_tunnel_nic_unregister(struct net_device *dev, struc= t udp_tunnel_nic *utn) if (first) { udp_tunnel_drop_rx_info(dev); utn->dev =3D first->dev; + udp_tunnel_nic_unlock(dev); goto release_dev; } =20 @@ -862,6 +899,7 @@ udp_tunnel_nic_unregister(struct net_device *dev, struc= t udp_tunnel_nic *utn) * from the work which we will boot immediately. */ udp_tunnel_nic_flush(dev, utn); + udp_tunnel_nic_unlock(dev); =20 /* Wait for the work to be done using the state, netdev core will * retry unregister until we give up our reference on this device. @@ -910,12 +948,16 @@ udp_tunnel_nic_netdevice_event(struct notifier_block = *unused, return NOTIFY_DONE; =20 if (event =3D=3D NETDEV_UP) { + udp_tunnel_nic_lock(dev); WARN_ON(!udp_tunnel_nic_is_empty(dev, utn)); udp_tunnel_get_rx_info(dev); + udp_tunnel_nic_unlock(dev); return NOTIFY_OK; } if (event =3D=3D NETDEV_GOING_DOWN) { + udp_tunnel_nic_lock(dev); udp_tunnel_nic_flush(dev, utn); + udp_tunnel_nic_unlock(dev); return NOTIFY_OK; } =20 --=20 2.49.0 From nobody Thu Oct 9 20:22:56 2025 Received: from mail-pg1-f177.google.com (mail-pg1-f177.google.com [209.85.215.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 274562877E3; Mon, 16 Jun 2025 16:21:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.177 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750090886; cv=none; b=ZLetVBzDnXoT6TIb/Je/+b46HfxHPVIojIRTQGEX+EzNvzvC0IS+bCA59hB9/v5AsN1LylmiO47R7r9dd6/JWl3alDZv109plpEpRw61N5I9A5AUaFlgrG/rcafmeIxxfJqawac+/Ree53uiyPrCypJl+2Dzfh8J614oFzoANJY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750090886; c=relaxed/simple; bh=ctkVmqF3JrN4+M3Jq2BUDPgQr7j2TwSOV9URy1jJ6Mo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=G+I69QhFd7YX1B+I7iKl5ZnPhigaircVl7QwRFnI/dXJRbI1gpvJnu3n6/QXe+0o396YWvfSV8JPRq8ybd/Om7OLBR1qc7VXu2pnpeNgtJbPViUtXrDR7Jh0DBniI0bPWr3v/jsaQQ6suMfJ3CQGr0XwN5K87OqPz/DLLBQx7HI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=K29VL5kC; arc=none smtp.client-ip=209.85.215.177 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="K29VL5kC" Received: by mail-pg1-f177.google.com with SMTP id 41be03b00d2f7-7fd581c2bf4so3791852a12.3; Mon, 16 Jun 2025 09:21:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1750090884; x=1750695684; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=hOzLGPoCr0MeSXGXJzKmOKNWDgmi51GcdPfztdwS3U8=; b=K29VL5kCf1d97eNsgrCfni2EnAhd5eumGHP+9fP4go8wXjj3U/g3YeCgvPfE3oQidS GkVvcKID4Wo39RSdgWtbrPIDawIFNomnZRUvfHUXUZ9wEZjjUJtSIJByDfeF+jxCketd Re9Xa43YijzrwWozj++u1VfSXPrjz5FcxS87LcXFMxxP6KdeggZQMln8uLpgXVlE2geU kBljNB+Kx2dCCQMfz0atz0PZa7Sx45XJuTcubzDoBtSJS+a+y8W/jni0fwMvv9r7ZKEt V00CAgDetfG3zEfsH5Tsvt41yAMyrYi//+NxAcRInE/N40KdtJgjIdSoXQZvpjDWoR8T 8yFA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1750090884; x=1750695684; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=hOzLGPoCr0MeSXGXJzKmOKNWDgmi51GcdPfztdwS3U8=; b=Kdz7pcpbWoMjm8Qrvg+23PVtOm2d7XLqTTKgPQRtCUqZaEZFRYNzdYl+Bxj+dIkV5r d1duNX5INGeUNyf75beTvHP+/8aNppMNWsnoP3GmzlJfcVRHiSJOIycnjlAUV/EfhQ6g aLrG5RcZPgobsIDd5983WBi3F/ZdMf9LQY/ULrnexlo/OpDvo1PnCc6pVUBgS6OruhwL eqYZsbadgvv3wjHOuLmVhx7z9NKMeD3As+pEuJfJJy9P7th2peb/0GCOI7Fa2G7eqJan isCjlem4ibCrR8/kNCWNy3ecwJ6owNmWNyqVAguGRcd+bu4KriZM5bSs/Tp7UvG5JXD5 iQgw== X-Forwarded-Encrypted: i=1; AJvYcCUU1UCmie0jqhgU/G6QL7hZRe1uKxPnPZIBEsSmh8d5Osach7fYXJZ93ssVtlZyCBsM00ztKt2PuQNmQLLx5p/L@vger.kernel.org, AJvYcCWvB8FpvcbRnCs7MdiH1DeCIr70pwNi8vXRnMsHzHOVGAV1RPWEJo6KUzrUwN8x+aFGBjJ8YdsPgGrH6w==@vger.kernel.org, AJvYcCXFQ56POjBbw8grHy+RsCU+5Z8JZXxiDk2UYxoiYibPqCASdT07fVZRuaiIU6X7TAxCRK4zRCInMVc62dE=@vger.kernel.org X-Gm-Message-State: AOJu0YxlhV5KxGpJ79SWe4M73/1IW94NEwNIe0nosFubKluOBFnKpY2D LY4pE2x91qXalg8Xa3FxA1pa0xcpGm4KQuQnaNsiVb3a7XyuC8GuNGz70lnM X-Gm-Gg: ASbGncutWLQoSbqZNYWFcaD3QL05prhvWD0cWb0kFOc/tut3ZrHT2TXg6Bf6mZW78wK 5fLmt8jAjFJsOSKaiPb+zgMkgwDmodzyEvOnjXBhuBOfSiomvkZRm2i/8cI1ivzjMSea/s9dQ4j XiuiZ/ZYx0DJtnWj5RrjowUM/V2Cb19G9J/dmno7Fk6RsuH2ZJBPD61WCqL7g6hzkUs+iAPd3Lr vKF9GAAAnQ8YHEu7fQa28Rk/zqbK9qMsjmFG3XMnl2xF49HpmTqtDWqc6DVcyKrwHQW4j/Q2iyn sPuP5lgcMhP73EEu2vYS6KzU5hl9Df/BCI3oPnXwqrJvKEd1FGeTKFfiem3s2TqxdyPLaxobzYa wku8n0mRVp8Ng9ZDin1vqtOM= X-Google-Smtp-Source: AGHT+IGZvOQH3Qch7I0qSswC74QzMJM0k/uZMNM7l+NTLMMpD2tzor7yNnd4dIMkv3IMj/awGe4+rw== X-Received: by 2002:a05:6a21:b8b:b0:1f3:33c2:29c5 with SMTP id adf61e73a8af0-21fbd559187mr15017168637.7.1750090883975; Mon, 16 Jun 2025 09:21:23 -0700 (PDT) Received: from localhost (c-73-158-218-242.hsd1.ca.comcast.net. [73.158.218.242]) by smtp.gmail.com with UTF8SMTPSA id d2e1a72fcca58-74890084013sm7296033b3a.96.2025.06.16.09.21.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 16 Jun 2025 09:21:23 -0700 (PDT) From: Stanislav Fomichev To: netdev@vger.kernel.org Cc: davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, skalluru@marvell.com, manishc@marvell.com, andrew+netdev@lunn.ch, michael.chan@broadcom.com, pavan.chebbi@broadcom.com, ajit.khaparde@broadcom.com, sriharsha.basavapatna@broadcom.com, somnath.kotur@broadcom.com, anthony.l.nguyen@intel.com, przemyslaw.kitszel@intel.com, tariqt@nvidia.com, saeedm@nvidia.com, louis.peens@corigine.com, shshaikh@marvell.com, GR-Linux-NIC-Dev@marvell.com, ecree.xilinx@gmail.com, horms@kernel.org, dsahern@kernel.org, shuah@kernel.org, tglx@linutronix.de, mingo@kernel.org, ruanjinjie@huawei.com, idosch@nvidia.com, razor@blackwall.org, petrm@nvidia.com, kuniyu@google.com, sdf@fomichev.me, linux-kernel@vger.kernel.org, intel-wired-lan@lists.osuosl.org, linux-rdma@vger.kernel.org, oss-drivers@corigine.com, linux-net-drivers@amd.com, linux-kselftest@vger.kernel.org, leon@kernel.org Subject: [PATCH net-next v5 4/6] net: remove redundant ASSERT_RTNL() in queue setup functions Date: Mon, 16 Jun 2025 09:21:15 -0700 Message-ID: <20250616162117.287806-5-stfomichev@gmail.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250616162117.287806-1-stfomichev@gmail.com> References: <20250616162117.287806-1-stfomichev@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The existing netdev_ops_assert_locked() already asserts that either the RTNL lock or the per-device lock is held, making the explicit ASSERT_RTNL() redundant. Cc: Michael Chan Signed-off-by: Stanislav Fomichev --- net/core/dev.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/net/core/dev.c b/net/core/dev.c index 43f56b44f351..df1678b1fe24 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -3179,7 +3179,6 @@ int netif_set_real_num_tx_queues(struct net_device *d= ev, unsigned int txq) =20 if (dev->reg_state =3D=3D NETREG_REGISTERED || dev->reg_state =3D=3D NETREG_UNREGISTERING) { - ASSERT_RTNL(); netdev_ops_assert_locked(dev); =20 rc =3D netdev_queue_update_kobjects(dev, dev->real_num_tx_queues, @@ -3229,7 +3228,6 @@ int netif_set_real_num_rx_queues(struct net_device *d= ev, unsigned int rxq) return -EINVAL; =20 if (dev->reg_state =3D=3D NETREG_REGISTERED) { - ASSERT_RTNL(); netdev_ops_assert_locked(dev); =20 rc =3D net_rx_queue_update_kobjects(dev, dev->real_num_rx_queues, --=20 2.49.0 From nobody Thu Oct 9 20:22:56 2025 Received: from mail-pf1-f178.google.com (mail-pf1-f178.google.com [209.85.210.178]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 690712882A7; Mon, 16 Jun 2025 16:21:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.178 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750090888; cv=none; b=Eo8SwtFPUpdn7RMzxyIJeBsj5wsq182v/83JfJzVLtFpGnAExFLQ4isEysy2VnaWjVVV8dV4GkVUCF+4QZYV0Bxkkc6ytBiWoKCUE22mGY/i8pG1fkSFIz99NM0w1YSAx7xtWlLX3/EABcuTzNGAWuGVAjnh+cJAqOo0+xhTCx0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750090888; c=relaxed/simple; bh=jrPADGdQVSlhHaHu88CYeq9ejs0dqL4pa8LW21dVeyc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Yx5znTORn2/7M+NpqzZNzdn/PYP7pk1HZqLwhzlyCMYiGjfl8AzVkVOl37knOFn6/Bx193wZLHtukvMcm5wcXOLq0abOvAlZ9H40iYqjP+hmeYf/tHbrTTZcpJblnYN3W6RyajuJZUxJtIRbpyNLX6Wb0Trqj4pQsw6ymQ/Xp2A= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=DIgDSVZM; arc=none smtp.client-ip=209.85.210.178 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="DIgDSVZM" Received: by mail-pf1-f178.google.com with SMTP id d2e1a72fcca58-742caef5896so3883224b3a.3; Mon, 16 Jun 2025 09:21:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1750090885; x=1750695685; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=sO4neuwpUVoDLsDzSFLxxvkPcabDlga25iey737Q9/w=; b=DIgDSVZMVKlcDQOrCBx2yD8jc+qu2I5hi5rihPTE8J2bKmZviE1uxRccVtl9QgbOlW nWB43BcT0vEOIqKW58yTrR9kPSuJYyfwXz28cI7cL7DTqi7+/8MVu5Jp1rXO6NM8m8+C iS0bhyAzirGuzoQ3lRkf6WZTKoXkPhQ7zWkCwZGQNYNzcVGC/ySaTD5E29rHQYpk4mvc afvURfNibRWL6+OzEkXJDoKRXB7V+Mc+KvBOZflrSIhAOxSTw6gMuzasDUtwDEMtpAc1 pDDAN0RZJMViWZ4jcOXL79dMKXfy5UiXw8z6iXygmC9lDC9313mczDYbSViYf1ZCZd0T E+zw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1750090885; x=1750695685; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=sO4neuwpUVoDLsDzSFLxxvkPcabDlga25iey737Q9/w=; b=SBzSyK4RmydkVruVvYRXImrW/SJEfTB+fb6tiJUQdUQVNqB0q56DGxu1KCHK7EDUPS QdX0pv41IGtwW4LbtikeskW5WlF9us/Tk/xC4ow9sjjyw3px5PxUlK26lfwAwmnvtaDB uJykPZLrG0eKJtljbfsF94Xbl1MwkLQPPGXh693DGw+aWdkUbvUke/NLYuCaopdRDHkz R+Y7kmfSLpBFzyx3swo8L7wSDKJ4Jt7ViifNqtiKOrd1EvV++OHh6WhX1VPjFy/1J9C6 YZ8GRWNlTJ6UGLrQpEbrLL/kPZ0xlOcsbe4i9MeFn+gzMuKBu0HvNc/tqNtBH1zkfZ2s 6MQA== X-Forwarded-Encrypted: i=1; AJvYcCVW476xAK2jRZUYkQO6vkC3V75zD2iMMr9uGJk+jvrXZ+nXXE5g17CeHz/3fnxPVG/fan7bfFiISGQPdmc=@vger.kernel.org, AJvYcCWd7Tnb3RssJtk5VwVoyL3aIE/XrViQPvZn/xIAma/PghIh1c9JmGk7Sua+4n+ZnBGFuwPrNYp9cwEibULfIVDy@vger.kernel.org, AJvYcCXvsAzTohF//KmOmhABP77xUHSaHoMJtSqhcyiIv0uMoMzoz9iBWquAuA0Q0TfndSCW7cLsq/SRBC57DA==@vger.kernel.org X-Gm-Message-State: AOJu0Yz18Q9XVIJWWbTldEk9q5UnoM1sTd/BXkiy/HmV0ESBs1tG4I0C lxyyAhl7Rk3GN6Mb/cJkyFH5ri3AqWCyEIaggKz3q7W3FfGhDIOBK6A0MIYW X-Gm-Gg: ASbGncvbQG4ozLS3GhwpoMT1HJXxsBZqdFD7Yg3/NRCqjmPswC0F+gdrO+KhO8BSlJ6 3aVGAh0WCS4aT+ESwm95f+nXfPII9Q32Ndjdcxct9VAGoAt+P4thJ090ivUgB+X8Xsr3WzHgbms OaiL08vUEJWkLKiXBOb3Twg7kFEqocXWXFb17Couud/7QrWg0QM4a4EkLJit87hOqCUci8MH10U Mve12mKnPg16eXYVebBK2xVBgEyeRGkUkLMRdHeC+OdhuhyDk8YfwsXGmFiQPz/vmB3l3uxAUmN +nwPQ0OxFO2ioHAeFwp+GLwdqA5+qxIfltJaVkckpF6YgKaDiuFtRbzsAx2RsuO4MUlkpl50P6T 5GLUw/QCZ9/uF8A5S4yVAIxE= X-Google-Smtp-Source: AGHT+IEOIXk6H1jA9Q65lqOc49Vxlq3eijftqFKHC9WFXfMVrfJD9h7cj/ckYq+gS695PQbgjakP3Q== X-Received: by 2002:a05:6a00:ad6:b0:740:a85b:7554 with SMTP id d2e1a72fcca58-7489cdebe1emr12838444b3a.2.1750090885308; Mon, 16 Jun 2025 09:21:25 -0700 (PDT) Received: from localhost (c-73-158-218-242.hsd1.ca.comcast.net. [73.158.218.242]) by smtp.gmail.com with UTF8SMTPSA id d2e1a72fcca58-748900ad2absm7002127b3a.110.2025.06.16.09.21.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 16 Jun 2025 09:21:24 -0700 (PDT) From: Stanislav Fomichev To: netdev@vger.kernel.org Cc: davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, skalluru@marvell.com, manishc@marvell.com, andrew+netdev@lunn.ch, michael.chan@broadcom.com, pavan.chebbi@broadcom.com, ajit.khaparde@broadcom.com, sriharsha.basavapatna@broadcom.com, somnath.kotur@broadcom.com, anthony.l.nguyen@intel.com, przemyslaw.kitszel@intel.com, tariqt@nvidia.com, saeedm@nvidia.com, louis.peens@corigine.com, shshaikh@marvell.com, GR-Linux-NIC-Dev@marvell.com, ecree.xilinx@gmail.com, horms@kernel.org, dsahern@kernel.org, shuah@kernel.org, tglx@linutronix.de, mingo@kernel.org, ruanjinjie@huawei.com, idosch@nvidia.com, razor@blackwall.org, petrm@nvidia.com, kuniyu@google.com, sdf@fomichev.me, linux-kernel@vger.kernel.org, intel-wired-lan@lists.osuosl.org, linux-rdma@vger.kernel.org, oss-drivers@corigine.com, linux-net-drivers@amd.com, linux-kselftest@vger.kernel.org, leon@kernel.org, Aleksandr Loktionov Subject: [PATCH net-next v5 5/6] netdevsim: remove udp_ports_sleep Date: Mon, 16 Jun 2025 09:21:16 -0700 Message-ID: <20250616162117.287806-6-stfomichev@gmail.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250616162117.287806-1-stfomichev@gmail.com> References: <20250616162117.287806-1-stfomichev@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Now that there is only one path in udp_tunnel, there is no need to have udp_ports_sleep knob. Remove it and adjust the test. Cc: Michael Chan Reviewed-by: Aleksandr Loktionov Signed-off-by: Stanislav Fomichev --- drivers/net/netdevsim/netdevsim.h | 2 -- drivers/net/netdevsim/udp_tunnels.c | 8 ------- .../drivers/net/netdevsim/udp_tunnel_nic.sh | 23 +------------------ 3 files changed, 1 insertion(+), 32 deletions(-) diff --git a/drivers/net/netdevsim/netdevsim.h b/drivers/net/netdevsim/netd= evsim.h index d04401f0bdf7..511ed72a93ce 100644 --- a/drivers/net/netdevsim/netdevsim.h +++ b/drivers/net/netdevsim/netdevsim.h @@ -131,7 +131,6 @@ struct netdevsim { struct nsim_macsec macsec; struct { u32 inject_error; - u32 sleep; u32 __ports[2][NSIM_UDP_TUNNEL_N_PORTS]; u32 (*ports)[NSIM_UDP_TUNNEL_N_PORTS]; struct dentry *ddir; @@ -342,7 +341,6 @@ struct nsim_dev { bool ipv4_only; bool shared; bool static_iana_vxlan; - u32 sleep; } udp_ports; struct nsim_dev_psample *psample; u16 esw_mode; diff --git a/drivers/net/netdevsim/udp_tunnels.c b/drivers/net/netdevsim/ud= p_tunnels.c index 10cbbf1c584b..89fff76e51cf 100644 --- a/drivers/net/netdevsim/udp_tunnels.c +++ b/drivers/net/netdevsim/udp_tunnels.c @@ -18,9 +18,6 @@ nsim_udp_tunnel_set_port(struct net_device *dev, unsigned= int table, ret =3D -ns->udp_ports.inject_error; ns->udp_ports.inject_error =3D 0; =20 - if (ns->udp_ports.sleep) - msleep(ns->udp_ports.sleep); - if (!ret) { if (ns->udp_ports.ports[table][entry]) { WARN(1, "entry already in use\n"); @@ -47,8 +44,6 @@ nsim_udp_tunnel_unset_port(struct net_device *dev, unsign= ed int table, ret =3D -ns->udp_ports.inject_error; ns->udp_ports.inject_error =3D 0; =20 - if (ns->udp_ports.sleep) - msleep(ns->udp_ports.sleep); if (!ret) { u32 val =3D be16_to_cpu(ti->port) << 16 | ti->type; =20 @@ -170,7 +165,6 @@ int nsim_udp_tunnels_info_create(struct nsim_dev *nsim_= dev, GFP_KERNEL); if (!info) return -ENOMEM; - ns->udp_ports.sleep =3D nsim_dev->udp_ports.sleep; =20 if (nsim_dev->udp_ports.sync_all) { info->set_port =3D NULL; @@ -213,6 +207,4 @@ void nsim_udp_tunnels_debugfs_create(struct nsim_dev *n= sim_dev) &nsim_dev->udp_ports.shared); debugfs_create_bool("udp_ports_static_iana_vxlan", 0600, nsim_dev->ddir, &nsim_dev->udp_ports.static_iana_vxlan); - debugfs_create_u32("udp_ports_sleep", 0600, nsim_dev->ddir, - &nsim_dev->udp_ports.sleep); } diff --git a/tools/testing/selftests/drivers/net/netdevsim/udp_tunnel_nic.s= h b/tools/testing/selftests/drivers/net/netdevsim/udp_tunnel_nic.sh index 92c2f0376c08..4c859ecdad94 100755 --- a/tools/testing/selftests/drivers/net/netdevsim/udp_tunnel_nic.sh +++ b/tools/testing/selftests/drivers/net/netdevsim/udp_tunnel_nic.sh @@ -266,7 +266,6 @@ for port in 0 1; do echo $NSIM_ID > /sys/bus/netdevsim/new_device else echo 1 > $NSIM_DEV_DFS/udp_ports_open_only - echo 1 > $NSIM_DEV_DFS/udp_ports_sleep echo 1 > $NSIM_DEV_SYS/new_port fi NSIM_NETDEV=3D`get_netdev_name old_netdevs` @@ -350,23 +349,11 @@ old_netdevs=3D$(ls /sys/class/net) port=3D0 echo $NSIM_ID > /sys/bus/netdevsim/new_device echo 0 > $NSIM_DEV_SYS/del_port -echo 1000 > $NSIM_DEV_DFS/udp_ports_sleep echo 0 > $NSIM_DEV_SYS/new_port NSIM_NETDEV=3D`get_netdev_name old_netdevs` =20 msg=3D"create VxLANs" -exp0=3D( 0 0 0 0 ) # sleep is longer than out wait -new_vxlan vxlan0 10000 $NSIM_NETDEV - -modprobe -r vxlan -modprobe -r udp_tunnel - -msg=3D"remove tunnels" -exp0=3D( 0 0 0 0 ) -check_tables - -msg=3D"create VxLANs" -exp0=3D( 0 0 0 0 ) # sleep is longer than out wait +exp0=3D( `mke 10000 1` 0 0 0 ) new_vxlan vxlan0 10000 $NSIM_NETDEV =20 exp0=3D( 0 0 0 0 ) @@ -428,7 +415,6 @@ echo 0 > $NSIM_DEV_SYS/del_port for port in 0 1; do if [ $port -ne 0 ]; then echo 1 > $NSIM_DEV_DFS/udp_ports_open_only - echo 1 > $NSIM_DEV_DFS/udp_ports_sleep fi =20 echo $port > $NSIM_DEV_SYS/new_port @@ -486,7 +472,6 @@ echo 1 > $NSIM_DEV_DFS/udp_ports_sync_all for port in 0 1; do if [ $port -ne 0 ]; then echo 1 > $NSIM_DEV_DFS/udp_ports_open_only - echo 1 > $NSIM_DEV_DFS/udp_ports_sleep fi =20 echo $port > $NSIM_DEV_SYS/new_port @@ -543,7 +528,6 @@ echo 0 > $NSIM_DEV_SYS/del_port for port in 0 1; do if [ $port -ne 0 ]; then echo 1 > $NSIM_DEV_DFS/udp_ports_open_only - echo 1 > $NSIM_DEV_DFS/udp_ports_sleep fi =20 echo $port > $NSIM_DEV_SYS/new_port @@ -573,7 +557,6 @@ echo 1 > $NSIM_DEV_DFS/udp_ports_ipv4_only for port in 0 1; do if [ $port -ne 0 ]; then echo 1 > $NSIM_DEV_DFS/udp_ports_open_only - echo 1 > $NSIM_DEV_DFS/udp_ports_sleep fi =20 echo $port > $NSIM_DEV_SYS/new_port @@ -634,7 +617,6 @@ echo 0 > $NSIM_DEV_SYS/del_port for port in 0 1; do if [ $port -ne 0 ]; then echo 1 > $NSIM_DEV_DFS/udp_ports_open_only - echo 1 > $NSIM_DEV_DFS/udp_ports_sleep fi =20 echo $port > $NSIM_DEV_SYS/new_port @@ -690,7 +672,6 @@ echo 0 > $NSIM_DEV_SYS/del_port for port in 0 1; do if [ $port -ne 0 ]; then echo 1 > $NSIM_DEV_DFS/udp_ports_open_only - echo 1 > $NSIM_DEV_DFS/udp_ports_sleep fi =20 echo $port > $NSIM_DEV_SYS/new_port @@ -750,7 +731,6 @@ echo 0 > $NSIM_DEV_SYS/del_port for port in 0 1; do if [ $port -ne 0 ]; then echo 1 > $NSIM_DEV_DFS/udp_ports_open_only - echo 1 > $NSIM_DEV_DFS/udp_ports_sleep fi =20 echo $port > $NSIM_DEV_SYS/new_port @@ -809,7 +789,6 @@ echo $NSIM_ID > /sys/bus/netdevsim/new_device echo 0 > $NSIM_DEV_SYS/del_port =20 echo 0 > $NSIM_DEV_DFS/udp_ports_open_only -echo 1 > $NSIM_DEV_DFS/udp_ports_sleep echo 1 > $NSIM_DEV_DFS/udp_ports_shared =20 old_netdevs=3D$(ls /sys/class/net) --=20 2.49.0 From nobody Thu Oct 9 20:22:56 2025 Received: from mail-pl1-f179.google.com (mail-pl1-f179.google.com [209.85.214.179]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CB95F288525; Mon, 16 Jun 2025 16:21:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.179 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750090889; cv=none; b=kHa1a13y+PSEFGJOQkqI+ab/9HmczkCJ3K91lnRukqRQK10aIDmGDB3vsBQAHJjqD7/5OBYaYAesWwHvXt7YgG7kbHHGBlbHFjBTx2XbRSmztS3O4kpITMg6HyKI0IRzQFSQUwSliyLCX+wyunJmfo4W9NMq/97ypNXnovU3ReE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750090889; c=relaxed/simple; bh=aV4hNI8aqhzy9bbbQZ0vNyWIkwogBSS8SXPlSQfiUPw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Fqktylo0mM5kH9MO6Fb+v8i3fxZcF7ADoUbEu7MDWpWNAg5UjQqXamEcbK9ZAlxU22xLUzkVwJA4oKxMzXg1OmN3+HppeLg/GVAdS8wJ9O9nSyo4FEB8bQewfj2jIc0xcWsucgcEBj/SBcvnC75g/1WAAFT9J2V2othHZUT7iRM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=Io8qAyRx; arc=none smtp.client-ip=209.85.214.179 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Io8qAyRx" Received: by mail-pl1-f179.google.com with SMTP id d9443c01a7336-2350b1b9129so32509915ad.0; Mon, 16 Jun 2025 09:21:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1750090887; x=1750695687; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=Vf7ea9OeOxjFZqaN2n/DTUZpfsQZsze4A6wO+u7qE8A=; b=Io8qAyRxspHUtE0PBSlhmmK4rj45RhXmbbjJUqW2JyrnFMiTmI/NDgbtO5l4BJa+6I HsO1vi90Mn1uXWECLavQNpxCPCiJViq545tmh8f8Hjk2KIrsgSgZ+QXO5qnH3zHyKUGn RbwC+remeQcRJyaR2F6NybhXWBk5TqYAmr0XXmENbLcrrcQFLIXGNWQH1XW4B1HiufFE hSaDUDkbe80dorztymlJJ6fQAWaqvoCZl7osgISeSI860YcWV8TmP73fZTLA9gojGlda evkEioiIYEs1NblHs6zCNmmoBgdtQMnWwRQo67yTg4KL2VYPgtGnnI5NO6akLmcTM0AF NuJw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1750090887; x=1750695687; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Vf7ea9OeOxjFZqaN2n/DTUZpfsQZsze4A6wO+u7qE8A=; b=gdK5ZSXH5HszWWx7ONP7V4Y+mB6tgLMbiQQfLhJ8u4sppUHN7issthMs2m2POUz8PE 755MPTjvm9mL2AupRx31x3UNNEaO5TF+5tgynevL5ecXSPdlCbbKH8FZ7lZtuRpdF5De xnCbEBbCfzDf4oeeBYfTB1gwQz9lMMVBHwQEnEetlnUvtesbco5gWqG8XrPomj77JsMv o5Tf6u6qcnFP6NvPsnd1ilXddukaUA8L6+IBwBSsuwEP4rNWJeXz4pErKFxE33wpLC/3 aHbVQwiNssrt2edtdnslKK2iLQ7IHvW37vOnHTfsi+5AJT651roZbLCuI6KXX8kksk7N KN7Q== X-Forwarded-Encrypted: i=1; AJvYcCUYVK9NHICVYLZyGTwrqDp60e+luzqa/2TCGhTZQTaTMLmLLZIDHKfUFuFzR6HqpmjneF5rqo6mxOzirsY=@vger.kernel.org, AJvYcCV4+bPf5tzD8BI3GK6TFzwyuOhStwst1cWQzyKbNlJ291KCh/8Rrc3390WRhkTAxy6LBpSUyTH69bSx2/j18D7Q@vger.kernel.org, AJvYcCX5HfgTj9Ncnb2ysD9ogInXKED8vKQMUyMEHyB5xraapi930JQRVmM3sBZVhFMj5lyjVz7Qz0AkHM7JVA==@vger.kernel.org X-Gm-Message-State: AOJu0YzTuT0aG6255cEiKe7v4Pjn3sLnIB8Of1Cyuqs1qm5ln0KCho9i WsTQngGyWANGJKILj5waZCaQRLmp6fdd7TpI8JHt0V58EG2BC9Oix5XNxxGA X-Gm-Gg: ASbGncuz1FvvtmE9onBfMfKycqsXgboa70u+adYxuS06zwKeebAFriwRW1tRF6XCp08 uWBcaXK4BO2xAbdPYfISUpna5vifdVr/1i0MP8cRGM2VT7Nc3c7c2gsyeYykbXcX7ADRIyLB9EE tfLXN1OIYMYTtRZ96NIol6flrv3s5AipL13NIz2ar83OSYv3osGdUD8r7C+SFHw6F+OdpnmEQIW EklqssOMDroBdJAq0p+uHx25hKOzqMOCpo2D9SkNUkFCwlIBE+AflNtXEyxqTd0JAcFbvBNBTe7 5m10+mi/gQx7xxteisRxaJK0veyRV3CHnxKxSQiT9Otq1rVGx4RUSGpGKG7ppZoPEKO+Vpl1aoS OFPwuN9ShNU685k5uVOxFov4= X-Google-Smtp-Source: AGHT+IFTpneJMscp64JsQsBTZDsdXWWWprF9evpsvYcOGwB/ozwI/DF68CMRCP+T0+BlojYTo1Hn1A== X-Received: by 2002:a17:90b:1c04:b0:312:f2ee:a895 with SMTP id 98e67ed59e1d1-313f1e1a908mr13632801a91.31.1750090886699; Mon, 16 Jun 2025 09:21:26 -0700 (PDT) Received: from localhost (c-73-158-218-242.hsd1.ca.comcast.net. [73.158.218.242]) by smtp.gmail.com with UTF8SMTPSA id d9443c01a7336-2365deb87bfsm62925985ad.190.2025.06.16.09.21.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 16 Jun 2025 09:21:26 -0700 (PDT) From: Stanislav Fomichev To: netdev@vger.kernel.org Cc: davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, skalluru@marvell.com, manishc@marvell.com, andrew+netdev@lunn.ch, michael.chan@broadcom.com, pavan.chebbi@broadcom.com, ajit.khaparde@broadcom.com, sriharsha.basavapatna@broadcom.com, somnath.kotur@broadcom.com, anthony.l.nguyen@intel.com, przemyslaw.kitszel@intel.com, tariqt@nvidia.com, saeedm@nvidia.com, louis.peens@corigine.com, shshaikh@marvell.com, GR-Linux-NIC-Dev@marvell.com, ecree.xilinx@gmail.com, horms@kernel.org, dsahern@kernel.org, shuah@kernel.org, tglx@linutronix.de, mingo@kernel.org, ruanjinjie@huawei.com, idosch@nvidia.com, razor@blackwall.org, petrm@nvidia.com, kuniyu@google.com, sdf@fomichev.me, linux-kernel@vger.kernel.org, intel-wired-lan@lists.osuosl.org, linux-rdma@vger.kernel.org, oss-drivers@corigine.com, linux-net-drivers@amd.com, linux-kselftest@vger.kernel.org, leon@kernel.org, Aleksandr Loktionov Subject: [PATCH net-next v5 6/6] Revert "bnxt_en: bring back rtnl_lock() in the bnxt_open() path" Date: Mon, 16 Jun 2025 09:21:17 -0700 Message-ID: <20250616162117.287806-7-stfomichev@gmail.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250616162117.287806-1-stfomichev@gmail.com> References: <20250616162117.287806-1-stfomichev@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" This reverts commit 325eb217e41fa14f307c7cc702bd18d0bb38fe84. udp_tunnel infra doesn't need RTNL, should be safe to get back to only netdev instance lock. Cc: Michael Chan Reviewed-by: Aleksandr Loktionov Signed-off-by: Stanislav Fomichev --- drivers/net/ethernet/broadcom/bnxt/bnxt.c | 36 +++++------------------ 1 file changed, 7 insertions(+), 29 deletions(-) diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethern= et/broadcom/bnxt/bnxt.c index 7946586802af..b359ef4b78a9 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c @@ -14055,28 +14055,13 @@ static void bnxt_unlock_sp(struct bnxt *bp) netdev_unlock(bp->dev); } =20 -/* Same as bnxt_lock_sp() with additional rtnl_lock */ -static void bnxt_rtnl_lock_sp(struct bnxt *bp) -{ - clear_bit(BNXT_STATE_IN_SP_TASK, &bp->state); - rtnl_lock(); - netdev_lock(bp->dev); -} - -static void bnxt_rtnl_unlock_sp(struct bnxt *bp) -{ - set_bit(BNXT_STATE_IN_SP_TASK, &bp->state); - netdev_unlock(bp->dev); - rtnl_unlock(); -} - /* Only called from bnxt_sp_task() */ static void bnxt_reset(struct bnxt *bp, bool silent) { - bnxt_rtnl_lock_sp(bp); + bnxt_lock_sp(bp); if (test_bit(BNXT_STATE_OPEN, &bp->state)) bnxt_reset_task(bp, silent); - bnxt_rtnl_unlock_sp(bp); + bnxt_unlock_sp(bp); } =20 /* Only called from bnxt_sp_task() */ @@ -14084,9 +14069,9 @@ static void bnxt_rx_ring_reset(struct bnxt *bp) { int i; =20 - bnxt_rtnl_lock_sp(bp); + bnxt_lock_sp(bp); if (!test_bit(BNXT_STATE_OPEN, &bp->state)) { - bnxt_rtnl_unlock_sp(bp); + bnxt_unlock_sp(bp); return; } /* Disable and flush TPA before resetting the RX ring */ @@ -14125,7 +14110,7 @@ static void bnxt_rx_ring_reset(struct bnxt *bp) } if (bp->flags & BNXT_FLAG_TPA) bnxt_set_tpa(bp, true); - bnxt_rtnl_unlock_sp(bp); + bnxt_unlock_sp(bp); } =20 static void bnxt_fw_fatal_close(struct bnxt *bp) @@ -15017,17 +15002,15 @@ static void bnxt_fw_reset_task(struct work_struct= *work) bp->fw_reset_state =3D BNXT_FW_RESET_STATE_OPENING; fallthrough; case BNXT_FW_RESET_STATE_OPENING: - while (!rtnl_trylock()) { + while (!netdev_trylock(bp->dev)) { bnxt_queue_fw_reset_work(bp, HZ / 10); return; } - netdev_lock(bp->dev); rc =3D bnxt_open(bp->dev); if (rc) { netdev_err(bp->dev, "bnxt_open() failed during FW reset\n"); bnxt_fw_reset_abort(bp, rc); netdev_unlock(bp->dev); - rtnl_unlock(); goto ulp_start; } =20 @@ -15047,7 +15030,6 @@ static void bnxt_fw_reset_task(struct work_struct *= work) bnxt_dl_health_fw_status_update(bp, true); } netdev_unlock(bp->dev); - rtnl_unlock(); bnxt_ulp_start(bp, 0); bnxt_reenable_sriov(bp); netdev_lock(bp->dev); @@ -15996,7 +15978,7 @@ static int bnxt_queue_start(struct net_device *dev,= void *qmem, int idx) rc); napi_enable_locked(&bnapi->napi); bnxt_db_nq_arm(bp, &cpr->cp_db, cpr->cp_raw_cons); - netif_close(dev); + bnxt_reset_task(bp, true); return rc; } =20 @@ -16812,7 +16794,6 @@ static int bnxt_resume(struct device *device) struct bnxt *bp =3D netdev_priv(dev); int rc =3D 0; =20 - rtnl_lock(); netdev_lock(dev); rc =3D pci_enable_device(bp->pdev); if (rc) { @@ -16857,7 +16838,6 @@ static int bnxt_resume(struct device *device) =20 resume_exit: netdev_unlock(bp->dev); - rtnl_unlock(); bnxt_ulp_start(bp, rc); if (!rc) bnxt_reenable_sriov(bp); @@ -17023,7 +17003,6 @@ static void bnxt_io_resume(struct pci_dev *pdev) int err; =20 netdev_info(bp->dev, "PCI Slot Resume\n"); - rtnl_lock(); netdev_lock(netdev); =20 err =3D bnxt_hwrm_func_qcaps(bp); @@ -17041,7 +17020,6 @@ static void bnxt_io_resume(struct pci_dev *pdev) netif_device_attach(netdev); =20 netdev_unlock(netdev); - rtnl_unlock(); bnxt_ulp_start(bp, err); if (!err) bnxt_reenable_sriov(bp); --=20 2.49.0