From patchwork Tue Mar 11 14:40:24 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stanislav Fomichev X-Patchwork-Id: 14011975 X-Patchwork-Delegate: kuba@kernel.org Received: from mail-pl1-f172.google.com (mail-pl1-f172.google.com [209.85.214.172]) (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 630BD25BABA; Tue, 11 Mar 2025 14:40:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.172 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741704032; cv=none; b=ZteE25YgyxB2V0HHs1pOOY6+vxXk2nOn4a6BmxQJy7hRwgfs4cIAbjrfz5/7qvkMFB5qy5JhjBAgJSOZx0CT5IJ9sAc77K3ATw8jMFMzOSKS7F0eIwELa2Fr3g1rgd7d75CXpFiZ3b8YT/KLclf+jyb3UCAC0Aqvo2acLfSEdek= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741704032; c=relaxed/simple; bh=qju+Hmli1ujUwi/eHfGIMx2HJZ38f7cehV6nsoGzrPo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Gp7nSBsaLBdPxST51rzdSM5b5igghT1GjDfO2RVw0V6lH3mTP8llI/G/i0gNT7sbYzasl+A+qt6XZcJaceGe1J6MyQKlATUVYJcrj/qse6lJMJPKymszUfHSrkic4HGiHWmLXiox6jDCmLjXIveUJcxPyNZUGCn78RJ12ZnO4fg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=fomichev.me; spf=pass smtp.mailfrom=gmail.com; arc=none smtp.client-ip=209.85.214.172 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=fomichev.me Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-pl1-f172.google.com with SMTP id d9443c01a7336-225477548e1so57045525ad.0; Tue, 11 Mar 2025 07:40:30 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741704029; x=1742308829; 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=wVxQV/o7jQOh5fqVSpMsD4HSovMAgVf5MADEYdzA/sg=; b=QZKpZI0HzBGXSNxxcfDqRMz7JpEhKj3++EpPFF5kGb7/goMAZH2tE5MXp0gh5vqXku D2fDgNYJl++12kSiwZk65b+0ZDAPWPcXyloTkH33vj3M8x+jAfPa2PO3Ad0L2bZTP+UA Z9/lw2WUCI+5zfbDaOXeqc+sVRqBDqdw9T55NaK+a/YQlburGpdml9GAj0MtqowanwKt 3ausujlnt6hUuICetqwbKQnDHpuU8xiuYcXQ0ve85OAoAsEFp1ImrRLWunji9S8l/3e6 GInW7FRlW1jlb+s9p7gqYydWPdLNcXwh8JxnwjRFqKKPioUFCV5ukaw3UQ75VnQhhA+H OnaQ== X-Forwarded-Encrypted: i=1; AJvYcCV/ZbxqqgHhIGexqYiMHiSEvvDiK9sSkw57wqFNORpreh6QaMSoUKeuQzmczTiTf0EiSp3GJvH1bxsqhXQ=@vger.kernel.org X-Gm-Message-State: AOJu0YxV9OQPBe3GY41C+Wb5TrIDF+5iRMkY+rR+E/TxQkh+MkspuR5Z CinitQNjJ0cQf4XtlapKmzOXdTOE8iA2vdXGKjKK+sZmHqiyS5niFPnUjBq8AQ== X-Gm-Gg: ASbGncv+MebMRLeBr/+gs1qE8SXBzxucmslIw+QYg6yfNSJnrxhQupAHr8OQW4KBhkg gX8UBGsqD0MxiMJwPW2ayJBtIVSzObE4DqHjDZrq0UFn7QtXtR745sOw/xLL+a1ndFvT5EW6Iu0 gW8dh4GZ8fhA6/C0eeY9p2R9uTIFEJ6BZxi2FaGJUFuzZhviP0YcAXxu6M8IE1jHGMIQPsdJoAH SYZuyE48Zb1r9RnrgP4/dh597bIhiFVcpbRnWLF3Q8ysVfiovAmTQc8zztQHt17FhZKT51SMFFu EcQtvOVTZPbX0t12BteMoabBY3Y37aUjKFTrboWwI7hA X-Google-Smtp-Source: AGHT+IHaX2qbjIYUcszsoL1Qc/4/MkKcnuQcIMzCiKWztuO4F1U3trDrX/2LGOUFG0REstFQON234A== X-Received: by 2002:a17:902:ef4e:b0:223:5c33:56a2 with SMTP id d9443c01a7336-22428aa2fdemr334764975ad.28.1741704029395; Tue, 11 Mar 2025 07:40:29 -0700 (PDT) Received: from localhost ([2601:646:9e00:f56e:2844:3d8f:bf3e:12cc]) by smtp.gmail.com with UTF8SMTPSA id d9443c01a7336-224109e99dfsm98585225ad.91.2025.03.11.07.40.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 11 Mar 2025 07:40:28 -0700 (PDT) From: Stanislav Fomichev To: netdev@vger.kernel.org Cc: davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, linux-kernel@vger.kernel.org, donald.hunter@gmail.com, horms@kernel.org, michael.chan@broadcom.com, pavan.chebbi@broadcom.com, andrew+netdev@lunn.ch, jdamato@fastly.com, xuanzhuo@linux.alibaba.com, sdf@fomichev.me, almasrymina@google.com, asml.silence@gmail.com, dw@davidwei.uk Subject: [PATCH net-next v2 1/3] net: create netdev_nl_sock to wrap bindings list Date: Tue, 11 Mar 2025 07:40:24 -0700 Message-ID: <20250311144026.4154277-2-sdf@fomichev.me> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250311144026.4154277-1-sdf@fomichev.me> References: <20250311144026.4154277-1-sdf@fomichev.me> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Patchwork-Delegate: kuba@kernel.org No functional changes. Next patches will add more granular locking to netdev_nl_sock. Cc: Mina Almasry Signed-off-by: Stanislav Fomichev Reviewed-by: Mina Almasry --- Documentation/netlink/specs/netdev.yaml | 4 ++-- include/net/netdev_netlink.h | 11 +++++++++++ net/core/netdev-genl-gen.c | 4 ++-- net/core/netdev-genl-gen.h | 6 +++--- net/core/netdev-genl.c | 19 +++++++++---------- 5 files changed, 27 insertions(+), 17 deletions(-) create mode 100644 include/net/netdev_netlink.h diff --git a/Documentation/netlink/specs/netdev.yaml b/Documentation/netlink/specs/netdev.yaml index 36f1152bfac3..f5e0750ab71d 100644 --- a/Documentation/netlink/specs/netdev.yaml +++ b/Documentation/netlink/specs/netdev.yaml @@ -745,8 +745,8 @@ name: netdev - irq-suspend-timeout kernel-family: - headers: [ "linux/list.h"] - sock-priv: struct list_head + headers: [ "net/netdev_netlink.h"] + sock-priv: struct netdev_nl_sock mcast-groups: list: diff --git a/include/net/netdev_netlink.h b/include/net/netdev_netlink.h new file mode 100644 index 000000000000..1599573d35c9 --- /dev/null +++ b/include/net/netdev_netlink.h @@ -0,0 +1,11 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef __NET_NETDEV_NETLINK_H +#define __NET_NETDEV_NETLINK_H + +#include + +struct netdev_nl_sock { + struct list_head bindings; +}; + +#endif /* __NET_NETDEV_NETLINK_H */ diff --git a/net/core/netdev-genl-gen.c b/net/core/netdev-genl-gen.c index 996ac6a449eb..739f7b6506a6 100644 --- a/net/core/netdev-genl-gen.c +++ b/net/core/netdev-genl-gen.c @@ -9,7 +9,7 @@ #include "netdev-genl-gen.h" #include -#include +#include /* Integer value ranges */ static const struct netlink_range_validation netdev_a_page_pool_id_range = { @@ -217,7 +217,7 @@ struct genl_family netdev_nl_family __ro_after_init = { .n_split_ops = ARRAY_SIZE(netdev_nl_ops), .mcgrps = netdev_nl_mcgrps, .n_mcgrps = ARRAY_SIZE(netdev_nl_mcgrps), - .sock_priv_size = sizeof(struct list_head), + .sock_priv_size = sizeof(struct netdev_nl_sock), .sock_priv_init = __netdev_nl_sock_priv_init, .sock_priv_destroy = __netdev_nl_sock_priv_destroy, }; diff --git a/net/core/netdev-genl-gen.h b/net/core/netdev-genl-gen.h index e09dd7539ff2..17d39fd64c94 100644 --- a/net/core/netdev-genl-gen.h +++ b/net/core/netdev-genl-gen.h @@ -10,7 +10,7 @@ #include #include -#include +#include /* Common nested types */ extern const struct nla_policy netdev_page_pool_info_nl_policy[NETDEV_A_PAGE_POOL_IFINDEX + 1]; @@ -42,7 +42,7 @@ enum { extern struct genl_family netdev_nl_family; -void netdev_nl_sock_priv_init(struct list_head *priv); -void netdev_nl_sock_priv_destroy(struct list_head *priv); +void netdev_nl_sock_priv_init(struct netdev_nl_sock *priv); +void netdev_nl_sock_priv_destroy(struct netdev_nl_sock *priv); #endif /* _LINUX_NETDEV_GEN_H */ diff --git a/net/core/netdev-genl.c b/net/core/netdev-genl.c index 2b774183d31c..a219be90c739 100644 --- a/net/core/netdev-genl.c +++ b/net/core/netdev-genl.c @@ -829,8 +829,8 @@ int netdev_nl_bind_rx_doit(struct sk_buff *skb, struct genl_info *info) { struct nlattr *tb[ARRAY_SIZE(netdev_queue_id_nl_policy)]; struct net_devmem_dmabuf_binding *binding; - struct list_head *sock_binding_list; u32 ifindex, dmabuf_fd, rxq_idx; + struct netdev_nl_sock *priv; struct net_device *netdev; struct sk_buff *rsp; struct nlattr *attr; @@ -845,10 +845,9 @@ int netdev_nl_bind_rx_doit(struct sk_buff *skb, struct genl_info *info) ifindex = nla_get_u32(info->attrs[NETDEV_A_DEV_IFINDEX]); dmabuf_fd = nla_get_u32(info->attrs[NETDEV_A_DMABUF_FD]); - sock_binding_list = genl_sk_priv_get(&netdev_nl_family, - NETLINK_CB(skb).sk); - if (IS_ERR(sock_binding_list)) - return PTR_ERR(sock_binding_list); + priv = genl_sk_priv_get(&netdev_nl_family, NETLINK_CB(skb).sk); + if (IS_ERR(priv)) + return PTR_ERR(priv); rsp = genlmsg_new(GENLMSG_DEFAULT_SIZE, GFP_KERNEL); if (!rsp) @@ -909,7 +908,7 @@ int netdev_nl_bind_rx_doit(struct sk_buff *skb, struct genl_info *info) goto err_unbind; } - list_add(&binding->list, sock_binding_list); + list_add(&binding->list, &priv->bindings); nla_put_u32(rsp, NETDEV_A_DMABUF_ID, binding->id); genlmsg_end(rsp, hdr); @@ -931,17 +930,17 @@ int netdev_nl_bind_rx_doit(struct sk_buff *skb, struct genl_info *info) return err; } -void netdev_nl_sock_priv_init(struct list_head *priv) +void netdev_nl_sock_priv_init(struct netdev_nl_sock *priv) { - INIT_LIST_HEAD(priv); + INIT_LIST_HEAD(&priv->bindings); } -void netdev_nl_sock_priv_destroy(struct list_head *priv) +void netdev_nl_sock_priv_destroy(struct netdev_nl_sock *priv) { struct net_devmem_dmabuf_binding *binding; struct net_devmem_dmabuf_binding *temp; - list_for_each_entry_safe(binding, temp, priv, list) { + list_for_each_entry_safe(binding, temp, &priv->bindings, list) { rtnl_lock(); net_devmem_unbind_dmabuf(binding); rtnl_unlock(); From patchwork Tue Mar 11 14:40:25 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stanislav Fomichev X-Patchwork-Id: 14011977 X-Patchwork-Delegate: kuba@kernel.org Received: from mail-pl1-f175.google.com (mail-pl1-f175.google.com [209.85.214.175]) (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 412A125D213; Tue, 11 Mar 2025 14:40:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.175 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741704034; cv=none; b=FXM+b8NJgiFtZsnytexPovTErCaarWx2mjVcR7OAgclIHEsT0S+g4NXQ2c57POD9qSmBTbFoqFSK8bgscOgnAfRWHHEXys+prdE9mcpJIQAauqE3flxYVki4bnhb4bsNkTVRbf5lLC7YlLCVRYN4lOCEh7lb4lHeGW0U/tTXNYo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741704034; c=relaxed/simple; bh=N1mIZ5aHIAdEIQ9Xu004oo+tEjwnQH70IfbsiDMnVes=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=jVv0APY1h2yupxEVNZmQx3Z7gTddZdSEgdo2WfCr9Lms0L27W1EU5N2d/M09mEBqA0sFyrN7iCo0z4ap2tNgU5IfZvhXwRgxNTuJ02My+65xK1vO9CLophksP7cvBodCu1kiWc87OvwhhYegl9ud1H5NgaeeR1Gj58ZeqL+qK6M= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=fomichev.me; spf=pass smtp.mailfrom=gmail.com; arc=none smtp.client-ip=209.85.214.175 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=fomichev.me Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-pl1-f175.google.com with SMTP id d9443c01a7336-223fd89d036so109190855ad.1; Tue, 11 Mar 2025 07:40:32 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741704032; x=1742308832; 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=ANCxA7+p0eA4GCg1Qm9ypPlb2PsgQIC2MSDt7WmnMdg=; b=pDRBoWEoBd0SC9+93lH1o6bB/lNUlO6kIo3scBxHRpptmB0tMhLWfsJRmIvbOM7cLz uqJzNmo1jmUWknZuwR2lebywJBIPGCmfWt7lRTp+XWGtHA6alYUXNwouNE8I8inuNhfh Da0cy3tLDQ7rg1zoDT1iUNWL38YKYhH9nqdGCjn/AdOgqVkZn36dD11bmKL3EuXPnyXt CHjwUxSfsroR3L3uaVByVGY+kLHy7frRXes+E0PLFXGtbCL89grbglTYkMYVDiZk6j7d u8FsqXbLFl5W0KWc+aNFwMpjBN0nj5rQM3NzHzpGYUZDONztQlVGfs6rfzt9dHBY1BXy Fg8g== X-Forwarded-Encrypted: i=1; AJvYcCVyT+htCmt4aecIHdgZ81kNLZv+Df4DdGEKkMUub1dIXoljILquTFy0E5eVuMhJe88npe3b5KjbWtj1oZY=@vger.kernel.org X-Gm-Message-State: AOJu0YzxRg744Zc2qST+0MrFYsrgBg5j2fGaj6i2yHrLeTrKu9/QP3qv 84DYKC3JpYKcDEhy2lJB8ydN5ME1U5hyMr16Z2BB+RNGfo5ZRVI8BGnin+Bmaw== X-Gm-Gg: ASbGncsv7HUhlT+VG+JnMivGUlL+7T+xRTTfJVQcY7A2Qq9RvSmS86cWv6QOWnQaApm UdnvR4pKDIYdSjwuoFLJ5Lvt3EDTMqAQ1g6zo4jvkQdS6O2BWzMyGvTP33OJcm2i7i5RBpPPzdt DeAUUEB4BOVFQxjX+LUPHrYQSZtApiyAQPl0TmXhucK38bwDiSl8L03ZToXVcGtw1b2Hbe+Pk6w UQTLtFlclK9BAxzeBDHdm3U8HSxaf7w82cT5VVdJtitLqbsLH1fqJIC1GIu0XQKbjLoQXBqdKjZ 7MqPUJLhfgTNTMh3ppARtwnUrjorKb1Dlnp+vug7e7Wx X-Google-Smtp-Source: AGHT+IHoNcyH+Ck8bVIbkVAcxYdZo4TmYd5vae8vnKHE+ufqswy1zQuq39qQts/9s6WJMohsW24FVg== X-Received: by 2002:a05:6a21:2d04:b0:1f1:b69:9bdd with SMTP id adf61e73a8af0-1f544c87e20mr30237463637.37.1741704030753; Tue, 11 Mar 2025 07:40:30 -0700 (PDT) Received: from localhost ([2601:646:9e00:f56e:2844:3d8f:bf3e:12cc]) by smtp.gmail.com with UTF8SMTPSA id d2e1a72fcca58-73698246387sm10382649b3a.72.2025.03.11.07.40.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 11 Mar 2025 07:40:30 -0700 (PDT) From: Stanislav Fomichev To: netdev@vger.kernel.org Cc: davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, linux-kernel@vger.kernel.org, donald.hunter@gmail.com, horms@kernel.org, michael.chan@broadcom.com, pavan.chebbi@broadcom.com, andrew+netdev@lunn.ch, jdamato@fastly.com, xuanzhuo@linux.alibaba.com, sdf@fomichev.me, almasrymina@google.com, asml.silence@gmail.com, dw@davidwei.uk Subject: [PATCH net-next v2 2/3] net: add granular lock for the netdev netlink socket Date: Tue, 11 Mar 2025 07:40:25 -0700 Message-ID: <20250311144026.4154277-3-sdf@fomichev.me> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250311144026.4154277-1-sdf@fomichev.me> References: <20250311144026.4154277-1-sdf@fomichev.me> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Patchwork-Delegate: kuba@kernel.org As we move away from rtnl_lock for queue ops, introduce per-netdev_nl_sock lock. Cc: Mina Almasry Signed-off-by: Stanislav Fomichev Reviewed-by: Mina Almasry --- include/net/netdev_netlink.h | 1 + net/core/netdev-genl.c | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/include/net/netdev_netlink.h b/include/net/netdev_netlink.h index 1599573d35c9..075962dbe743 100644 --- a/include/net/netdev_netlink.h +++ b/include/net/netdev_netlink.h @@ -5,6 +5,7 @@ #include struct netdev_nl_sock { + struct mutex lock; struct list_head bindings; }; diff --git a/net/core/netdev-genl.c b/net/core/netdev-genl.c index a219be90c739..63e10717efc5 100644 --- a/net/core/netdev-genl.c +++ b/net/core/netdev-genl.c @@ -859,6 +859,7 @@ int netdev_nl_bind_rx_doit(struct sk_buff *skb, struct genl_info *info) goto err_genlmsg_free; } + mutex_lock(&priv->lock); rtnl_lock(); netdev = __dev_get_by_index(genl_info_net(info), ifindex); @@ -918,6 +919,7 @@ int netdev_nl_bind_rx_doit(struct sk_buff *skb, struct genl_info *info) goto err_unbind; rtnl_unlock(); + mutex_unlock(&priv->lock); return 0; @@ -925,6 +927,7 @@ int netdev_nl_bind_rx_doit(struct sk_buff *skb, struct genl_info *info) net_devmem_unbind_dmabuf(binding); err_unlock: rtnl_unlock(); + mutex_unlock(&priv->lock); err_genlmsg_free: nlmsg_free(rsp); return err; @@ -933,6 +936,7 @@ int netdev_nl_bind_rx_doit(struct sk_buff *skb, struct genl_info *info) void netdev_nl_sock_priv_init(struct netdev_nl_sock *priv) { INIT_LIST_HEAD(&priv->bindings); + mutex_init(&priv->lock); } void netdev_nl_sock_priv_destroy(struct netdev_nl_sock *priv) @@ -940,11 +944,13 @@ void netdev_nl_sock_priv_destroy(struct netdev_nl_sock *priv) struct net_devmem_dmabuf_binding *binding; struct net_devmem_dmabuf_binding *temp; + mutex_lock(&priv->lock); list_for_each_entry_safe(binding, temp, &priv->bindings, list) { rtnl_lock(); net_devmem_unbind_dmabuf(binding); rtnl_unlock(); } + mutex_unlock(&priv->lock); } static int netdev_genl_netdevice_event(struct notifier_block *nb, From patchwork Tue Mar 11 14:40:26 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stanislav Fomichev X-Patchwork-Id: 14011976 X-Patchwork-Delegate: kuba@kernel.org Received: from mail-pl1-f172.google.com (mail-pl1-f172.google.com [209.85.214.172]) (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 BB8E825D1F6; Tue, 11 Mar 2025 14:40:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.172 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741704034; cv=none; b=sdDtvP8uVNoJE3rphB3OZM0QDbsCK94Y76aB9tuAy9IFEQcTx58plSxE9k0Aj4QjJ2dxGkUXrXtjeTBg5Yw770AfnX1vsHlsFrp5S2Ctw9mBBpxe1htcXs/SdQAqA8m4rgzjTdOpBk65mfIzmm4nhtjTwXWdxIpOOx1ljbTeNzw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741704034; c=relaxed/simple; bh=QMphvet5eBPxtNopzD5wT6LsCAIRbvNlrStOVAsDg8c=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=oiSRtR5jHM2mdPQOZCtJQh1II65cHs/WVD0TV7lFMuYo2cU9LwZvdHRgqY9qoV3dhwef+Rs1lCn7AlC96qrc9WUTQQkpsN85OJX/jGWdbWbX/PWIZFdRlAGSd3HrTqh/8DYm6ugJNRPs9vV86nx/JRMN1lc9eQerxW38Qb16GY8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=fomichev.me; spf=pass smtp.mailfrom=gmail.com; arc=none smtp.client-ip=209.85.214.172 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=fomichev.me Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-pl1-f172.google.com with SMTP id d9443c01a7336-22349bb8605so104128065ad.0; Tue, 11 Mar 2025 07:40:32 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741704032; x=1742308832; 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=xIHHeAoRhvw6w3l3FTSqNbvDp20Th7TJeuEgauSJLT8=; b=QHcgcIaoB/dDxTaanN5Xd8P4tI78Ofpuy1V/xRzJVpr2iKhN+a32UQOZOQOMTD40HS VmnPV4QkvbtP5KS7YbHMnc44oj0Yxye7gDbdPc8rQ0le0iD92y0w9L8F/mFLsGmSmAS6 VA/ptb2ELD97O84YMwSzi5epSMbwJ9FypIvfTxGeRkbihS70xvqhfoQhYCSPr9VZC8Zr vtowLsQ6LnUim/vnh8eInbt8ZX9FgmA9M910mAigdXI9KAXc2zOY5WgOKfbTvqvpFUha HseLROy+gABH6cGBleU6P/g7SBMndsSltqq2wljLM7f271X3qcr9be5f4huCc5uWBV4X C0kA== X-Forwarded-Encrypted: i=1; AJvYcCUqNSWwG6iHBGt8m+iNqMjVsZal+U7G6u5DO6EnbDjUzbhgNPyTGYaY67eyaxGAes3rfQcZYHdnjx+wab4=@vger.kernel.org X-Gm-Message-State: AOJu0YykiJfpjArk1rI9luqelQT9Wouuank59uoiiiHNEaEKXg7PN4T7 HEJB8R3+PCKFkfL1P7UgMfvTfmtm5hwzKSaYp8snYxI9U8gPYGKPMrwicgB+iw== X-Gm-Gg: ASbGncuZcn2ob0YyK1Mf/2GEU+MeXMpnsd8XAaE67NIdSloIKo8I5da929Nx1mZx8tt xfAaeIEFYlUFNeGYrdZrQUEcOE7gyhisjCqUVla+zeW/4yJKHj71eZRizJ9Aprk/wnXRPPQqk+7 EtospwZ44PT1OdBI8ZktLjzZJVQSUjuzrJ0lyBo01qk40Xli6MMas4ahNcCCNvVtw66lv5MCtDT sNOHbZ+eb1wSC2qENHNvsgOyxNML/vmztGLuzBhJ4tLMc00arYoNhNPDpeNF7F5Z69NOdJc4tG4 6b6FiEgQGwPALNMelnL/dSIxe5GUabgPZysu3T2NFQJz X-Google-Smtp-Source: AGHT+IEFxfj8I+/mo12Ns57fmpJwTSgZj5lu8yWMR82LD8rfOYKXXLDheg0O1eYwZXZZ5FoJrxRnUQ== X-Received: by 2002:a17:902:ce0a:b0:21f:4b01:b978 with SMTP id d9443c01a7336-22428c055ecmr275160985ad.36.1741704031992; Tue, 11 Mar 2025 07:40:31 -0700 (PDT) Received: from localhost ([2601:646:9e00:f56e:2844:3d8f:bf3e:12cc]) by smtp.gmail.com with UTF8SMTPSA id d2e1a72fcca58-736bb5fcd68sm7311843b3a.135.2025.03.11.07.40.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 11 Mar 2025 07:40:31 -0700 (PDT) From: Stanislav Fomichev To: netdev@vger.kernel.org Cc: davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, linux-kernel@vger.kernel.org, donald.hunter@gmail.com, horms@kernel.org, michael.chan@broadcom.com, pavan.chebbi@broadcom.com, andrew+netdev@lunn.ch, jdamato@fastly.com, xuanzhuo@linux.alibaba.com, sdf@fomichev.me, almasrymina@google.com, asml.silence@gmail.com, dw@davidwei.uk Subject: [PATCH net-next v2 3/3] net: drop rtnl_lock for queue_mgmt operations Date: Tue, 11 Mar 2025 07:40:26 -0700 Message-ID: <20250311144026.4154277-4-sdf@fomichev.me> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250311144026.4154277-1-sdf@fomichev.me> References: <20250311144026.4154277-1-sdf@fomichev.me> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Patchwork-Delegate: kuba@kernel.org All drivers that use queue API are already converted to use netdev instance lock. Move netdev instance lock management to the netlink layer and drop rtnl_lock. Cc: Mina Almasry Signed-off-by: Stanislav Fomichev Reviewed-by: Mina Almasry. --- drivers/net/ethernet/broadcom/bnxt/bnxt.c | 4 ++-- drivers/net/netdevsim/netdev.c | 4 ++-- net/core/devmem.c | 4 ++-- net/core/netdev-genl.c | 13 ++++++------- net/core/netdev_rx_queue.c | 16 ++++++---------- 5 files changed, 18 insertions(+), 23 deletions(-) diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c index b09171110ec4..fed08aaf68e4 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c @@ -11381,14 +11381,14 @@ static void bnxt_irq_affinity_notify(struct irq_affinity_notify *notify, if (pcie_tph_set_st_entry(irq->bp->pdev, irq->msix_nr, tag)) return; - rtnl_lock(); + netdev_lock(irq->bp->dev); if (netif_running(irq->bp->dev)) { err = netdev_rx_queue_restart(irq->bp->dev, irq->ring_nr); if (err) netdev_err(irq->bp->dev, "RX queue restart failed: err=%d\n", err); } - rtnl_unlock(); + netdev_unlock(irq->bp->dev); } static void bnxt_irq_affinity_release(struct kref *ref) diff --git a/drivers/net/netdevsim/netdev.c b/drivers/net/netdevsim/netdev.c index d71fd2907cc8..e3152ebe98a2 100644 --- a/drivers/net/netdevsim/netdev.c +++ b/drivers/net/netdevsim/netdev.c @@ -787,7 +787,7 @@ nsim_qreset_write(struct file *file, const char __user *data, if (ret != 2) return -EINVAL; - rtnl_lock(); + netdev_lock(ns->netdev); if (queue >= ns->netdev->real_num_rx_queues) { ret = -EINVAL; goto exit_unlock; @@ -801,7 +801,7 @@ nsim_qreset_write(struct file *file, const char __user *data, ret = count; exit_unlock: - rtnl_unlock(); + netdev_unlock(ns->netdev); return ret; } diff --git a/net/core/devmem.c b/net/core/devmem.c index 7c6e0b5b6acb..5c4d79a1bcd8 100644 --- a/net/core/devmem.c +++ b/net/core/devmem.c @@ -25,7 +25,6 @@ /* Device memory support */ -/* Protected by rtnl_lock() */ static DEFINE_XARRAY_FLAGS(net_devmem_dmabuf_bindings, XA_FLAGS_ALLOC1); static const struct memory_provider_ops dmabuf_devmem_ops; @@ -128,9 +127,10 @@ void net_devmem_unbind_dmabuf(struct net_devmem_dmabuf_binding *binding) rxq->mp_params.mp_priv = NULL; rxq->mp_params.mp_ops = NULL; + netdev_lock(binding->dev); rxq_idx = get_netdev_rx_queue_index(rxq); - WARN_ON(netdev_rx_queue_restart(binding->dev, rxq_idx)); + netdev_unlock(binding->dev); } xa_erase(&net_devmem_dmabuf_bindings, binding->id); diff --git a/net/core/netdev-genl.c b/net/core/netdev-genl.c index 63e10717efc5..a186fea63c09 100644 --- a/net/core/netdev-genl.c +++ b/net/core/netdev-genl.c @@ -860,12 +860,11 @@ int netdev_nl_bind_rx_doit(struct sk_buff *skb, struct genl_info *info) } mutex_lock(&priv->lock); - rtnl_lock(); - netdev = __dev_get_by_index(genl_info_net(info), ifindex); + netdev = netdev_get_by_index_lock(genl_info_net(info), ifindex); if (!netdev || !netif_device_present(netdev)) { err = -ENODEV; - goto err_unlock; + goto err_unlock_sock; } if (dev_xdp_prog_count(netdev)) { @@ -918,7 +917,8 @@ int netdev_nl_bind_rx_doit(struct sk_buff *skb, struct genl_info *info) if (err) goto err_unbind; - rtnl_unlock(); + netdev_unlock(netdev); + mutex_unlock(&priv->lock); return 0; @@ -926,7 +926,8 @@ int netdev_nl_bind_rx_doit(struct sk_buff *skb, struct genl_info *info) err_unbind: net_devmem_unbind_dmabuf(binding); err_unlock: - rtnl_unlock(); + netdev_unlock(netdev); +err_unlock_sock: mutex_unlock(&priv->lock); err_genlmsg_free: nlmsg_free(rsp); @@ -946,9 +947,7 @@ void netdev_nl_sock_priv_destroy(struct netdev_nl_sock *priv) mutex_lock(&priv->lock); list_for_each_entry_safe(binding, temp, &priv->bindings, list) { - rtnl_lock(); net_devmem_unbind_dmabuf(binding); - rtnl_unlock(); } mutex_unlock(&priv->lock); } diff --git a/net/core/netdev_rx_queue.c b/net/core/netdev_rx_queue.c index 7419c41fd3cb..a5b234b33cd5 100644 --- a/net/core/netdev_rx_queue.c +++ b/net/core/netdev_rx_queue.c @@ -1,6 +1,7 @@ // SPDX-License-Identifier: GPL-2.0-or-later #include +#include #include #include #include @@ -18,7 +19,7 @@ int netdev_rx_queue_restart(struct net_device *dev, unsigned int rxq_idx) !qops->ndo_queue_mem_alloc || !qops->ndo_queue_start) return -EOPNOTSUPP; - ASSERT_RTNL(); + netdev_assert_locked(dev); new_mem = kvzalloc(qops->ndo_queue_mem_size, GFP_KERNEL); if (!new_mem) @@ -30,8 +31,6 @@ int netdev_rx_queue_restart(struct net_device *dev, unsigned int rxq_idx) goto err_free_new_mem; } - netdev_lock(dev); - err = qops->ndo_queue_mem_alloc(dev, new_mem, rxq_idx); if (err) goto err_free_old_mem; @@ -54,8 +53,6 @@ int netdev_rx_queue_restart(struct net_device *dev, unsigned int rxq_idx) qops->ndo_queue_mem_free(dev, old_mem); - netdev_unlock(dev); - kvfree(old_mem); kvfree(new_mem); @@ -80,7 +77,6 @@ int netdev_rx_queue_restart(struct net_device *dev, unsigned int rxq_idx) qops->ndo_queue_mem_free(dev, new_mem); err_free_old_mem: - netdev_unlock(dev); kvfree(old_mem); err_free_new_mem: @@ -118,9 +114,9 @@ int net_mp_open_rxq(struct net_device *dev, unsigned ifq_idx, { int ret; - rtnl_lock(); + netdev_lock(dev); ret = __net_mp_open_rxq(dev, ifq_idx, p); - rtnl_unlock(); + netdev_unlock(dev); return ret; } @@ -153,7 +149,7 @@ static void __net_mp_close_rxq(struct net_device *dev, unsigned ifq_idx, void net_mp_close_rxq(struct net_device *dev, unsigned ifq_idx, struct pp_memory_provider_params *old_p) { - rtnl_lock(); + netdev_lock(dev); __net_mp_close_rxq(dev, ifq_idx, old_p); - rtnl_unlock(); + netdev_unlock(dev); }