From patchwork Wed Feb 7 14:26:17 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 13548577 X-Patchwork-Delegate: kuba@kernel.org Received: from mail-yb1-f202.google.com (mail-yb1-f202.google.com [209.85.219.202]) (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 1F04E7C099 for ; Wed, 7 Feb 2024 14:26:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1707315998; cv=none; b=hoSdgR/QpdyqR7Urq0qbnCS8qVJtG/oKT2toDgKCFu44eHJuv7We5/E6LZlyZ72gtrZs32ySp7pXhDnQwLiah7PvHiL7mr8GEUu32gENVl8oPfNA0sxtz9SlSytTyX7xeVRNXUSaUSDHCnWodlQ3HaLa5o5ncOUDlUJILM40Gww= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1707315998; c=relaxed/simple; bh=MVrNsRBYO0/ChE8zw52OA/oR2pmQfu5LlW2VYcq5ViI=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=CTjRD8HtVxk85GMokXox/zpNZ5CHLNrPTL7IoZRRZ1T2qUDfJ2fB+1R6jrP1XzHK02/oleT6E092vB9sGGFOSGulQgTH0+4MA8lmrwlA76Cjwq7UsFUMSQQA95rbljliGmm4ec5mvOdSVnSW38Mha+MYr+QK3gfE/WlJz6AFsy8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--edumazet.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=0OGsTc/R; arc=none smtp.client-ip=209.85.219.202 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--edumazet.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="0OGsTc/R" Received: by mail-yb1-f202.google.com with SMTP id 3f1490d57ef6-dbf618042daso1012066276.0 for ; Wed, 07 Feb 2024 06:26:36 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1707315996; x=1707920796; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=jrrTivmlhvG5U54rl/JznSMS2mnircQYl/67qSXK/Go=; b=0OGsTc/R33SZa6aBECSZ8vp6IbswZeDMsnOAJlOH7P/qeyh7/5FyROa4Z75Qka5Z+e z1GGMBkINEnXWoUenMP/kMTQ8VDDuMMe5o+DzPE1CGskT6bLEYz67ZiJKhWtVF/jKTaq T1rpiJvxyZag9ymqm4GI6g/VvhNxZrXOB8qjOBrD6n678QpPmwB5g6XuXz1Y2fLNgJaX cv3Zm+L3rJ4QBLXbMG3XZtkF1pe7X0p+wivHpAF/3TtoSnre2nXKK1ivKQ5iHXRc49iP NKsi0HUQ4Tcw0KkBvUh9B+5kr1J7S8gfpq6lyGXu9S/IKH/PE6JC5GnsJf7Bw1CpSA7c 67aA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1707315996; x=1707920796; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=jrrTivmlhvG5U54rl/JznSMS2mnircQYl/67qSXK/Go=; b=slvukGwGw+iyCwSIaN4gllimHIbi5/SIxEAHr6ACITfSk3prJkE36E7XfTZH+Pthha fVpK4Ep1xN7bo8E2FvZIA0X3B6laci3DYsX8G+3fM/VMHVd9hT5aX3a4FuZKjWpOT+pT H/s+nvoDZqbG6Oo5TdSarj+DQVsexu5M7h/XS5/ayf/fZL7pxl9oXfKdj/jfbaH1BUo/ X+MNqmqIk/YnNIHbqJddupSQFG2KYlnjekv3YpxIr6b1szX1ytKpRPdEkCZNLl3i1gWx 2u+mUUR/Rne6MumKrWHoNqj7tKjfKWpL42kK1DoVcJUXMY1W2XWzsXmiv09EMB5Dde7V cD2w== X-Gm-Message-State: AOJu0Ywq4Nd+PV7czJrgZM9XjBFJ/MBY+fdNEfpiGgFeT+NHhCDBzm/P ODwhS/szUZ0EF6M2YM6f3ia4Ow+hGK69+9HCdwHmMIf/eFvBdtuXW/YH1dk1sCn+CORmQ7OMAEm B6LTE5jAe+A== X-Google-Smtp-Source: AGHT+IGJtPRHNv2SxFURZaH1UW+8mKUv3IXTEk4fIvnYcPMbuaIBfPID3W1puP8qs2Sik+A+FGRpgnczzjpEqg== X-Received: from edumazet1.c.googlers.com ([fda3:e722:ac3:cc00:2b:7d90:c0a8:395a]) (user=edumazet job=sendgmr) by 2002:a05:6902:2293:b0:dc6:207c:dc93 with SMTP id dn19-20020a056902229300b00dc6207cdc93mr179198ybb.2.1707315996090; Wed, 07 Feb 2024 06:26:36 -0800 (PST) Date: Wed, 7 Feb 2024 14:26:17 +0000 In-Reply-To: <20240207142629.3456570-1-edumazet@google.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20240207142629.3456570-1-edumazet@google.com> X-Mailer: git-send-email 2.43.0.594.gd9cf4e227d-goog Message-ID: <20240207142629.3456570-2-edumazet@google.com> Subject: [PATCH net-next 01/13] net: annotate data-races around dev->name_assign_type From: Eric Dumazet To: "David S . Miller" , Jakub Kicinski , Paolo Abeni Cc: netdev@vger.kernel.org, eric.dumazet@gmail.com, Eric Dumazet X-Patchwork-Delegate: kuba@kernel.org name_assign_type_show() runs locklessly, we should annotate accesses to dev->name_assign_type. Alternative would be to grab devnet_rename_sem semaphore from name_assign_type_show(), but this would not bring more accuracy. Signed-off-by: Eric Dumazet --- net/core/dev.c | 6 +++--- net/core/net-sysfs.c | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/net/core/dev.c b/net/core/dev.c index 27ba057d06c490772320775f25fc2885f0a1ff3e..d2321a68a8abb4a4253c5843952b542ed040327a 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -1220,13 +1220,13 @@ int dev_change_name(struct net_device *dev, const char *newname) dev->flags & IFF_UP ? " (while UP)" : ""); old_assign_type = dev->name_assign_type; - dev->name_assign_type = NET_NAME_RENAMED; + WRITE_ONCE(dev->name_assign_type, NET_NAME_RENAMED); rollback: ret = device_rename(&dev->dev, dev->name); if (ret) { memcpy(dev->name, oldname, IFNAMSIZ); - dev->name_assign_type = old_assign_type; + WRITE_ONCE(dev->name_assign_type, old_assign_type); up_write(&devnet_rename_sem); return ret; } @@ -1255,7 +1255,7 @@ int dev_change_name(struct net_device *dev, const char *newname) down_write(&devnet_rename_sem); memcpy(dev->name, oldname, IFNAMSIZ); memcpy(oldname, newname, IFNAMSIZ); - dev->name_assign_type = old_assign_type; + WRITE_ONCE(dev->name_assign_type, old_assign_type); old_assign_type = NET_NAME_RENAMED; goto rollback; } else { diff --git a/net/core/net-sysfs.c b/net/core/net-sysfs.c index a09d507c5b03d24a829bf7af0b7cf1e6a0bdb65a..f4c2b82674951bbeefd880ca22c54e6a32c9f988 100644 --- a/net/core/net-sysfs.c +++ b/net/core/net-sysfs.c @@ -125,7 +125,7 @@ static DEVICE_ATTR_RO(iflink); static ssize_t format_name_assign_type(const struct net_device *dev, char *buf) { - return sysfs_emit(buf, fmt_dec, dev->name_assign_type); + return sysfs_emit(buf, fmt_dec, READ_ONCE(dev->name_assign_type)); } static ssize_t name_assign_type_show(struct device *dev, @@ -135,7 +135,7 @@ static ssize_t name_assign_type_show(struct device *dev, struct net_device *ndev = to_net_dev(dev); ssize_t ret = -EINVAL; - if (ndev->name_assign_type != NET_NAME_UNKNOWN) + if (READ_ONCE(ndev->name_assign_type) != NET_NAME_UNKNOWN) ret = netdev_show(dev, attr, buf, format_name_assign_type); return ret; From patchwork Wed Feb 7 14:26:18 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 13548578 X-Patchwork-Delegate: kuba@kernel.org Received: from mail-yw1-f202.google.com (mail-yw1-f202.google.com [209.85.128.202]) (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 BA5EE7CF14 for ; Wed, 7 Feb 2024 14:26:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1707316000; cv=none; b=jmoKHFRt0mvAKfCs/sK91K+7g4549aj+VQRj+d59S7t038x8IdCwHeHeuD25wvZgdE5dXq9D53mL6rEQ8knJFA0DAaJLubp4yGgPT92FmMrPODCVCGPb0jmz5A5FWIxiZHPxVS0vI8N+tNIwFPX9ffINo0YJFVtLuLyuaJiMe/E= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1707316000; c=relaxed/simple; bh=MWtTgsxhutPcqcXre+qqC5H0nTEtGjJi7lOZLnMu+Is=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=FgE0xhaCUm0Fjb+yV/HUbNz+q1Pahy6RUyhyyrpwWZfvem/DKp6gD08TMflD/fIhOgKBeTAQSQUUPRj8149JzWDWfatNhWo8YH/LPf4gtXPE4ratJweDd7UqmZJz8YVSROK481Oi3HQy/IP6XFwxbjiVw00JTEAhqNUuR+B5YBA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--edumazet.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=CIX4Ep6g; arc=none smtp.client-ip=209.85.128.202 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--edumazet.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="CIX4Ep6g" Received: by mail-yw1-f202.google.com with SMTP id 00721157ae682-6047fed0132so10963397b3.1 for ; Wed, 07 Feb 2024 06:26:38 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1707315997; x=1707920797; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=QH7GbxV9un5ZUeFNIDqMG4Bfo0qY582NX2C+vc8PuS0=; b=CIX4Ep6gKOjEeAEC4DcTof6ed+YwoSeohhPgscf6Y8I7GwREe30lEmwuE8/hDg4O2s v2/EkXkukj41Gj1WrMVOSczB6yO0xpCIWWOviuuT4BGsXphk71+nNLNKEdmVfhFToGS8 xLF8sspT0FY3vbuNWgPgmbgYMkI8ZXNda9ttV86tkuN9P4vLkac2mlPuerqeEX6xWv80 R4UtSINooHS5HafObdznhBwHcWkDO5ksfO7FCSJAa+T5ycb/i8o3w7e6m/7Ayvl1LHM3 eMDrT7oRlB7vZcDia6S8b1OIymN6P8FJO7TzI/ZL6XL+h3a/EbdCBLoWJoRPd8AhGPJ6 j/2g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1707315997; x=1707920797; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=QH7GbxV9un5ZUeFNIDqMG4Bfo0qY582NX2C+vc8PuS0=; b=phslTfvTY80UShozP1myQJQvD/djRhcJh+047fmbeRTkuV+SO2Kztra7e9axUyu7np jrC7dhyqeIqA6RHafMquTBaIyf6RgeDGmGgMdGC5QWOFpF79IVT33mrfCrAz7joEz+yT 2K9ZSRFAib3EhQBbK2NS/tF6aItuQF50kgHpx0v7KWwoc5w1EzhbEW61DswI6i14y/aX tVLdhXutJRTr0XauzjLHT+MF3nJimNYC3kWFZvSNGFvK+c9N6pRLlk4a5uquM9my+77e KA10KIp2DF5KTyW51hHRrkKa/T1sO6Sj/twNb6TRfpgasLvJ/iD6DbG/sP8KjYPD+Po5 U8og== X-Gm-Message-State: AOJu0YwTJVh+aeXHUDi5WpbuhhbZx6E+v06I18owkyHbo2R2dLqtEMzQ lNXuSo+wBKUp4qbTBmZv0JN9YyqmiOHCtwKVUVX3DxyunN40QAnI94NmimkBa08dJ29ubM7UmKg Xq/uk1o9q1A== X-Google-Smtp-Source: AGHT+IE5MvGb0Mkm31b+qS7ca64gZa6kMazlz3zQJKt4HiGp6uKIM2pMFf4SUo/tsIdMaSyQh2LH56PRNUM5Vw== X-Received: from edumazet1.c.googlers.com ([fda3:e722:ac3:cc00:2b:7d90:c0a8:395a]) (user=edumazet job=sendgmr) by 2002:a81:9bc4:0:b0:5f8:e803:4b0d with SMTP id s187-20020a819bc4000000b005f8e8034b0dmr884801ywg.2.1707315997601; Wed, 07 Feb 2024 06:26:37 -0800 (PST) Date: Wed, 7 Feb 2024 14:26:18 +0000 In-Reply-To: <20240207142629.3456570-1-edumazet@google.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20240207142629.3456570-1-edumazet@google.com> X-Mailer: git-send-email 2.43.0.594.gd9cf4e227d-goog Message-ID: <20240207142629.3456570-3-edumazet@google.com> Subject: [PATCH net-next 02/13] ip_tunnel: annotate data-races around t->parms.link From: Eric Dumazet To: "David S . Miller" , Jakub Kicinski , Paolo Abeni Cc: netdev@vger.kernel.org, eric.dumazet@gmail.com, Eric Dumazet X-Patchwork-Delegate: kuba@kernel.org t->parms.link is read locklessly, annotate these reads and opposite writes accordingly. Signed-off-by: Eric Dumazet --- net/ipv4/ip_tunnel.c | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/net/ipv4/ip_tunnel.c b/net/ipv4/ip_tunnel.c index beeae624c412d752bd5ee5d459a88f57640445e9..b8e846b2863741903528a41126cf29419ed63324 100644 --- a/net/ipv4/ip_tunnel.c +++ b/net/ipv4/ip_tunnel.c @@ -102,10 +102,9 @@ struct ip_tunnel *ip_tunnel_lookup(struct ip_tunnel_net *itn, if (!ip_tunnel_key_match(&t->parms, flags, key)) continue; - if (t->parms.link == link) + if (READ_ONCE(t->parms.link) == link) return t; - else - cand = t; + cand = t; } hlist_for_each_entry_rcu(t, head, hash_node) { @@ -117,9 +116,9 @@ struct ip_tunnel *ip_tunnel_lookup(struct ip_tunnel_net *itn, if (!ip_tunnel_key_match(&t->parms, flags, key)) continue; - if (t->parms.link == link) + if (READ_ONCE(t->parms.link) == link) return t; - else if (!cand) + if (!cand) cand = t; } @@ -137,9 +136,9 @@ struct ip_tunnel *ip_tunnel_lookup(struct ip_tunnel_net *itn, if (!ip_tunnel_key_match(&t->parms, flags, key)) continue; - if (t->parms.link == link) + if (READ_ONCE(t->parms.link) == link) return t; - else if (!cand) + if (!cand) cand = t; } @@ -150,9 +149,9 @@ struct ip_tunnel *ip_tunnel_lookup(struct ip_tunnel_net *itn, !(t->dev->flags & IFF_UP)) continue; - if (t->parms.link == link) + if (READ_ONCE(t->parms.link) == link) return t; - else if (!cand) + if (!cand) cand = t; } @@ -221,7 +220,7 @@ static struct ip_tunnel *ip_tunnel_find(struct ip_tunnel_net *itn, hlist_for_each_entry_rcu(t, head, hash_node) { if (local == t->parms.iph.saddr && remote == t->parms.iph.daddr && - link == t->parms.link && + link == READ_ONCE(t->parms.link) && type == t->dev->type && ip_tunnel_key_match(&t->parms, flags, key)) break; @@ -747,7 +746,7 @@ void ip_tunnel_xmit(struct sk_buff *skb, struct net_device *dev, ip_tunnel_init_flow(&fl4, protocol, dst, tnl_params->saddr, tunnel->parms.o_key, RT_TOS(tos), - dev_net(dev), tunnel->parms.link, + dev_net(dev), READ_ONCE(tunnel->parms.link), tunnel->fwmark, skb_get_hash(skb), 0); if (ip_tunnel_encap(skb, &tunnel->encap, &protocol, &fl4) < 0) @@ -867,7 +866,7 @@ static void ip_tunnel_update(struct ip_tunnel_net *itn, if (t->parms.link != p->link || t->fwmark != fwmark) { int mtu; - t->parms.link = p->link; + WRITE_ONCE(t->parms.link, p->link); t->fwmark = fwmark; mtu = ip_tunnel_bind_dev(dev); if (set_mtu) @@ -1057,9 +1056,9 @@ EXPORT_SYMBOL(ip_tunnel_get_link_net); int ip_tunnel_get_iflink(const struct net_device *dev) { - struct ip_tunnel *tunnel = netdev_priv(dev); + const struct ip_tunnel *tunnel = netdev_priv(dev); - return tunnel->parms.link; + return READ_ONCE(tunnel->parms.link); } EXPORT_SYMBOL(ip_tunnel_get_iflink); From patchwork Wed Feb 7 14:26:19 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 13548579 X-Patchwork-Delegate: kuba@kernel.org Received: from mail-yb1-f202.google.com (mail-yb1-f202.google.com [209.85.219.202]) (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 2CBAD7C099 for ; Wed, 7 Feb 2024 14:26:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1707316001; cv=none; b=KDxonZ67EnorKj2RgiucyiK8ZHs5D2pljSh7KEZgwJuWxPr+J65TsZO9vG8XhMs2uMYYoBpCfc1zQqMTCG076I7F1fVsAPX3J7mo2Nshq19WDVN+GwnyzExVTmdIHUYyqZKJt78qYMGGMJQiD5DImdXXVexXJ78NcMpMiDevoV4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1707316001; c=relaxed/simple; bh=rjPZS37myAMVLcm5QTyyj0gwsDFQ/NzT5JabszGNCeg=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=ZdIeiwF27Hc/YBhviwrgjyseXQGb+ht2ilzGmBOtcnJuUedIFj2jK3ruc5EF+r/8pTwUklZeNHvm6Ah/f970YSwkUPqHwzkgodliX+kOCF+m5lUBbc529Mtmhj57uZFKAxu053bgM6z5j5kLDtvvNfIXXiGC90LtxxEQgWQ/Nw4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--edumazet.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=YYqwdOzN; arc=none smtp.client-ip=209.85.219.202 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--edumazet.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="YYqwdOzN" Received: by mail-yb1-f202.google.com with SMTP id 3f1490d57ef6-dc647f65573so1057914276.2 for ; Wed, 07 Feb 2024 06:26:39 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1707315999; x=1707920799; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=Gvc1bc4onOJD+myVGtsrNWF6tYGSfb8pdE7XzbX6nKY=; b=YYqwdOzNaGmhJaYXxAnDO+bmxBbM9FGovUtFIDxxhQ/qQXEJkVbW7bf7SBwAhQDW68 1kDeWDyAKHflIgFmj+X25qRfceneD48qxvCMCZxFxtBsloS6Y3KsSSePwlIDY8kWAMGT Ty9dbhAkVAAroc9bmpcRPZnOw1xhfSC6wQQIm1EQWOOYeZRMOmQ/aTLf0ezzAS/LLRwO ePF9n3zxmN5Cvlc7dFCX/J/yI/HWUVZUiqOLkgN9geafYPbQ955ydhotdxRlcIK2cqkX mHYaeUXxW1LtT7usgG98IZ1lFezjsRxKPfjchwohupAKeLLy6hqD6vgwRz51SKk5ZNCU WU1w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1707315999; x=1707920799; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=Gvc1bc4onOJD+myVGtsrNWF6tYGSfb8pdE7XzbX6nKY=; b=QFbUJFR/rP1oUEzSJEx79FIyuJyP8xd1OGBO2JkMRU/oFa/k/ZvhV+jae0NO/Knm6p 55nyCl3cwE610tW7u2Cra1LoKlOGnIbtHk+wEi5mCwOtCqF6j+9N3pXHnuepj6v+6XCV vbGnO5U2J6eUUthdfra8X/wOUm/vSSiqyrzWXi7b6mXdrkhZPuRvuIZDl/HGCVm1Lnqh H3eKaQ4PrIdpMnkiMAzHYzXA2tTMnYxOToxhbzSAAecAVx2XGKczJpfPAZvBRqDskyhA hsrfCw2GVx/uTR8uyMuCqVaHLJ6La3AJ1V4UpqG+QiKkFPiLpv9sVEqX5G3E8quBbNNU jWbA== X-Gm-Message-State: AOJu0YxMNY9RSxz11yQF6pkiPrOFDX3O/RMhh8kRz0/jRbdQn+BKEdjM nrjnnLX6b22WewY5lDy77l+9VpruW57j5qOELj+1B3FOZCjj6++oj23TXX7XClndlWlkJU+btBx ibJcePPaPyg== X-Google-Smtp-Source: AGHT+IF5+ucplCkm+bL2dyU10FA2s/gT8MsaKjZZsiK+GKVkT03j4oIT6skCNzP/BxJGxOFfL/5wiaLgtsCnsA== X-Received: from edumazet1.c.googlers.com ([fda3:e722:ac3:cc00:2b:7d90:c0a8:395a]) (user=edumazet job=sendgmr) by 2002:a05:6902:a85:b0:dc6:ee88:ced2 with SMTP id cd5-20020a0569020a8500b00dc6ee88ced2mr1189456ybb.12.1707315999114; Wed, 07 Feb 2024 06:26:39 -0800 (PST) Date: Wed, 7 Feb 2024 14:26:19 +0000 In-Reply-To: <20240207142629.3456570-1-edumazet@google.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20240207142629.3456570-1-edumazet@google.com> X-Mailer: git-send-email 2.43.0.594.gd9cf4e227d-goog Message-ID: <20240207142629.3456570-4-edumazet@google.com> Subject: [PATCH net-next 03/13] dev: annotate accesses to dev->link From: Eric Dumazet To: "David S . Miller" , Jakub Kicinski , Paolo Abeni Cc: netdev@vger.kernel.org, eric.dumazet@gmail.com, Eric Dumazet X-Patchwork-Delegate: kuba@kernel.org Following patch will read dev->link locklessly, annotate the write from do_setlink(). Signed-off-by: Eric Dumazet --- net/core/rtnetlink.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c index 31f433950c8dc953bcb65cc0469f7df962314b87..8d95e0863534f80cecceb2dd4a7b2a16f7f4bca3 100644 --- a/net/core/rtnetlink.c +++ b/net/core/rtnetlink.c @@ -2974,7 +2974,7 @@ static int do_setlink(const struct sk_buff *skb, write_lock(&dev_base_lock); if (dev->link_mode ^ value) status |= DO_SETLINK_NOTIFY; - dev->link_mode = value; + WRITE_ONCE(dev->link_mode, value); write_unlock(&dev_base_lock); } From patchwork Wed Feb 7 14:26:20 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 13548580 X-Patchwork-Delegate: kuba@kernel.org Received: from mail-yb1-f201.google.com (mail-yb1-f201.google.com [209.85.219.201]) (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 A230E7CF14 for ; Wed, 7 Feb 2024 14:26:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1707316003; cv=none; b=U5ybfdIc1T+We9Gz2SMlLYseEuujAF8W1PUT3d0gLYE9w7ep/0IRsz71elMW7HAniN2W6XKVD7qJxDmYBAGulRceCi3I9xauPuYjtIgryNQMvr2HTZmpdDoND41LxWju+GhCWzAL82kl0XOl9J6NkqFbg3xWDT3t4Q/2ubxsf7M= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1707316003; c=relaxed/simple; bh=iKeXnvQd0BNCGxSfGrwTf4bm+nHFmvpTgh8xqNNbc2o=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=BdsEg3HWCCOZW2X6sh1H85erVzH9cSUoYtmgoAdHxIM5JfGLa303XbQgkUw7DIOjZYqkbE/JCCHii7ql0BlspC4AmyG82jUtCaOZK76IiQJ/c2O1nznNqQSct3qePX9dQlOfvFVKfuhHQ5VYDZRxth727PMYh8VYz8FG3OnlOLU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--edumazet.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=x/75g602; arc=none smtp.client-ip=209.85.219.201 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--edumazet.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="x/75g602" Received: by mail-yb1-f201.google.com with SMTP id 3f1490d57ef6-dc6bad01539so892535276.3 for ; Wed, 07 Feb 2024 06:26:41 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1707316000; x=1707920800; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=y4yYR4Ow9u9RBP+h5D5648K5t5UOdRTxXm/RiBeaOrM=; b=x/75g602xgonW+10JqcohCXHn7tZgaAgPr5xZMKYPziq52KnCvBWuw2vB8J5hp8hJk DwUu40Llwk82wK261DEHr8Akz2qNTZnRVn8M+9xsIfKC/PQmMdpLxQ8WLDjYTyik2Bd/ +X+fdQpR8lYCnj5uMHqcoUdslssXCJOMReNPHorxXr+kpbki+ugj0YlP3RIBzrLdid8F jG2R1JqaeAcFq6Tzo1kVMKkSnPYYFWbaChjJNqZRKV2t5f8JuARUPi6gy17T7erkmTqM hUsgcqOrw8jngRhlXPFhKmTIqbhPw068+j5sSSRYEottGrZNrEShNbClKZdwWFCyN03r SVUg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1707316000; x=1707920800; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=y4yYR4Ow9u9RBP+h5D5648K5t5UOdRTxXm/RiBeaOrM=; b=GOwpMe2MJXrDBxydZSaQDiZKmKBqsHJLWUOVjgXVge9gwp60n7WN7QOj9UqUp4wgJm cGlwhuW/YZP2uBRFuwDgDOAv9yV0RRjQ98Ag5hCVkpOOvFfu19DAyKMCQN+Ji2qL7dPT omNNc9Lo5EGtjOmAXIygoun9siTQmKADQoMCXib7CaxGm5E9S6bJo16+x79HegdzBPyy y3rRHuvR+cyobzApsTAC+VWjxLUse/a1QsyPhispRumahQRjlQlCbGv0KHw1mZiUz6OQ iPq/aMjOj54JiWl2njIK+Cgk/8ci//XWKOqY80N6oMf2U21oVcFem7xxpaxqz6Cj/ZHK 4QXw== X-Gm-Message-State: AOJu0YwWxO0M1u4Rm7R0Yma2arMBBoxugyzIp8Qz10uaV/vIujnLF//i 8SppJOWShB0nnCyCWia7A88weVmJ0mISc9CvS472GxvAsSH9zK0d+rW5z7jftW/Pu+/fCpEuZwm KT/EMXVcUUA== X-Google-Smtp-Source: AGHT+IHzgHCgeOMaxoHn+ZoRUqPxpbYeSE8m3X34zeIZd3shW8wB7PEFBOoqhV0vaeAKwXbeDVnA0FYlygB/jQ== X-Received: from edumazet1.c.googlers.com ([fda3:e722:ac3:cc00:2b:7d90:c0a8:395a]) (user=edumazet job=sendgmr) by 2002:a05:6902:1b81:b0:dc2:25fd:eff1 with SMTP id ei1-20020a0569021b8100b00dc225fdeff1mr158829ybb.4.1707316000690; Wed, 07 Feb 2024 06:26:40 -0800 (PST) Date: Wed, 7 Feb 2024 14:26:20 +0000 In-Reply-To: <20240207142629.3456570-1-edumazet@google.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20240207142629.3456570-1-edumazet@google.com> X-Mailer: git-send-email 2.43.0.594.gd9cf4e227d-goog Message-ID: <20240207142629.3456570-5-edumazet@google.com> Subject: [PATCH net-next 04/13] net: convert dev->reg_state to u8 From: Eric Dumazet To: "David S . Miller" , Jakub Kicinski , Paolo Abeni Cc: netdev@vger.kernel.org, eric.dumazet@gmail.com, Eric Dumazet X-Patchwork-Delegate: kuba@kernel.org Prepares things so that dev->reg_state reads can be lockless, by adding WRITE_ONCE() on write side. Signed-off-by: Eric Dumazet --- include/linux/netdevice.h | 23 ++++++++++++++--------- net/core/dev.c | 8 ++++---- 2 files changed, 18 insertions(+), 13 deletions(-) diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index 118c40258d07b787adf518e576e75545e4bae846..bed8de91e91a4bd83fe80f6835643af68f1adc53 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h @@ -1815,6 +1815,15 @@ enum netdev_stat_type { NETDEV_PCPU_STAT_DSTATS, /* struct pcpu_dstats */ }; +enum netdev_reg_state { + NETREG_UNINITIALIZED = 0, + NETREG_REGISTERED, /* completed register_netdevice */ + NETREG_UNREGISTERING, /* called unregister_netdevice */ + NETREG_UNREGISTERED, /* completed unregister todo */ + NETREG_RELEASED, /* called free_netdev */ + NETREG_DUMMY, /* dummy device for NAPI poll */ +}; + /** * struct net_device - The DEVICE structure. * @@ -2372,13 +2381,7 @@ struct net_device { struct list_head link_watch_list; - enum { NETREG_UNINITIALIZED=0, - NETREG_REGISTERED, /* completed register_netdevice */ - NETREG_UNREGISTERING, /* called unregister_netdevice */ - NETREG_UNREGISTERED, /* completed unregister todo */ - NETREG_RELEASED, /* called free_netdev */ - NETREG_DUMMY, /* dummy device for NAPI poll */ - } reg_state:8; + u8 reg_state; bool dismantle; @@ -5254,7 +5257,9 @@ static inline const char *netdev_name(const struct net_device *dev) static inline const char *netdev_reg_state(const struct net_device *dev) { - switch (dev->reg_state) { + u8 reg_state = READ_ONCE(dev->reg_state); + + switch (reg_state) { case NETREG_UNINITIALIZED: return " (uninitialized)"; case NETREG_REGISTERED: return ""; case NETREG_UNREGISTERING: return " (unregistering)"; @@ -5263,7 +5268,7 @@ static inline const char *netdev_reg_state(const struct net_device *dev) case NETREG_DUMMY: return " (dummy)"; } - WARN_ONCE(1, "%s: unknown reg_state %d\n", dev->name, dev->reg_state); + WARN_ONCE(1, "%s: unknown reg_state %d\n", dev->name, reg_state); return " (unknown)"; } diff --git a/net/core/dev.c b/net/core/dev.c index d2321a68a8abb4a4253c5843952b542ed040327a..027d0b7976f337df885266aeab2c90fe631decf1 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -10268,7 +10268,7 @@ int register_netdevice(struct net_device *dev) ret = netdev_register_kobject(dev); write_lock(&dev_base_lock); - dev->reg_state = ret ? NETREG_UNREGISTERED : NETREG_REGISTERED; + WRITE_ONCE(dev->reg_state, ret ? NETREG_UNREGISTERED : NETREG_REGISTERED); write_unlock(&dev_base_lock); if (ret) goto err_uninit_notify; @@ -10561,7 +10561,7 @@ void netdev_run_todo(void) } write_lock(&dev_base_lock); - dev->reg_state = NETREG_UNREGISTERED; + WRITE_ONCE(dev->reg_state, NETREG_UNREGISTERED); write_unlock(&dev_base_lock); linkwatch_sync_dev(dev); } @@ -10981,7 +10981,7 @@ void free_netdev(struct net_device *dev) } BUG_ON(dev->reg_state != NETREG_UNREGISTERED); - dev->reg_state = NETREG_RELEASED; + WRITE_ONCE(dev->reg_state, NETREG_RELEASED); /* will free via device release */ put_device(&dev->dev); @@ -11071,7 +11071,7 @@ void unregister_netdevice_many_notify(struct list_head *head, /* And unlink it from device chain. */ write_lock(&dev_base_lock); unlist_netdevice(dev, false); - dev->reg_state = NETREG_UNREGISTERING; + WRITE_ONCE(dev->reg_state, NETREG_UNREGISTERING); write_unlock(&dev_base_lock); } flush_all_backlogs(); From patchwork Wed Feb 7 14:26:21 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 13548581 X-Patchwork-Delegate: kuba@kernel.org Received: from mail-yb1-f202.google.com (mail-yb1-f202.google.com [209.85.219.202]) (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 67E3E7E567 for ; Wed, 7 Feb 2024 14:26:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1707316004; cv=none; b=lbFbEPhH/G+FjxPlu9M8i+EGOTvQwirHxE8IqdGTUPuP8blhQYmlb3KO4nVssKYyF80V01ObBnvG64Xr1DK4E4RVB7Q4qkxJ3w9kE/yzCU7s5xXGsgbX1j+9dkWpFu/CpBhI7HPtz9dDL/GfsSH1Fm7FXIZ+QelTtpDff/5dPjw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1707316004; c=relaxed/simple; bh=A1AxBIRilVUDb4+CoB/1XBXgN6/J1A53bxW2BFyc0Zw=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=Y9WQy4n9deS39+fo0iHEVQhIS69LtSdhPAa+h5I0rCIxDl+MhAQ5+8/eHDm9GXSw4imnkWFrhi5n3Y8XM10e8CES4ZKh1vtHKTOTV1+TlC2JqqNODBXBr8/B9hpkSehMPS0Ehiggv0uPb/24I0MUVgRne0qJk8P+51RMx0AfoV0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--edumazet.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=zHz9XbDY; arc=none smtp.client-ip=209.85.219.202 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--edumazet.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="zHz9XbDY" Received: by mail-yb1-f202.google.com with SMTP id 3f1490d57ef6-dc6cd10fd94so971046276.3 for ; Wed, 07 Feb 2024 06:26:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1707316002; x=1707920802; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=IhbWSbuWjf05VEZa3YQG76+cdv9gP/2iSpbLXiukNbY=; b=zHz9XbDYViz9sCx+MUcLWhj5wq7hiKKpUd8bmiuv5iCkRTgo1Ey7GMVeeWzvvO0GDx NYbzWtDfOcGZ/CsynpTW5vHnKE68sSc68HHTPrb68XFDzd3a1lf3cWgUdi4g4cAhD89A Rt5CMNiSif5bT17nlPHZHMEvFEUk44VIULVjNV5II91wgM5kUiyhYRZcCQA26wszJHXz ZWPaypVVor58OcByQZzxN4MhjILt61RMewebMzLxgo/9564Zy9smz3I1rJaPZnXkYySd 5N7RKVD8B7jnlbzlOFLd60PHCO53XUvDX8i/wnsF9XXknOjLCiZFF/qLv/eZ1csDL2h9 Rsog== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1707316002; x=1707920802; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=IhbWSbuWjf05VEZa3YQG76+cdv9gP/2iSpbLXiukNbY=; b=g7rKiKCY4ASfeWxXsBPVE2LeLVlY4mPWDMVQ9PmAPUAfyJGz9J7bk9NDioboY1uB+9 fif5dFmtAis0Gfi1kYUlWes6acdsSRT8Czs/180Mo/L4hArcc87V/ZXY8k5FncfDKynA q0TWcgG877SUi8ywGwMCq+KeI9NRdqqGKMqB/5ymUvsJDorCeH72/z13oBYwmgCvJRHU 70QM3sGYyduSqr638wIa6fkTSKNpQaQZSBwAz3GVUWWfA3HslZUMDhRJQeEoOilMDQWD 46v7Lx1NEkwitYzWjoYnb6ItJiQcyeIotcLU6kOc/tZH9U109OhUVG1yri/GGE+bz2T2 m7TQ== X-Gm-Message-State: AOJu0Yw2uRvRmfnMmthdHydT/In0eQqcX5nFD0/vTHRBjIGLflEw9T2I 4ZJNSIjnt1eXi68HA2/c+9B43fn5lRWriVHcnxap6TDWh1Gni+PcRp0WtVZ431Oi12JAm1j1ufO jRkBSxTdTmg== X-Google-Smtp-Source: AGHT+IFA1YkTDDSyFBuvjfdqiCmM8AjRiIg4cuhFnyfMi/bpkhEVW5CNzKW3qxWGavMBCJ2Wmkxfifd06MTitw== X-Received: from edumazet1.c.googlers.com ([fda3:e722:ac3:cc00:2b:7d90:c0a8:395a]) (user=edumazet job=sendgmr) by 2002:a05:6902:1b91:b0:dc2:23f5:1791 with SMTP id ei17-20020a0569021b9100b00dc223f51791mr1219089ybb.6.1707316002457; Wed, 07 Feb 2024 06:26:42 -0800 (PST) Date: Wed, 7 Feb 2024 14:26:21 +0000 In-Reply-To: <20240207142629.3456570-1-edumazet@google.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20240207142629.3456570-1-edumazet@google.com> X-Mailer: git-send-email 2.43.0.594.gd9cf4e227d-goog Message-ID: <20240207142629.3456570-6-edumazet@google.com> Subject: [PATCH net-next 05/13] net-sysfs: convert netdev_show() to RCU From: Eric Dumazet To: "David S . Miller" , Jakub Kicinski , Paolo Abeni Cc: netdev@vger.kernel.org, eric.dumazet@gmail.com, Eric Dumazet X-Patchwork-Delegate: kuba@kernel.org Make clear dev_isalive() can be called with RCU protection. Then convert netdev_show() to RCU, to remove dev_base_lock dependency. Also add RCU to broadcast_show(). Signed-off-by: Eric Dumazet --- net/core/net-sysfs.c | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/net/core/net-sysfs.c b/net/core/net-sysfs.c index f4c2b82674951bbeefd880ca22c54e6a32c9f988..678e4be690821c5cdb933f5e91af2247ebecb830 100644 --- a/net/core/net-sysfs.c +++ b/net/core/net-sysfs.c @@ -34,10 +34,10 @@ static const char fmt_dec[] = "%d\n"; static const char fmt_ulong[] = "%lu\n"; static const char fmt_u64[] = "%llu\n"; -/* Caller holds RTNL or dev_base_lock */ +/* Caller holds RTNL, RCU or dev_base_lock */ static inline int dev_isalive(const struct net_device *dev) { - return dev->reg_state <= NETREG_REGISTERED; + return READ_ONCE(dev->reg_state) <= NETREG_REGISTERED; } /* use same locking rules as GIF* ioctl's */ @@ -48,10 +48,10 @@ static ssize_t netdev_show(const struct device *dev, struct net_device *ndev = to_net_dev(dev); ssize_t ret = -EINVAL; - read_lock(&dev_base_lock); + rcu_read_lock(); if (dev_isalive(ndev)) ret = (*format)(ndev, buf); - read_unlock(&dev_base_lock); + rcu_read_unlock(); return ret; } @@ -60,7 +60,7 @@ static ssize_t netdev_show(const struct device *dev, #define NETDEVICE_SHOW(field, format_string) \ static ssize_t format_##field(const struct net_device *dev, char *buf) \ { \ - return sysfs_emit(buf, format_string, dev->field); \ + return sysfs_emit(buf, format_string, READ_ONCE(dev->field)); \ } \ static ssize_t field##_show(struct device *dev, \ struct device_attribute *attr, char *buf) \ @@ -161,10 +161,13 @@ static ssize_t broadcast_show(struct device *dev, struct device_attribute *attr, char *buf) { struct net_device *ndev = to_net_dev(dev); + int ret = -EINVAL; + rcu_read_lock(); if (dev_isalive(ndev)) - return sysfs_format_mac(buf, ndev->broadcast, ndev->addr_len); - return -EINVAL; + ret = sysfs_format_mac(buf, ndev->broadcast, ndev->addr_len); + rcu_read_unlock(); + return ret; } static DEVICE_ATTR_RO(broadcast); From patchwork Wed Feb 7 14:26:22 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 13548582 X-Patchwork-Delegate: kuba@kernel.org Received: from mail-yb1-f201.google.com (mail-yb1-f201.google.com [209.85.219.201]) (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 26B487CF14 for ; Wed, 7 Feb 2024 14:26:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1707316006; cv=none; b=b8jl1lv85R7NDvH3B1UaN+rMA1mUH+REjbys+58iXYY+S2OSdVhYwKHe/K2OaFRGldhOMGgnmFmOuqcn0+BkWDpMHy5NtBpmiDcN0ZnhfjF0Ag7f4fwYDRfVmWOg0ii0uBzNF7NzrxUzqHlwJDFJyI+CeeEdpiUYkhhRw2VZ4J4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1707316006; c=relaxed/simple; bh=hMaDRYHKIlC6mDinN4ZyUeSrzcmEpWdP98uc0qQFVZw=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=fCqacU2D6f5G4xRA24lzHa/4Z1Pp3/JGPX+7M8tSlDuj/1PzLTH4Yp6mwfMcCyybA3a4hNtZkoMB5bfseTgUrQnLXD1hq0Cws/AYpze/ar8W9OnNM+H6NBk4rwr9R1d662vHXdIQvMU4agFEliT3LMVTaR5mVW7x7knM+slYf/4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--edumazet.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=MLSpeV1F; arc=none smtp.client-ip=209.85.219.201 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--edumazet.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="MLSpeV1F" Received: by mail-yb1-f201.google.com with SMTP id 3f1490d57ef6-dc6df2b2d1aso854632276.1 for ; Wed, 07 Feb 2024 06:26:44 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1707316004; x=1707920804; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=K8FUmQSm0SyTa71msP7ZrPTvJh5Lg0Np6y7f/wDkNfY=; b=MLSpeV1FO4dM3pA6bssTUc+oZL7p7SZ6lcYCoal94rMdd5G3X63igj5L6/Pbhlxk1b MjNi3At6AQxnomK9J6HMA/Q+iaUyQ5DHwKj3/luuv2r5u3U5/2PnATJdbLmDSNlI3aBJ WBewOr0oXYkQ6CBRzk1o9hQpmc6+Iov3wqQnMf9qeXibzccfVGVK98WO3oS6z3D+TpaP ZcIsICAbWJZASsTERmWrZbaw5Cn3EstGbxmVnuCW8TGRaen7tFu1a9lGD/C0X+MVUTy2 1GZbMeL+3DuJRy+WI9Jt7u5qqIn+vtLAbaC22drA6jh+Y1ptsreNL0I2GpycOJAILMSA 0VxA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1707316004; x=1707920804; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=K8FUmQSm0SyTa71msP7ZrPTvJh5Lg0Np6y7f/wDkNfY=; b=oKo0iBxRtM4BPPZI1EHtiMq6EL6dtB1ix7n8/8/I3DlRREYQTiJUFzWb9ksAL+ZrxK 6i9lm6mROL+BlTcYn7C/qKb0a+dlQY5oFmC5wGzqS/LMQbqxXg1g1fzjBDk3gWzv3Wc2 HCAPR6QOITLNKwqDUqTSyxmUOYxbE7wJHt8IF+iT5smalxSi3FUCkTafKv1CpNQExMI0 2LAKGQcJoBrBy8RtahLVLaGotMiAACI3Bq9TVdfYH4pk+rsncsnPTzarNjLK2sLFVVoE oDMxqlQ9lSwS7vCjLS9O7FsdR4Zy/JyAxFxRhaaeqw57gVWOniHfNbhnpYm+/HY+rfHY 1i1w== X-Gm-Message-State: AOJu0YyjURrYzMb/TPY9F60NMCcpkz+RRXVX/jXGKqTuiaL0BtGmbwCw DXOyY/Hd0OEypD00LKRZdOpEBp7N0PAOmA9gPONLtlqPh4w77AfBghN+rdKabkz9bOrp9VKEoUA oLD0jzjdPAA== X-Google-Smtp-Source: AGHT+IGQUAXLhw/DVqeGvCkFTANyAtbAN7nJ8JZoSWJS06YtHlHWSVZI0H1HwCGGeYB0L1DgJRbHIGveImHdbA== X-Received: from edumazet1.c.googlers.com ([fda3:e722:ac3:cc00:2b:7d90:c0a8:395a]) (user=edumazet job=sendgmr) by 2002:a05:6902:220c:b0:dc2:5456:d9ac with SMTP id dm12-20020a056902220c00b00dc25456d9acmr178853ybb.5.1707316004186; Wed, 07 Feb 2024 06:26:44 -0800 (PST) Date: Wed, 7 Feb 2024 14:26:22 +0000 In-Reply-To: <20240207142629.3456570-1-edumazet@google.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20240207142629.3456570-1-edumazet@google.com> X-Mailer: git-send-email 2.43.0.594.gd9cf4e227d-goog Message-ID: <20240207142629.3456570-7-edumazet@google.com> Subject: [PATCH net-next 06/13] net-sysfs: use dev_addr_sem to remove races in address_show() From: Eric Dumazet To: "David S . Miller" , Jakub Kicinski , Paolo Abeni Cc: netdev@vger.kernel.org, eric.dumazet@gmail.com, Eric Dumazet X-Patchwork-Delegate: kuba@kernel.org Using dev_base_lock is not preventing from reading garbage. Use dev_addr_sem instead. Signed-off-by: Eric Dumazet --- include/linux/netdevice.h | 1 + net/core/dev.c | 2 +- net/core/net-sysfs.c | 10 +++++++--- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index bed8de91e91a4bd83fe80f6835643af68f1adc53..b9140499630fa84108a1f22a2987c0c1934e8f8d 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h @@ -4031,6 +4031,7 @@ int dev_set_mac_address(struct net_device *dev, struct sockaddr *sa, struct netlink_ext_ack *extack); int dev_set_mac_address_user(struct net_device *dev, struct sockaddr *sa, struct netlink_ext_ack *extack); +extern struct rw_semaphore dev_addr_sem; int dev_get_mac_address(struct sockaddr *sa, struct net *net, char *dev_name); int dev_get_port_parent_id(struct net_device *dev, struct netdev_phys_item_id *ppid, bool recurse); diff --git a/net/core/dev.c b/net/core/dev.c index 027d0b7976f337df885266aeab2c90fe631decf1..2b96d1ed7f481cbd022368b3f16608cce4c6bc49 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -8922,7 +8922,7 @@ int dev_set_mac_address(struct net_device *dev, struct sockaddr *sa, } EXPORT_SYMBOL(dev_set_mac_address); -static DECLARE_RWSEM(dev_addr_sem); +DECLARE_RWSEM(dev_addr_sem); int dev_set_mac_address_user(struct net_device *dev, struct sockaddr *sa, struct netlink_ext_ack *extack) diff --git a/net/core/net-sysfs.c b/net/core/net-sysfs.c index 678e4be690821c5cdb933f5e91af2247ebecb830..23ef2df549c3036a702f3be1dca1eda14ee5e76f 100644 --- a/net/core/net-sysfs.c +++ b/net/core/net-sysfs.c @@ -142,17 +142,21 @@ static ssize_t name_assign_type_show(struct device *dev, } static DEVICE_ATTR_RO(name_assign_type); -/* use same locking rules as GIFHWADDR ioctl's */ +/* use same locking rules as GIFHWADDR ioctl's (dev_get_mac_address()) */ static ssize_t address_show(struct device *dev, struct device_attribute *attr, char *buf) { struct net_device *ndev = to_net_dev(dev); ssize_t ret = -EINVAL; - read_lock(&dev_base_lock); + down_read(&dev_addr_sem); + + rcu_read_lock(); if (dev_isalive(ndev)) ret = sysfs_format_mac(buf, ndev->dev_addr, ndev->addr_len); - read_unlock(&dev_base_lock); + rcu_read_unlock(); + + up_read(&dev_addr_sem); return ret; } static DEVICE_ATTR_RO(address); From patchwork Wed Feb 7 14:26:23 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 13548583 X-Patchwork-Delegate: kuba@kernel.org Received: from mail-yb1-f201.google.com (mail-yb1-f201.google.com [209.85.219.201]) (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 2F5147E58A for ; Wed, 7 Feb 2024 14:26:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1707316008; cv=none; b=Ofo21Y30VTXau9C2IfkHHOH6gV39aX5UhOiBSp+Q7XGi7w063Zebom97Rrn7jLxuZGYps7qpdlY4Rs+israP5nvlcFlUI1eFvDpnpHq79TBqoPUvTM/M9FJIDwxo4Umk2jZeJYiZJL6CL4y7rwxpHGfQdwyi34bjq+ITvcIEUQU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1707316008; c=relaxed/simple; bh=V8eHJhy6elWUYbSZSMkOEjyunc7rGKcoj4spuUJKhzY=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=T+wkBthn7RytlUaBmZnGhF4+/oy79e4IO204AXlpWN0pMCvi0riREcbwDlPfcKzl1ZGPR60My/eYSdcmHVmzshCj0n4cblCAhV6QbV4g/1wmgtWvf3kpX8jLK2t+iGbEgg0T6FIVuesLBx2bAKGntngIp2ZrN2WK9MZD6hjAKSs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--edumazet.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=H5yU2Mac; arc=none smtp.client-ip=209.85.219.201 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--edumazet.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="H5yU2Mac" Received: by mail-yb1-f201.google.com with SMTP id 3f1490d57ef6-dc6b267bf11so856065276.2 for ; Wed, 07 Feb 2024 06:26:46 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1707316006; x=1707920806; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=d4bfHQ6X2xRYBj0erTXFl9yyMMjnLqivYw8QAS42Pk0=; b=H5yU2MacsRPMLDXvlTir9Q+tE5Jc1428crYV+tVbv+GFszjDuJwGq3QlHNDWDO4zGK /c6qC9JIoGuY/8BxeI3XEGReelmh5XVDT6KzN2URIGN31gLEMC1S7XKIR6mgD0MwbIMP UireSiJAZNRDJGLJ82TTg5kr84dGz+oN4PCjLeUX+kGLk5htkkq4+7Um2i4yHy4ATwFI RGEooA6QFSn7q2/14j7nT/iK98iUC9ulwE9YRr1VWOG7Rf73lj1Mf4ehMNdEqVlyio23 IBxNGDbTRLv+DqhFsYoViY5jxiqDoxok1JByqgO3eUbgFNs6E8upHDC/fsZHMD7bZOg3 MUlQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1707316006; x=1707920806; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=d4bfHQ6X2xRYBj0erTXFl9yyMMjnLqivYw8QAS42Pk0=; b=o9IXBWfo7wF4fjVte+RSOlyvL57sWrenJgzocAVraoeJ0nGJcKnkNWkmHamtVhXyMf KQ12w+6agA6bS2GXwa1SW2SmVc7b+2FhI5/g0RdR8oJVU7QA2r01ZSZLcZWPGt44HLQX fL3+iSBLLpjZ2fMjEG11HLGGLB8hva6O3ZRGwkV+rUnaGiCrsgl0gYgEmi2FM+Mg41RJ MFrBCydb/SERk9jyXvl8fqxrspJIIxnzFBCC4jbeWRJvQqnXFkEb15gWFRcGfYawA8ri Nuc8qI6a0rhvFgQ7q6iNZgiySAgvZaXswWldvxjmwUGfkk7TLRVY5aXAKeIB/vnrasFs /h0A== X-Gm-Message-State: AOJu0YwxPIIIDbQ3K7oiYZFsRYTne1L6X+Hu6GO7xclrphJ7IdqfhCCH o5mnOTpuuhF/Wked41zqeiOzJ59WiRcxCz5zd0EDyOgmGYWW4d8swMd6NV1mRkUq8oBuc/y3u5p DN9mVWrUOOQ== X-Google-Smtp-Source: AGHT+IF/VzRbtQIgJxetCxBcumH78s/c3DOCViNSZb9+QXxjYYCUn/n9vt2+/pDsHLyti95LKioXjgRtw96bRQ== X-Received: from edumazet1.c.googlers.com ([fda3:e722:ac3:cc00:2b:7d90:c0a8:395a]) (user=edumazet job=sendgmr) by 2002:a05:6902:985:b0:dc2:4921:cc0 with SMTP id bv5-20020a056902098500b00dc249210cc0mr158352ybb.5.1707316006097; Wed, 07 Feb 2024 06:26:46 -0800 (PST) Date: Wed, 7 Feb 2024 14:26:23 +0000 In-Reply-To: <20240207142629.3456570-1-edumazet@google.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20240207142629.3456570-1-edumazet@google.com> X-Mailer: git-send-email 2.43.0.594.gd9cf4e227d-goog Message-ID: <20240207142629.3456570-8-edumazet@google.com> Subject: [PATCH net-next 07/13] net-sysfs: convert dev->operstate reads to lockless ones From: Eric Dumazet To: "David S . Miller" , Jakub Kicinski , Paolo Abeni Cc: netdev@vger.kernel.org, eric.dumazet@gmail.com, Eric Dumazet X-Patchwork-Delegate: kuba@kernel.org operstate_show() can omit dev_base_lock acquisition only to read dev->operstate. Annotate accesses to dev->operstate. Writers still acquire dev_base_lock for mutual exclusion. Signed-off-by: Eric Dumazet --- net/bridge/br_netlink.c | 3 ++- net/core/link_watch.c | 4 ++-- net/core/net-sysfs.c | 4 +--- net/core/rtnetlink.c | 4 ++-- net/hsr/hsr_device.c | 10 +++++----- net/ipv6/addrconf.c | 2 +- 6 files changed, 13 insertions(+), 14 deletions(-) diff --git a/net/bridge/br_netlink.c b/net/bridge/br_netlink.c index 5ad4abfcb7ba3960bf69613ae7975180ae48854b..2cf4fc756263992eefe6a3580410766fea0c2c1f 100644 --- a/net/bridge/br_netlink.c +++ b/net/bridge/br_netlink.c @@ -455,7 +455,8 @@ static int br_fill_ifinfo(struct sk_buff *skb, u32 filter_mask, const struct net_device *dev, bool getlink) { - u8 operstate = netif_running(dev) ? dev->operstate : IF_OPER_DOWN; + u8 operstate = netif_running(dev) ? READ_ONCE(dev->operstate) : + IF_OPER_DOWN; struct nlattr *af = NULL; struct net_bridge *br; struct ifinfomsg *hdr; diff --git a/net/core/link_watch.c b/net/core/link_watch.c index 429571c258da7720baf387fef81081a56a655ef5..1b93e054c9a3cfcdd5d1251a9982d88a071abbaa 100644 --- a/net/core/link_watch.c +++ b/net/core/link_watch.c @@ -67,7 +67,7 @@ static void rfc2863_policy(struct net_device *dev) { unsigned char operstate = default_operstate(dev); - if (operstate == dev->operstate) + if (operstate == READ_ONCE(dev->operstate)) return; write_lock(&dev_base_lock); @@ -87,7 +87,7 @@ static void rfc2863_policy(struct net_device *dev) break; } - dev->operstate = operstate; + WRITE_ONCE(dev->operstate, operstate); write_unlock(&dev_base_lock); } diff --git a/net/core/net-sysfs.c b/net/core/net-sysfs.c index 23ef2df549c3036a702f3be1dca1eda14ee5e76f..c5d164b8c6bfb53793f8422063c6281d6339b36e 100644 --- a/net/core/net-sysfs.c +++ b/net/core/net-sysfs.c @@ -325,11 +325,9 @@ static ssize_t operstate_show(struct device *dev, const struct net_device *netdev = to_net_dev(dev); unsigned char operstate; - read_lock(&dev_base_lock); - operstate = netdev->operstate; + operstate = READ_ONCE(netdev->operstate); if (!netif_running(netdev)) operstate = IF_OPER_DOWN; - read_unlock(&dev_base_lock); if (operstate >= ARRAY_SIZE(operstates)) return -EINVAL; /* should not happen */ diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c index 8d95e0863534f80cecceb2dd4a7b2a16f7f4bca3..4e797326c88fe1e23ca66e82103176767fe5c32e 100644 --- a/net/core/rtnetlink.c +++ b/net/core/rtnetlink.c @@ -866,9 +866,9 @@ static void set_operstate(struct net_device *dev, unsigned char transition) break; } - if (dev->operstate != operstate) { + if (READ_ONCE(dev->operstate) != operstate) { write_lock(&dev_base_lock); - dev->operstate = operstate; + WRITE_ONCE(dev->operstate, operstate); write_unlock(&dev_base_lock); netdev_state_change(dev); } diff --git a/net/hsr/hsr_device.c b/net/hsr/hsr_device.c index 9d71b66183daf94e19945d75cfb5c33df6ce346c..be0e43f46556e028e675147e63c6b787aa72e894 100644 --- a/net/hsr/hsr_device.c +++ b/net/hsr/hsr_device.c @@ -31,8 +31,8 @@ static bool is_slave_up(struct net_device *dev) static void __hsr_set_operstate(struct net_device *dev, int transition) { write_lock(&dev_base_lock); - if (dev->operstate != transition) { - dev->operstate = transition; + if (READ_ONCE(dev->operstate) != transition) { + WRITE_ONCE(dev->operstate, transition); write_unlock(&dev_base_lock); netdev_state_change(dev); } else { @@ -78,14 +78,14 @@ static void hsr_check_announce(struct net_device *hsr_dev, hsr = netdev_priv(hsr_dev); - if (hsr_dev->operstate == IF_OPER_UP && old_operstate != IF_OPER_UP) { + if (READ_ONCE(hsr_dev->operstate) == IF_OPER_UP && old_operstate != IF_OPER_UP) { /* Went up */ hsr->announce_count = 0; mod_timer(&hsr->announce_timer, jiffies + msecs_to_jiffies(HSR_ANNOUNCE_INTERVAL)); } - if (hsr_dev->operstate != IF_OPER_UP && old_operstate == IF_OPER_UP) + if (READ_ONCE(hsr_dev->operstate) != IF_OPER_UP && old_operstate == IF_OPER_UP) /* Went down */ del_timer(&hsr->announce_timer); } @@ -100,7 +100,7 @@ void hsr_check_carrier_and_operstate(struct hsr_priv *hsr) /* netif_stacked_transfer_operstate() cannot be used here since * it doesn't set IF_OPER_LOWERLAYERDOWN (?) */ - old_operstate = master->dev->operstate; + old_operstate = READ_ONCE(master->dev->operstate); has_carrier = hsr_check_carrier(master); hsr_set_operstate(master, has_carrier); hsr_check_announce(master->dev, old_operstate); diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c index d63f5d063f073cb53f52e187efdbd09b8f78d622..1122c9ef09f6210fc373d9678a9da1ec1a3e78fa 100644 --- a/net/ipv6/addrconf.c +++ b/net/ipv6/addrconf.c @@ -5998,7 +5998,7 @@ static int inet6_fill_ifinfo(struct sk_buff *skb, struct inet6_dev *idev, (dev->ifindex != dev_get_iflink(dev) && nla_put_u32(skb, IFLA_LINK, dev_get_iflink(dev))) || nla_put_u8(skb, IFLA_OPERSTATE, - netif_running(dev) ? dev->operstate : IF_OPER_DOWN)) + netif_running(dev) ? READ_ONCE(dev->operstate) : IF_OPER_DOWN)) goto nla_put_failure; protoinfo = nla_nest_start_noflag(skb, IFLA_PROTINFO); if (!protoinfo) From patchwork Wed Feb 7 14:26:24 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 13548584 X-Patchwork-Delegate: kuba@kernel.org Received: from mail-yb1-f202.google.com (mail-yb1-f202.google.com [209.85.219.202]) (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 6A7837E567 for ; Wed, 7 Feb 2024 14:26:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1707316009; cv=none; b=QZ8msfTMt5KxOVBHLUr2GjElEQ7Yyzg2EIdgmxLhWEAJ7i/EQhn5PR3xSuC96NM5rmpfHKxSkkkhzNGhoZXym+B58pCSrdzI6qR1+nEh9gJvZ3SGbNBKUYWiOG+CFMC0dee7HnEuIQ+ReDZT9g3PUEPgeF50CuoDpKkgfwQJ9RQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1707316009; c=relaxed/simple; bh=25ClL7WoqH767H4g7uyDndpTdLFT1mSh66swzGoqCYQ=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=SvMex+WuM/IoQmeKvxEv56CrHW0V0LLNwLyeeRo1/0ER4qR+Zcj37d/MSG8nGq6kHW3HtVamz9RhGPChi/EQ1HbpIqpwFVGa4FwvNK16j5K5L/s3Atiw8QMHOuOWLnJymwzkJBdTtfX/SXi8KPRK9RNPaDo7UhNkWQGyIki91d0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--edumazet.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=lsxmVct2; arc=none smtp.client-ip=209.85.219.202 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--edumazet.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="lsxmVct2" Received: by mail-yb1-f202.google.com with SMTP id 3f1490d57ef6-dc6df2b2d1aso854745276.1 for ; Wed, 07 Feb 2024 06:26:48 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1707316007; x=1707920807; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=W0IAsWsB1rkkDQSBmIH07o3Uzv0VcNGVc215KBSmS+E=; b=lsxmVct2mqJVDJbIcTwfNqyme+DNirGycn4bweXFuDMWx9bp2/BO3zEiGs+K5OO1op ZXYe8wigYxY5g09qxx8D2NCvh//jgXvAR17NFb2th+zEypzapNkE1w9e8XCy4CqicEP0 SknIcRHKctRbmGWOxfEUL7wNlj6FniNxlbMf260ynpecNgPUh3AlpBW+ps8diLNpjjN5 nfQTdtJAchESnbTKManpg+TaPKLhrHrMg2r2g7+KE0QUzSeZaCVRDKk1bxmzHbrsgsP/ vw2n3vqMnXYJhf188VQf1UPKPPEtXFP+ulBglGAW/Ubxjmp0q2UxOCfeFYg8dBGHaxpd OTyw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1707316007; x=1707920807; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=W0IAsWsB1rkkDQSBmIH07o3Uzv0VcNGVc215KBSmS+E=; b=qq7vOhiewPGk8Hv8RBbGkpAIvSOgg6P1JGKkS9hW9FJGFY0mUBpAsOhKEPdpOGxOAJ 2qcV03SMVhagS7dyz9+y42CQnBgeWhIoXqstvdNmov4Q39a3ldzideggF6jSxVeFqXqB aCx7euiKXy15uVYzX8EHXz6wybqMW7Sr2Ea6B54Mwh720v5ThgS46L8WK3i6BbLJ0Pkf WlJkkPWb+LHSqvkU0AM04rC7lg/J2Pch11kggIm/FWP5wXphKOA20tbCSt4FR9APW80m bTcLBGdMpDHrszFRamS78z96Dtd6dVueDzk1N9d6vX/0EU3fxBUdMFBZxDf+Oy7A5nbe hDfw== X-Gm-Message-State: AOJu0YyFvk6c3rb40E8vT+zVBugCDQAMAQKvnKCo/8dNk6TMXEAmRIyN /WyPIgo7luKxc+ThjAXuAnghukUmOa7lIfvDSoPSQxvHFKaeoBETCEbs2KGwUNPIovH23m1DiT8 DDcjYAb1+GA== X-Google-Smtp-Source: AGHT+IEfU9i8Dic/6/T5TTaK5E65VIFzt/ENU/4yZzR634OYNlGv6k4n1lH1pggLE+kEaEjeqizG9bPCNusv4w== X-Received: from edumazet1.c.googlers.com ([fda3:e722:ac3:cc00:2b:7d90:c0a8:395a]) (user=edumazet job=sendgmr) by 2002:a05:6902:178f:b0:dc1:f6f0:1708 with SMTP id ca15-20020a056902178f00b00dc1f6f01708mr178870ybb.7.1707316007420; Wed, 07 Feb 2024 06:26:47 -0800 (PST) Date: Wed, 7 Feb 2024 14:26:24 +0000 In-Reply-To: <20240207142629.3456570-1-edumazet@google.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20240207142629.3456570-1-edumazet@google.com> X-Mailer: git-send-email 2.43.0.594.gd9cf4e227d-goog Message-ID: <20240207142629.3456570-9-edumazet@google.com> Subject: [PATCH net-next 08/13] net-sysfs: convert netstat_show() to RCU From: Eric Dumazet To: "David S . Miller" , Jakub Kicinski , Paolo Abeni Cc: netdev@vger.kernel.org, eric.dumazet@gmail.com, Eric Dumazet X-Patchwork-Delegate: kuba@kernel.org dev_get_stats() can be called from RCU, there is no need to acquire dev_base_lock. Change dev_isalive() comment to reflect we no longer use dev_base_lock from net/core/net-sysfs.c Signed-off-by: Eric Dumazet --- net/core/net-sysfs.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/net/core/net-sysfs.c b/net/core/net-sysfs.c index c5d164b8c6bfb53793f8422063c6281d6339b36e..946caefdd9599f631a73487e950305c978f8bc66 100644 --- a/net/core/net-sysfs.c +++ b/net/core/net-sysfs.c @@ -34,7 +34,7 @@ static const char fmt_dec[] = "%d\n"; static const char fmt_ulong[] = "%lu\n"; static const char fmt_u64[] = "%llu\n"; -/* Caller holds RTNL, RCU or dev_base_lock */ +/* Caller holds RTNL or RCU */ static inline int dev_isalive(const struct net_device *dev) { return READ_ONCE(dev->reg_state) <= NETREG_REGISTERED; @@ -685,14 +685,14 @@ static ssize_t netstat_show(const struct device *d, WARN_ON(offset > sizeof(struct rtnl_link_stats64) || offset % sizeof(u64) != 0); - read_lock(&dev_base_lock); + rcu_read_lock(); if (dev_isalive(dev)) { struct rtnl_link_stats64 temp; const struct rtnl_link_stats64 *stats = dev_get_stats(dev, &temp); ret = sysfs_emit(buf, fmt_u64, *(u64 *)(((u8 *)stats) + offset)); } - read_unlock(&dev_base_lock); + rcu_read_unlock(); return ret; } From patchwork Wed Feb 7 14:26:25 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 13548585 X-Patchwork-Delegate: kuba@kernel.org Received: from mail-yw1-f201.google.com (mail-yw1-f201.google.com [209.85.128.201]) (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 52A237E78E for ; Wed, 7 Feb 2024 14:26:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1707316012; cv=none; b=hyROjjkF2fpqpl7cPhNHP0IE/LGj3bkfqVPLvSIy8nbODYGUwrT5abDSpJ/IWJyQwIRq/EWF6huSHzW1lXGLAao5cPXhj3Hy0BPiAdfzlXmgNaBH4h7bTwHO2eu/bkUkdL5j2epg/bSzcfGlSUKVXI7oydO/LcHarPAdkzN9suw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1707316012; c=relaxed/simple; bh=SwDFr3U2rPeF2hWWNUiqbC0QXPxvAE5vSYFtdA3Js50=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=dLeuwfFDU35Zj8utcshQ168aYvzrCmXzOqLzUfxla3VVdc3Zr2mhKsyq3EWQfPnLSNhypcfq/lRHI/syiuHQCP9gYxwr8TkkEhEKeckfMSBeiBNl6J7tTvFuqKfcPulJ+fVOatqjVZPj05pw2a2DgJgFNnw+hOPaEZofej3d4p0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--edumazet.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=p4T4Cilf; arc=none smtp.client-ip=209.85.128.201 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--edumazet.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="p4T4Cilf" Received: by mail-yw1-f201.google.com with SMTP id 00721157ae682-5ffee6fcdc1so10055447b3.2 for ; Wed, 07 Feb 2024 06:26:49 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1707316009; x=1707920809; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=xY6NVRYFT70uw+pOqEAvhmYGu+N2ydDZyZMjn8nLKEI=; b=p4T4CilfANRtgUy2BLbLy1OovlTiFiucRHfZCNFonPu2BfA3W9t1cXN3bSvCFsEW+R N07IsAo6QMNZVgoxMZ8j/NYB+u8McLfuTncD1FcSjFO6k29ENomZeyhMTIrc+UXAf3Rm tPzEgD5//x19UPVjJNYcWT8uVCX7k234fbc1bD2gcNe8ffBkmjFkSHvyRhw0YQdjLx+s JFHM9gLmblNpECEr0r2JwbCSqmy/4VAXCA0h3EbdrYVlExFHXAqcxApJHetGBWZ5QTN3 DOxYlyXrCIDy8BuhBeGuvcddt2RXo712l4VPKtqHXyvKTgZjQ14RDijeE1W1hbthWBHS RORw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1707316009; x=1707920809; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=xY6NVRYFT70uw+pOqEAvhmYGu+N2ydDZyZMjn8nLKEI=; b=Yjthda/V56qxLm58tL0siWdhFqe+xN76hFOJsvh4eK+UBxj06vgXT/PITJBP85QztM pbX+ritlsat3gQA7KisQCpKrWE7+qbfT18a7KG6qgFS/WaiWpHcslIry6WCQaqLgyWXR BHRivJ8gTAgtWZIVZYZ6/dBxb9iUyRcDOFnY3Ptxksqv5GPHU5beJq7y3+5P2UlhkPfH K67Kt8WmqNIbw31vumYvmzlV+PdulqDiQAy9/4qkDCv/AhLjsSq3nathDre1WPRZpJmt 5kFrrO8biLIQEzo9Wn826btkXddzxEYpCMLU5M9ZR3qnjZfIhIRuazAzPbvNX1ilyfUO +/6w== X-Gm-Message-State: AOJu0YwTNP3DcdV7gMPYyE6pcOJr03AHiQhpPnPNj6KyteAvPLujZ+EH nY3CrpmyghAu05uVCPpYyyMPAhbRlDZyG2+ZaSqbRsz6NUqcTSPGrNoQTJbL/+oI/uzyNbJLPq/ mVK/6dOQVoA== X-Google-Smtp-Source: AGHT+IGj1+KXTOtFNltSNiOpXQME2HHlAGPI93Egj8675sP0JAZgc4XBwBAZEY+h4sJ+aIDYx8m0i3NbqUupnA== X-Received: from edumazet1.c.googlers.com ([fda3:e722:ac3:cc00:2b:7d90:c0a8:395a]) (user=edumazet job=sendgmr) by 2002:a05:6902:248d:b0:dc2:3cf3:5471 with SMTP id ds13-20020a056902248d00b00dc23cf35471mr191490ybb.6.1707316009256; Wed, 07 Feb 2024 06:26:49 -0800 (PST) Date: Wed, 7 Feb 2024 14:26:25 +0000 In-Reply-To: <20240207142629.3456570-1-edumazet@google.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20240207142629.3456570-1-edumazet@google.com> X-Mailer: git-send-email 2.43.0.594.gd9cf4e227d-goog Message-ID: <20240207142629.3456570-10-edumazet@google.com> Subject: [PATCH net-next 09/13] net: remove stale mentions of dev_base_lock in comments From: Eric Dumazet To: "David S . Miller" , Jakub Kicinski , Paolo Abeni Cc: netdev@vger.kernel.org, eric.dumazet@gmail.com, Eric Dumazet X-Patchwork-Delegate: kuba@kernel.org Change comments incorrectly mentioning dev_base_lock. Signed-off-by: Eric Dumazet --- Documentation/networking/netdevices.rst | 4 ++-- drivers/net/ethernet/cisco/enic/enic_main.c | 2 +- drivers/net/ethernet/nvidia/forcedeth.c | 4 ++-- drivers/net/ethernet/sfc/efx_common.c | 2 +- drivers/net/ethernet/sfc/falcon/efx.c | 2 +- drivers/net/ethernet/sfc/siena/efx_common.c | 2 +- 6 files changed, 8 insertions(+), 8 deletions(-) diff --git a/Documentation/networking/netdevices.rst b/Documentation/networking/netdevices.rst index 9e4cccb90b8700aea49bb586ca0da79f2fe185b9..c2476917a6c37d9b87e8b5d59f2e00fa0a30e26a 100644 --- a/Documentation/networking/netdevices.rst +++ b/Documentation/networking/netdevices.rst @@ -252,8 +252,8 @@ ndo_eth_ioctl: Context: process ndo_get_stats: - Synchronization: rtnl_lock() semaphore, dev_base_lock rwlock, or RCU. - Context: atomic (can't sleep under rwlock or RCU) + Synchronization: rtnl_lock() semaphore, or RCU. + Context: atomic (can't sleep under RCU) ndo_start_xmit: Synchronization: __netif_tx_lock spinlock. diff --git a/drivers/net/ethernet/cisco/enic/enic_main.c b/drivers/net/ethernet/cisco/enic/enic_main.c index 37bd38d772e80967e50342f8b87dfa331192c5a0..d266a87297a5e3a5281acda9243a024fc2f7d742 100644 --- a/drivers/net/ethernet/cisco/enic/enic_main.c +++ b/drivers/net/ethernet/cisco/enic/enic_main.c @@ -872,7 +872,7 @@ static netdev_tx_t enic_hard_start_xmit(struct sk_buff *skb, return NETDEV_TX_OK; } -/* dev_base_lock rwlock held, nominally process context */ +/* rcu_read_lock potentially held, nominally process context */ static void enic_get_stats(struct net_device *netdev, struct rtnl_link_stats64 *net_stats) { diff --git a/drivers/net/ethernet/nvidia/forcedeth.c b/drivers/net/ethernet/nvidia/forcedeth.c index 7a549b834e970a5ac40330513e3220466d78acef..31f896c4aa266032cbabdd3c0086eae5969d203a 100644 --- a/drivers/net/ethernet/nvidia/forcedeth.c +++ b/drivers/net/ethernet/nvidia/forcedeth.c @@ -1761,7 +1761,7 @@ static void nv_get_stats(int cpu, struct fe_priv *np, /* * nv_get_stats64: dev->ndo_get_stats64 function * Get latest stats value from the nic. - * Called with read_lock(&dev_base_lock) held for read - + * Called with rcu_read_lock() held - * only synchronized against unregister_netdevice. */ static void @@ -3090,7 +3090,7 @@ static void set_bufsize(struct net_device *dev) /* * nv_change_mtu: dev->change_mtu function - * Called with dev_base_lock held for read. + * Called with RTNL held for read. */ static int nv_change_mtu(struct net_device *dev, int new_mtu) { diff --git a/drivers/net/ethernet/sfc/efx_common.c b/drivers/net/ethernet/sfc/efx_common.c index 175bd9cdfdac3ac8183e52f2e76b99839b9c2ed7..551f890db90a609319dca95af9b464bddb252121 100644 --- a/drivers/net/ethernet/sfc/efx_common.c +++ b/drivers/net/ethernet/sfc/efx_common.c @@ -595,7 +595,7 @@ void efx_stop_all(struct efx_nic *efx) efx_stop_datapath(efx); } -/* Context: process, dev_base_lock or RTNL held, non-blocking. */ +/* Context: process, rcu_read_lock or RTNL held, non-blocking. */ void efx_net_stats(struct net_device *net_dev, struct rtnl_link_stats64 *stats) { struct efx_nic *efx = efx_netdev_priv(net_dev); diff --git a/drivers/net/ethernet/sfc/falcon/efx.c b/drivers/net/ethernet/sfc/falcon/efx.c index e001f27085c6614374a0e5e1493b215d6c55e9db..1cb32aedd89c7393c7881efb11963cf334bca3ae 100644 --- a/drivers/net/ethernet/sfc/falcon/efx.c +++ b/drivers/net/ethernet/sfc/falcon/efx.c @@ -2085,7 +2085,7 @@ int ef4_net_stop(struct net_device *net_dev) return 0; } -/* Context: process, dev_base_lock or RTNL held, non-blocking. */ +/* Context: process, rcu_read_lock or RTNL held, non-blocking. */ static void ef4_net_stats(struct net_device *net_dev, struct rtnl_link_stats64 *stats) { diff --git a/drivers/net/ethernet/sfc/siena/efx_common.c b/drivers/net/ethernet/sfc/siena/efx_common.c index e4b294b8e9acb15f68b6597047d493add699196f..88e5bc347a44cea66e36dcc6afe10ef10c1383fa 100644 --- a/drivers/net/ethernet/sfc/siena/efx_common.c +++ b/drivers/net/ethernet/sfc/siena/efx_common.c @@ -605,7 +605,7 @@ static size_t efx_siena_update_stats_atomic(struct efx_nic *efx, u64 *full_stats return efx->type->update_stats(efx, full_stats, core_stats); } -/* Context: process, dev_base_lock or RTNL held, non-blocking. */ +/* Context: process, rcu_read_lock or RTNL held, non-blocking. */ void efx_siena_net_stats(struct net_device *net_dev, struct rtnl_link_stats64 *stats) { From patchwork Wed Feb 7 14:26:26 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 13548586 X-Patchwork-Delegate: kuba@kernel.org Received: from mail-yw1-f201.google.com (mail-yw1-f201.google.com [209.85.128.201]) (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 B0E087E78A for ; Wed, 7 Feb 2024 14:26:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1707316013; cv=none; b=aBpCxTpmCW67S1yeNVuh+k3OXd0lr3SSJdXQuo+KrB0ZZOtNmGNsZpXpizC84f0831RlBLRhUSvRUu3z3jR9/emCUzwFXDKJPXviL0cFdCoP+qq2W4bstZrEa/RdP7E9u4u69dAJO3Rz1X4W1cn0xPRjxdGc1R9Fk+uQG7vvK8U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1707316013; c=relaxed/simple; bh=5f6RmfQvvv/uxeZm62Yhase170M4G5RvO8eoCEczq/w=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=XMCslbbXzfA1e1n7x+cw3U3xzG6ls4S/16K8HApke3RMIjLOHUTdQw795RTcD+SGVNkql+s1hsFHS6zhTcnwbin8LDPCrsfal3xDxekjDp0KIPC/35wSW/x38l1PWAA+ky+zYg4bJU94w6LzHTHBFIMd+0kJDjNxRfrj/CZ6N1E= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--edumazet.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=T72puXuC; arc=none smtp.client-ip=209.85.128.201 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--edumazet.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="T72puXuC" Received: by mail-yw1-f201.google.com with SMTP id 00721157ae682-6049bbbb964so3919617b3.2 for ; Wed, 07 Feb 2024 06:26:51 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1707316010; x=1707920810; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=nnZR/Dndvwfoe4wnDlMsNduldDMdka0pVG0Lr5cBWUM=; b=T72puXuCDJdROlLiw6sHqGeKuAwgPKTWfgS6XF4PbnH/0m59C2LpShIUQmIMuP6YdY QJGiyvP1EgHJKtH4kznRmTrbgzFDLK2a/HPmxrpqk8OTg+B++fO5xxrLZpSLlxTUOVjx 0z4+H5dF0+uuOObnmAuqY0JYow6+i7jSexN4+4EZYZupnsO1+ZXgPNn+PXZox66BRh8r kgRoFJwrL1fT+bXTF2lifHq01qByIaRpQrKR2dW9/H5bBsFZEo9BigJDjFwFMC1sK+jr z5V0JgiZ/w1+GBenWeZ9DN4cZByfJj+KgcIg5WY0JPDTm7nSnsnPNUJ3X5Lpahg339yI FH2w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1707316010; x=1707920810; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=nnZR/Dndvwfoe4wnDlMsNduldDMdka0pVG0Lr5cBWUM=; b=X1Xyva7HzT50nZRXI99xTFkiKbiak73ZUEV5D23K6+P68iPxprcBnJlatUEQt+PjMD 0jQtlz/Ih3feEorQ1gJDBHNTHltsddzJkczyUrSEzgMzYl2U+mXD0aP9laq3pppGQ6fC DbPrlXGP5/+tqKo2+oIu/22XZszL89BB2akPeITAs1D7lIJc3PX/1KhcME0H07WW3psK OBLyctJuCFQLbFjirlnADvtwYYvkZWY4S1va2FYA87NzycLKtQ6L68eZa2Y0ELe8XTC9 cSIO/aqhb0heo9JQzAT7aNus23JR7m4/XDBVcPB9cV/P3jIcDqSxKcGZqxo1G3KmT4GU r9+A== X-Gm-Message-State: AOJu0Yy7abQ8mk9UdouUtGuEfxJ4sus+EFnrcC5V56DIHOgvp0p5kCln 9VcRcKZfmUe59BVNA9mCPkIA6bC7Oueaz1cQfmdcKF9vvmW6YqiHqkNb+yFJbAss73eXyGTD8N4 GKbflxerWKg== X-Google-Smtp-Source: AGHT+IEtu3gMEqswQrFR15TGnVgutTi3krbvW6a6CGtkewnFyqPw5TGjqp9dGj1cRKWr9kY1U5dz5R4m+eY/jw== X-Received: from edumazet1.c.googlers.com ([fda3:e722:ac3:cc00:2b:7d90:c0a8:395a]) (user=edumazet job=sendgmr) by 2002:a05:6902:248a:b0:dc6:d1d7:d03e with SMTP id ds10-20020a056902248a00b00dc6d1d7d03emr187327ybb.8.1707316010788; Wed, 07 Feb 2024 06:26:50 -0800 (PST) Date: Wed, 7 Feb 2024 14:26:26 +0000 In-Reply-To: <20240207142629.3456570-1-edumazet@google.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20240207142629.3456570-1-edumazet@google.com> X-Mailer: git-send-email 2.43.0.594.gd9cf4e227d-goog Message-ID: <20240207142629.3456570-11-edumazet@google.com> Subject: [PATCH net-next 10/13] net: add netdev_set_operstate() helper From: Eric Dumazet To: "David S . Miller" , Jakub Kicinski , Paolo Abeni Cc: netdev@vger.kernel.org, eric.dumazet@gmail.com, Eric Dumazet X-Patchwork-Delegate: kuba@kernel.org dev_base_lock is going away, add netdev_set_operstate() helper so that hsr does not have to know core internals. Remove dev_base_lock acquisition from rfc2863_policy() Signed-off-by: Eric Dumazet --- include/linux/rtnetlink.h | 2 ++ net/core/link_watch.c | 4 ---- net/core/rtnetlink.c | 22 +++++++++++++++------- net/hsr/hsr_device.c | 22 ++++++---------------- 4 files changed, 23 insertions(+), 27 deletions(-) diff --git a/include/linux/rtnetlink.h b/include/linux/rtnetlink.h index 21780608cf47ca0687dbaaf0d07b561e8631412c..cdfc897f1e3c683940a0958bc8a790c07ae819b0 100644 --- a/include/linux/rtnetlink.h +++ b/include/linux/rtnetlink.h @@ -172,4 +172,6 @@ rtnl_notify_needed(const struct net *net, u16 nlflags, u32 group) return (nlflags & NLM_F_ECHO) || rtnl_has_listeners(net, group); } +void netdev_set_operstate(struct net_device *dev, int newstate); + #endif /* __LINUX_RTNETLINK_H */ diff --git a/net/core/link_watch.c b/net/core/link_watch.c index 1b93e054c9a3cfcdd5d1251a9982d88a071abbaa..83fdeb60dbd21169ab7a52def3674615b2ddedbd 100644 --- a/net/core/link_watch.c +++ b/net/core/link_watch.c @@ -70,8 +70,6 @@ static void rfc2863_policy(struct net_device *dev) if (operstate == READ_ONCE(dev->operstate)) return; - write_lock(&dev_base_lock); - switch(dev->link_mode) { case IF_LINK_MODE_TESTING: if (operstate == IF_OPER_UP) @@ -88,8 +86,6 @@ static void rfc2863_policy(struct net_device *dev) } WRITE_ONCE(dev->operstate, operstate); - - write_unlock(&dev_base_lock); } diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c index 4e797326c88fe1e23ca66e82103176767fe5c32e..46710e5f9bd19298403cdb8c179f33f155a4c9ad 100644 --- a/net/core/rtnetlink.c +++ b/net/core/rtnetlink.c @@ -842,9 +842,22 @@ int rtnl_put_cacheinfo(struct sk_buff *skb, struct dst_entry *dst, u32 id, } EXPORT_SYMBOL_GPL(rtnl_put_cacheinfo); +void netdev_set_operstate(struct net_device *dev, int newstate) +{ + unsigned char old = READ_ONCE(dev->operstate); + + do { + if (old == newstate) + return; + } while (!try_cmpxchg(&dev->operstate, &old, newstate)); + + netdev_state_change(dev); +} +EXPORT_SYMBOL(netdev_set_operstate); + static void set_operstate(struct net_device *dev, unsigned char transition) { - unsigned char operstate = dev->operstate; + unsigned char operstate = READ_ONCE(dev->operstate); switch (transition) { case IF_OPER_UP: @@ -866,12 +879,7 @@ static void set_operstate(struct net_device *dev, unsigned char transition) break; } - if (READ_ONCE(dev->operstate) != operstate) { - write_lock(&dev_base_lock); - WRITE_ONCE(dev->operstate, operstate); - write_unlock(&dev_base_lock); - netdev_state_change(dev); - } + netdev_set_operstate(dev, operstate); } static unsigned int rtnl_dev_get_flags(const struct net_device *dev) diff --git a/net/hsr/hsr_device.c b/net/hsr/hsr_device.c index be0e43f46556e028e675147e63c6b787aa72e894..5ef6d437db727e60bfd8cf68f010f0151d0db98b 100644 --- a/net/hsr/hsr_device.c +++ b/net/hsr/hsr_device.c @@ -28,29 +28,19 @@ static bool is_slave_up(struct net_device *dev) return dev && is_admin_up(dev) && netif_oper_up(dev); } -static void __hsr_set_operstate(struct net_device *dev, int transition) -{ - write_lock(&dev_base_lock); - if (READ_ONCE(dev->operstate) != transition) { - WRITE_ONCE(dev->operstate, transition); - write_unlock(&dev_base_lock); - netdev_state_change(dev); - } else { - write_unlock(&dev_base_lock); - } -} - static void hsr_set_operstate(struct hsr_port *master, bool has_carrier) { - if (!is_admin_up(master->dev)) { - __hsr_set_operstate(master->dev, IF_OPER_DOWN); + struct net_device *dev = master->dev; + + if (!is_admin_up(dev)) { + netdev_set_operstate(dev, IF_OPER_DOWN); return; } if (has_carrier) - __hsr_set_operstate(master->dev, IF_OPER_UP); + netdev_set_operstate(dev, IF_OPER_UP); else - __hsr_set_operstate(master->dev, IF_OPER_LOWERLAYERDOWN); + netdev_set_operstate(dev, IF_OPER_LOWERLAYERDOWN); } static bool hsr_check_carrier(struct hsr_port *master) From patchwork Wed Feb 7 14:26:27 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 13548587 X-Patchwork-Delegate: kuba@kernel.org Received: from mail-yw1-f202.google.com (mail-yw1-f202.google.com [209.85.128.202]) (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 681E77D3F2 for ; Wed, 7 Feb 2024 14:26:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1707316014; cv=none; b=qGJc41FkfIUVwwTxL2qdVd1QkWQ27Sym+fNEUGFOS39RZEZyQwHSkbaYHlKsBgJ8kH9QImWv77tej1fU0eySc1kaGnqcVdQzGt77FA7fLPZBmgZX32pohuESQ5qyS7JOoGyvtpV86994GAlQAX37HtiELebU3/m47EVk9kGTM/Y= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1707316014; c=relaxed/simple; bh=yBxPxfLaN1Bw6yby/xnceqJOhIQhsAR6SxTXghuwXAM=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=mKSMj2kZtBkacCAR6HIh3XCky4pW5niiqPr/XulgLK3q5+1kNg+SUlRbAVOFljEOgvrAMoFur58kglad/9yHDa6augpniktLMYiKbKOCOHpl0tbDXEY7GGGnseqk6aBDPKxxlqG43rJRl9GIB6bKbwKgkzOQeACJjlXUDZv9wWk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--edumazet.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=Mr6+wra4; arc=none smtp.client-ip=209.85.128.202 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--edumazet.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="Mr6+wra4" Received: by mail-yw1-f202.google.com with SMTP id 00721157ae682-60481a6b1b5so13055577b3.3 for ; Wed, 07 Feb 2024 06:26:53 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1707316012; x=1707920812; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=9460BMzqDTk2cl5fPVFgGoJjhirarLcj4L4oplI9P7A=; b=Mr6+wra4RKM7SvYBlANdgPLuJQqk/2cXNt1i0mxnT8+/AJqjvAZfK1j+gmLB+A4N0W cxscN5XfGNyFWd8AXDqreUZqNYfLG8Z/nSjnJZgxgPMvxRA/akaquWZkf8vroMf06Mf3 ge3rrBmfpXH+7u+iqknrJzFA8gmXbO81FFleYKx3/NqKkVxFwBuRF/ugCqb2ZFML4lBX a8n+r2SW2qtmrQh42MiKuCjjGmqo0zgkbCVeejPrrbzWeLGCwgkDqNaGinO1URRuwydQ g0d5WDeY3dDIQZFzsFVgFuTHzGwGlw3U8lzzlMV3vnVL4nprjIMnHkgdupmv342mL8Ze oMuA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1707316012; x=1707920812; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=9460BMzqDTk2cl5fPVFgGoJjhirarLcj4L4oplI9P7A=; b=nnstWeXe8HoFeWcUMLotY71N2riN7liNNX3TNlcojhfjNdA7wXDdcsYNvOhKtZMYO3 x7b4SPVKKQEvKquT1pi6WDQiP4sq1jO/EG34k37ZfzcvZkBotP3K2v427Y9OfKrCvjmS 1m6cwvYDxOdv8xUzhyUnPAZFoPcu8ZpPfu+VzZ/O5mc6SXXkQhwSj8htO+YMVqEO8kWO X8AMFRg3b59tc/xw2xNiL2Wlqn71ahQyI4PnQeqtuTX05wrLg8lmekMePtQ3G6VnGz7F W6UCCInxjmzXjOas52x+uHttl0x2yZ4u1wAYwuWlb4DZK2s44gjDfPOLbAJPiGD0KeSc J70w== X-Gm-Message-State: AOJu0YzibxVDwNuky4M+w02i4nD5/PBG6krNpba6mahrigaiIsyvLqmb YqAHt/vozM+cgH+4O/nW0unYQaFir0+mKYgQXQU2DqhISUy4hqIJT+v3KCtCs5pA6dZy06i4xd4 bgkfM9KeJWA== X-Google-Smtp-Source: AGHT+IGBxBduqDBS+TH0sjUgD+/qQFas0qwhhkHzAbQ0xS243BHjstQ8ZKHwNJFv+3bXiw7zleAwqHzZmKi17w== X-Received: from edumazet1.c.googlers.com ([fda3:e722:ac3:cc00:2b:7d90:c0a8:395a]) (user=edumazet job=sendgmr) by 2002:a81:9b92:0:b0:604:f04:d228 with SMTP id s140-20020a819b92000000b006040f04d228mr1077191ywg.5.1707316012337; Wed, 07 Feb 2024 06:26:52 -0800 (PST) Date: Wed, 7 Feb 2024 14:26:27 +0000 In-Reply-To: <20240207142629.3456570-1-edumazet@google.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20240207142629.3456570-1-edumazet@google.com> X-Mailer: git-send-email 2.43.0.594.gd9cf4e227d-goog Message-ID: <20240207142629.3456570-12-edumazet@google.com> Subject: [PATCH net-next 11/13] net: remove dev_base_lock from do_setlink() From: Eric Dumazet To: "David S . Miller" , Jakub Kicinski , Paolo Abeni Cc: netdev@vger.kernel.org, eric.dumazet@gmail.com, Eric Dumazet X-Patchwork-Delegate: kuba@kernel.org We hold RTNL here, and dev->link_mode readers already are using READ_ONCE(). Signed-off-by: Eric Dumazet --- net/core/rtnetlink.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c index 46710e5f9bd19298403cdb8c179f33f155a4c9ad..66f1fd4e61e3042da3403e512d051267dc5fd03c 100644 --- a/net/core/rtnetlink.c +++ b/net/core/rtnetlink.c @@ -2979,11 +2979,9 @@ static int do_setlink(const struct sk_buff *skb, if (tb[IFLA_LINKMODE]) { unsigned char value = nla_get_u8(tb[IFLA_LINKMODE]); - write_lock(&dev_base_lock); if (dev->link_mode ^ value) status |= DO_SETLINK_NOTIFY; WRITE_ONCE(dev->link_mode, value); - write_unlock(&dev_base_lock); } if (tb[IFLA_VFINFO_LIST]) { From patchwork Wed Feb 7 14:26:28 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 13548588 X-Patchwork-Delegate: kuba@kernel.org Received: from mail-yw1-f202.google.com (mail-yw1-f202.google.com [209.85.128.202]) (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 04EB07F7C9 for ; Wed, 7 Feb 2024 14:26:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1707316016; cv=none; b=KcIcMUvBqZSWrIQXLZWvKQTSqhj+ao+L9EDcvUyg8vaQqC8lyJg5+OAmy9JSA36g2Kq+s559aNixJk1yxes+/8dNASe7GBOW4mDvWxM9nw8delpnRewIgy49DrHtJymBeP/LgJwSF0AR07g8euW7XKKjnSEbBHs6IpTrmQLnlpM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1707316016; c=relaxed/simple; bh=PaC/2Exh/2AVO8EbYMdpN5FHYC3083rcwQDOCdDH4YE=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=EJYCLxFtV40o1qfEBB4N1ZZwFwGwzt5vbAsTDqV192pSAYxyu2i3UGAUYPU7DeKmg5qJM+M8r1IY+RL+8ZaiUxjc9SVO4X+k8OPXguJFpuYrB7Mkcc/zAmgJ3n6O4hhcqvSS9wd1Q9/MI3KvBCNeiZpLsxyxCEEl5ZAQgL5h9Xw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--edumazet.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=OSVraRkq; arc=none smtp.client-ip=209.85.128.202 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--edumazet.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="OSVraRkq" Received: by mail-yw1-f202.google.com with SMTP id 00721157ae682-603cbb4f06dso13188967b3.3 for ; Wed, 07 Feb 2024 06:26:54 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1707316014; x=1707920814; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=Ha5gRdfszRSqnfJs9PTltXZuav6SdjvG66pzNlueUvY=; b=OSVraRkqc5JFIsdnCsZy4GR99uHzNjEvRacxFpRNe/Tlx0VM0qmwrCjZzg2GrVMetV L85YtZICxEFpRARG7kHPtHTd0yoAbmalEPRYH5cCqAX+bTA24h4PuZ/w7Y0NhVkKhrgK DNFuL9pWDFBfQp1TUpkyhxq6HblTPhaMSILy0CnS8/GIGJ/b2wriiwZX5Cr2bHdY/Peg 53DIDcPMhj/1U6IXCUuDSQrV1SQNrulq9GjJWZUEp21UZi2vh+MjLVNKLoG9mtQcyUFL dwNFTVi0JN05WwqtHNDhWXn+jAz++emKmdlXBZ28Mu2Fr3+k75IruBdsH5zvYB28tUBI mf6A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1707316014; x=1707920814; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=Ha5gRdfszRSqnfJs9PTltXZuav6SdjvG66pzNlueUvY=; b=sVtziaMIHq1OI+Uf2byKMGzeVVori6mDMNSpZSJd58VHrVuEcjJI/rILglEsZNUC6/ TDzz0s6NzHJSZaQT9oHatHUD2C6q80yyIITF8dTfmmt7Q0VLrNUYhNpgsjhzaymjTuwU Dc2odF+/LBKQm3iGuZNVv6sYrJ1zTK0gV/i0R1ppjj48PzLbNK6Cz6EHwUPphyjkVChR Pe0z9Om6ApE+XGkO9tpRJuO5NhUNeWaAa2S80a1zZmHYUH3VlunsTh6EueoGQpFHxHoZ /vaNu16pABBREjBpa1rpRQgcFB5qT9c38qcDvPIPlBqxV3bVBrnoGh64fYRHuM6cI7Dp iW1A== X-Gm-Message-State: AOJu0Yyohn0Dtt/7NbY29jhjQiVQ1J7L4PK/kidauZ9N6GhrEFDzzgUf Uvm8jB04AQ4ikE2F+htjKvlYEiFdsZRd2JCSIAwyxSKmjnpy2rCp8js1fZSffpWWGQEYmZDR2EY OP0aGuXWrHg== X-Google-Smtp-Source: AGHT+IGtWfkSwgMV+j6qHo8g9gdYPYAFit+ou97JQek8g1o9HoLAtEdmyzu+DJe6AXj1HOrwcJSBlcSinJE3Tw== X-Received: from edumazet1.c.googlers.com ([fda3:e722:ac3:cc00:2b:7d90:c0a8:395a]) (user=edumazet job=sendgmr) by 2002:a05:6902:13ce:b0:dc6:d8d9:7d7b with SMTP id y14-20020a05690213ce00b00dc6d8d97d7bmr1216283ybu.5.1707316014014; Wed, 07 Feb 2024 06:26:54 -0800 (PST) Date: Wed, 7 Feb 2024 14:26:28 +0000 In-Reply-To: <20240207142629.3456570-1-edumazet@google.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20240207142629.3456570-1-edumazet@google.com> X-Mailer: git-send-email 2.43.0.594.gd9cf4e227d-goog Message-ID: <20240207142629.3456570-13-edumazet@google.com> Subject: [PATCH net-next 12/13] net: remove dev_base_lock from register_netdevice() and friends. From: Eric Dumazet To: "David S . Miller" , Jakub Kicinski , Paolo Abeni Cc: netdev@vger.kernel.org, eric.dumazet@gmail.com, Eric Dumazet X-Patchwork-Delegate: kuba@kernel.org RTNL already protects writes to dev->reg_state, we no longer need to hold dev_base_lock to protect the readers. unlist_netdevice() second argument can be removed. Signed-off-by: Eric Dumazet --- net/core/dev.c | 20 +++++++------------- 1 file changed, 7 insertions(+), 13 deletions(-) diff --git a/net/core/dev.c b/net/core/dev.c index 2b96d1ed7f481cbd022368b3f16608cce4c6bc49..9b6b530d94d01bcb6e8f70c6942fb39eccb52904 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -412,7 +412,7 @@ static void list_netdevice(struct net_device *dev) /* Device list removal * caller must respect a RCU grace period before freeing/reusing dev */ -static void unlist_netdevice(struct net_device *dev, bool lock) +static void unlist_netdevice(struct net_device *dev) { struct netdev_name_node *name_node; struct net *net = dev_net(dev); @@ -425,13 +425,11 @@ static void unlist_netdevice(struct net_device *dev, bool lock) netdev_name_node_del(name_node); /* Unlink dev from the device chain */ - if (lock) - write_lock(&dev_base_lock); + write_lock(&dev_base_lock); list_del_rcu(&dev->dev_list); netdev_name_node_del(dev->name_node); hlist_del_rcu(&dev->index_hlist); - if (lock) - write_unlock(&dev_base_lock); + write_unlock(&dev_base_lock); dev_base_seq_inc(dev_net(dev)); } @@ -10267,9 +10265,9 @@ int register_netdevice(struct net_device *dev) goto err_ifindex_release; ret = netdev_register_kobject(dev); - write_lock(&dev_base_lock); + WRITE_ONCE(dev->reg_state, ret ? NETREG_UNREGISTERED : NETREG_REGISTERED); - write_unlock(&dev_base_lock); + if (ret) goto err_uninit_notify; @@ -10560,9 +10558,7 @@ void netdev_run_todo(void) continue; } - write_lock(&dev_base_lock); WRITE_ONCE(dev->reg_state, NETREG_UNREGISTERED); - write_unlock(&dev_base_lock); linkwatch_sync_dev(dev); } @@ -11069,10 +11065,8 @@ void unregister_netdevice_many_notify(struct list_head *head, list_for_each_entry(dev, head, unreg_list) { /* And unlink it from device chain. */ - write_lock(&dev_base_lock); - unlist_netdevice(dev, false); + unlist_netdevice(dev); WRITE_ONCE(dev->reg_state, NETREG_UNREGISTERING); - write_unlock(&dev_base_lock); } flush_all_backlogs(); @@ -11254,7 +11248,7 @@ int __dev_change_net_namespace(struct net_device *dev, struct net *net, dev_close(dev); /* And unlink it from device chain */ - unlist_netdevice(dev, true); + unlist_netdevice(dev); synchronize_net(); From patchwork Wed Feb 7 14:26:29 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 13548589 X-Patchwork-Delegate: kuba@kernel.org Received: from mail-yw1-f201.google.com (mail-yw1-f201.google.com [209.85.128.201]) (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 C9D227CF24 for ; Wed, 7 Feb 2024 14:26:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1707316018; cv=none; b=F1XjZRFGqu3X7N11w0dLNXLbU6D+cs5M6SgTmI7J2gmgIBglMKdxjRTXFCA4DlPbyTzNlZHG+d7X8m0lsN8q/pFGD4f/e1flhTHGIlHdj7ERumjZOL6rsHRNZ1g++2420aZ3/2ObYanLjUiNNh6bnRKe7W6n/7vYlrOryEBABQc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1707316018; c=relaxed/simple; bh=/Uj0KGJ6nMHwCQ3DLA7HpnKs6FEVHAM5Ebw5a04dUyI=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=qkAicqiM3qjw8p61ZOqKTkQUB/F9wwAhD53cu7os3iPoQ6KGu+bW4rBA2cya17h6+b771OgZPgRSBR0Ql6TajGSKiXD42zVePVyneg6dqUqYXIgQKDBH6yJ+4RCeYibAQFiaAoll9QhR8Ky7nTGl+gFfmkzidyo+A5kjH2RrN9s= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--edumazet.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=r5XsBkV7; arc=none smtp.client-ip=209.85.128.201 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--edumazet.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="r5XsBkV7" Received: by mail-yw1-f201.google.com with SMTP id 00721157ae682-5ffee6fcdc1so10057387b3.2 for ; Wed, 07 Feb 2024 06:26:56 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1707316016; x=1707920816; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=OeftRcez9trs9DLzR1P/DCUo3NZr+owV7onJgX1ygxY=; b=r5XsBkV7Dd5iVfNhlHRJ5YXcHtQUT7rXn9I4RhAMW/aeNu5pv0SHoQPgilYs0PYClk MQdTVccG+o2DvjTndWc/gfIX2G2JAaJpq2ltGpOZFFjwp8XfKlmWzxJu7Tj/1m/8bwLV lEZf73+rQ2VX0N/3sD/CkB7R8tjmED3w5ujbZ5OT3PHzbrZ4H3wMG+hMN+MeOIBNI9qG iB/pR6UGsQdAwujrhwUn3J/wTz1l/9E83m0Y68Df7jdtju1fQ/hCzhd11MK9dtELwTaW ZcsdI+zAweaXbV8kCff0hneo8rWc0jWC3kNwaZ3dKFyinyVsmycvInD/ASw5DcX72A9D HCnA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1707316016; x=1707920816; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=OeftRcez9trs9DLzR1P/DCUo3NZr+owV7onJgX1ygxY=; b=lslSPZDjnfjAb/LgXeALvm0NLenPhv7pFRA59ibccevtODlv+ZbnQgryfX3/gJVn0S JG9D7pWNbo6O8lJStYpTA/42OiNdt1ieGgi+P3NzwJZ03ZhP9VwDdeP+jX/ovynHAOBh PwbtnN6lFBBgg6r9+jW3774oEmReooY5lVflT+/Oamt6owuew9T5NW8kif2iTu25P1xq eBr3xP3Mf8hYzk4KrVMzyueYRvltdbs4O/hJXqZsyVWclGRPRIfLimyYh2zu8PRA3wus RfA9XUZH0tHgukGng/9Tyg9AgeYQVdOfJMcpgW6tJV9ujPNIH3jejwBbZ0KQiuJVOIKM /Kmg== X-Gm-Message-State: AOJu0YxyKwadPCUkpa/Ph9H0rEfcnl6AjZhliKBxlgNTHTtiNoahWkrq DU2g7hVGlk6sD3z9TQoy1lZpMrxDTFETjN3ZgLmm5NH1qz+tH2BuehQbMJK2PplDbkenhq+jJ9b JRX2FB4SCzQ== X-Google-Smtp-Source: AGHT+IFwtSkUXoIRAw6V0rWh7km+N/M7s8YnozAerzMzij8C1YGRuR9MOdbxUZe6cgmFxRtD0cjrQd0NxeGNGg== X-Received: from edumazet1.c.googlers.com ([fda3:e722:ac3:cc00:2b:7d90:c0a8:395a]) (user=edumazet job=sendgmr) by 2002:a05:6902:1b13:b0:dc2:5130:198f with SMTP id eh19-20020a0569021b1300b00dc25130198fmr191874ybb.5.1707316015834; Wed, 07 Feb 2024 06:26:55 -0800 (PST) Date: Wed, 7 Feb 2024 14:26:29 +0000 In-Reply-To: <20240207142629.3456570-1-edumazet@google.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20240207142629.3456570-1-edumazet@google.com> X-Mailer: git-send-email 2.43.0.594.gd9cf4e227d-goog Message-ID: <20240207142629.3456570-14-edumazet@google.com> Subject: [PATCH net-next 13/13] net: remove dev_base_lock From: Eric Dumazet To: "David S . Miller" , Jakub Kicinski , Paolo Abeni Cc: netdev@vger.kernel.org, eric.dumazet@gmail.com, Eric Dumazet X-Patchwork-Delegate: kuba@kernel.org dev_base_lock is not needed anymore, all remaining users also hold RTNL. Signed-off-by: Eric Dumazet --- include/linux/netdevice.h | 2 -- net/core/dev.c | 39 ++++----------------------------------- 2 files changed, 4 insertions(+), 37 deletions(-) diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index b9140499630fa84108a1f22a2987c0c1934e8f8d..5aead4555f9aa342d832e238e895a1de0e791fb9 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h @@ -3077,8 +3077,6 @@ int call_netdevice_notifiers(unsigned long val, struct net_device *dev); int call_netdevice_notifiers_info(unsigned long val, struct netdev_notifier_info *info); -extern rwlock_t dev_base_lock; /* Device list lock */ - #define for_each_netdev(net, d) \ list_for_each_entry(d, &(net)->dev_base_head, dev_list) #define for_each_netdev_reverse(net, d) \ diff --git a/net/core/dev.c b/net/core/dev.c index 9b6b530d94d01bcb6e8f70c6942fb39eccb52904..522b083b39b36840771644a506c5da3f5e011f30 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -166,28 +166,6 @@ static int call_netdevice_notifiers_extack(unsigned long val, struct net_device *dev, struct netlink_ext_ack *extack); -/* - * The @dev_base_head list is protected by @dev_base_lock and the rtnl - * semaphore. - * - * Pure readers hold dev_base_lock for reading, or rcu_read_lock() - * - * Writers must hold the rtnl semaphore while they loop through the - * dev_base_head list, and hold dev_base_lock for writing when they do the - * actual updates. This allows pure readers to access the list even - * while a writer is preparing to update it. - * - * To put it another way, dev_base_lock is held for writing only to - * protect against pure readers; the rtnl semaphore provides the - * protection against other writers. - * - * See, for example usages, register_netdevice() and - * unregister_netdevice(), which must be called with the rtnl - * semaphore held. - */ -DEFINE_RWLOCK(dev_base_lock); -EXPORT_SYMBOL(dev_base_lock); - static DEFINE_MUTEX(ifalias_mutex); /* protects napi_hash addition/deletion and napi_gen_id */ @@ -393,12 +371,10 @@ static void list_netdevice(struct net_device *dev) ASSERT_RTNL(); - write_lock(&dev_base_lock); list_add_tail_rcu(&dev->dev_list, &net->dev_base_head); netdev_name_node_add(net, dev->name_node); hlist_add_head_rcu(&dev->index_hlist, dev_index_hash(net, dev->ifindex)); - write_unlock(&dev_base_lock); netdev_for_each_altname(dev, name_node) netdev_name_node_add(net, name_node); @@ -425,11 +401,9 @@ static void unlist_netdevice(struct net_device *dev) netdev_name_node_del(name_node); /* Unlink dev from the device chain */ - write_lock(&dev_base_lock); list_del_rcu(&dev->dev_list); netdev_name_node_del(dev->name_node); hlist_del_rcu(&dev->index_hlist); - write_unlock(&dev_base_lock); dev_base_seq_inc(dev_net(dev)); } @@ -744,9 +718,9 @@ EXPORT_SYMBOL_GPL(dev_fill_forward_path); * @net: the applicable net namespace * @name: name to find * - * Find an interface by name. Must be called under RTNL semaphore - * or @dev_base_lock. If the name is found a pointer to the device - * is returned. If the name is not found then %NULL is returned. The + * Find an interface by name. Must be called under RTNL semaphore. + * If the name is found a pointer to the device is returned. + * If the name is not found then %NULL is returned. The * reference counters are not incremented so the caller must be * careful with locks. */ @@ -827,8 +801,7 @@ EXPORT_SYMBOL(netdev_get_by_name); * Search for an interface by index. Returns %NULL if the device * is not found or a pointer to the device. The device has not * had its reference counter increased so the caller must be careful - * about locking. The caller must hold either the RTNL semaphore - * or @dev_base_lock. + * about locking. The caller must hold the RTNL semaphore. */ struct net_device *__dev_get_by_index(struct net *net, int ifindex) @@ -1233,15 +1206,11 @@ int dev_change_name(struct net_device *dev, const char *newname) netdev_adjacent_rename_links(dev, oldname); - write_lock(&dev_base_lock); netdev_name_node_del(dev->name_node); - write_unlock(&dev_base_lock); synchronize_rcu(); - write_lock(&dev_base_lock); netdev_name_node_add(net, dev->name_node); - write_unlock(&dev_base_lock); ret = call_netdevice_notifiers(NETDEV_CHANGENAME, dev); ret = notifier_to_errno(ret);