Received: by 2002:a25:868d:0:0:0:0:0 with SMTP id z13csp36554ybk; Tue, 19 May 2020 14:51:40 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxNWmAAYh4tZYxl4tdax+7n4X4+ywyoYwCTNuY8dnL+TGo6vN2AxenDeOkyqmXdIOIVgWUi X-Received: by 2002:a50:bf04:: with SMTP id f4mr721849edk.91.1589925100689; Tue, 19 May 2020 14:51:40 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1589925100; cv=none; d=google.com; s=arc-20160816; b=U88cqhj6k+8oAU/SZiSKp3UuvQJJE0xjbHxJ6jRQv0/QEhNhNozCrIfmQqKUqUv/jh 22YyVV4GS+L5Sog7Bpnw0BvijaWrjfrjRoXDzz3R988G5nlke9KqaA/gZ8H3KX2hUTAt CL6ykma2jggCyoMGbJpqua6pakWCgQ8Tizvh3HSo45bNSt2u4MZcXUkMg7NCGBNYvhFN 5rNGZvQ9TZCpKXT7z9pEVQBqy00mW5jKZykR8I2k22FfQDX5udoZJ4EKL2HQS/VAgoGW 6usdB4Nz3FptGEMNCxLpugCtfmG5/9FdkzNJTlm4QpwA8T4u68rT8rkpEgMgO2DQHSy4 qh6A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=JDg3q5DIfVRucSHGB8CYwfV9F1U5BftniAbPwNMlUNw=; b=Uo6BlrPMiJE+o/ftTIgdT9+C3qQw0XuLk2KiXzdCsuwxVJR4l4e6de/JK1RNim9vr6 Iq1Wa2Eqz5uKXvm9SGzy8yL3JPrcoQiW6zMenn2SVhOLD41xhvWB/UqiNr8LKGtnj41b RMxA+XfMSEE2tlH2Sv9ZM6kWzboqp1qBkLnsGz/oy+eYSeLVuKCcgSvZV5LJc8iwNgKS MLsfPnNxnifzm3q8u50W4leLBMSAhxwokOFECZDmxdoTBc19wWczNRPRQLj7DqmAOsYW 0v2p3nxKLGZqZ2hOxN8Y1qZsLpCUJf/rmazsSngofjOCJ/4VUE5q+ecpiYLp+r77880E BRnQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id z15si376306edm.343.2020.05.19.14.51.17; Tue, 19 May 2020 14:51:40 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728420AbgESVre (ORCPT + 99 others); Tue, 19 May 2020 17:47:34 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40966 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728351AbgESVrc (ORCPT ); Tue, 19 May 2020 17:47:32 -0400 Received: from Galois.linutronix.de (Galois.linutronix.de [IPv6:2a0a:51c0:0:12e:550::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5B1B6C08C5C0; Tue, 19 May 2020 14:47:32 -0700 (PDT) Received: from [5.158.153.53] (helo=debian-buster-darwi.lab.linutronix.de.) by Galois.linutronix.de with esmtpsa (TLS1.2:DHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.80) (envelope-from ) id 1jbA4m-0002mk-OU; Tue, 19 May 2020 23:47:04 +0200 From: "Ahmed S. Darwish" To: Peter Zijlstra , Ingo Molnar , Will Deacon Cc: Thomas Gleixner , "Paul E. McKenney" , "Sebastian A. Siewior" , Steven Rostedt , LKML , "Ahmed S. Darwish" , Pablo Neira Ayuso , Jozsef Kadlecsik , Florian Westphal , "David S. Miller" , Jakub Kicinski , netfilter-devel@vger.kernel.org, coreteam@netfilter.org, netdev@vger.kernel.org Subject: [PATCH v1 15/25] netfilter: conntrack: Use sequence counter with associated spinlock Date: Tue, 19 May 2020 23:45:37 +0200 Message-Id: <20200519214547.352050-16-a.darwish@linutronix.de> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200519214547.352050-1-a.darwish@linutronix.de> References: <20200519214547.352050-1-a.darwish@linutronix.de> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Linutronix-Spam-Score: -1.0 X-Linutronix-Spam-Level: - X-Linutronix-Spam-Status: No , -1.0 points, 5.0 required, ALL_TRUSTED=-1,SHORTCIRCUIT=-0.0001 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org A sequence counter write side critical section must be protected by some form of locking to serialize writers. A plain seqcount_t does not contain the information of which lock must be held when entering a write side critical section. Use the new seqcount_spinlock_t data type, which allows to associate a spinlock with the sequence counter. This enables lockdep to verify that the spinlock used for writer serialization is held when the write side critical section is entered. If lockdep is disabled this lock association is compiled out and has neither storage size nor runtime overhead. Signed-off-by: Ahmed S. Darwish --- include/net/netfilter/nf_conntrack.h | 2 +- net/netfilter/nf_conntrack_core.c | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/include/net/netfilter/nf_conntrack.h b/include/net/netfilter/nf_conntrack.h index 9f551f3b69c6..333fd54aec30 100644 --- a/include/net/netfilter/nf_conntrack.h +++ b/include/net/netfilter/nf_conntrack.h @@ -286,7 +286,7 @@ int nf_conntrack_hash_resize(unsigned int hashsize); extern struct hlist_nulls_head *nf_conntrack_hash; extern unsigned int nf_conntrack_htable_size; -extern seqcount_t nf_conntrack_generation; +extern seqcount_spinlock_t nf_conntrack_generation; extern unsigned int nf_conntrack_max; /* must be called with rcu read lock held */ diff --git a/net/netfilter/nf_conntrack_core.c b/net/netfilter/nf_conntrack_core.c index c4582eb71766..48a839377da2 100644 --- a/net/netfilter/nf_conntrack_core.c +++ b/net/netfilter/nf_conntrack_core.c @@ -180,7 +180,7 @@ EXPORT_SYMBOL_GPL(nf_conntrack_htable_size); unsigned int nf_conntrack_max __read_mostly; EXPORT_SYMBOL_GPL(nf_conntrack_max); -seqcount_t nf_conntrack_generation __read_mostly; +seqcount_spinlock_t nf_conntrack_generation __read_mostly; static unsigned int nf_conntrack_hash_rnd __read_mostly; static u32 hash_conntrack_raw(const struct nf_conntrack_tuple *tuple, @@ -2512,7 +2512,8 @@ int nf_conntrack_init_start(void) /* struct nf_ct_ext uses u8 to store offsets/size */ BUILD_BUG_ON(total_extension_size() > 255u); - seqcount_init(&nf_conntrack_generation); + seqcount_spinlock_init(&nf_conntrack_generation, + &nf_conntrack_locks_all_lock); for (i = 0; i < CONNTRACK_LOCKS; i++) spin_lock_init(&nf_conntrack_locks[i]); -- 2.20.1