Received: by 2002:a25:683:0:0:0:0:0 with SMTP id 125csp3999222ybg; Sun, 7 Jun 2020 18:01:09 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxOs7jrtFaTLu8aRorypbkvjaA3w6MwEMmLd2EFr0BfM4xAftFbW4CFhc9JA/ZZFMAA5HYQ X-Received: by 2002:aa7:cc84:: with SMTP id p4mr19239523edt.157.1591578069439; Sun, 07 Jun 2020 18:01:09 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1591578069; cv=none; d=google.com; s=arc-20160816; b=Qu2k43yfMfP3DNJezYm72VNQlfg+5XZJ7ZnG9eLx3kofWIMo8tVQS5OyHG5rWykF3T iLFv/XUE4rj3f0Wzm1+VSy5KDZ1YLBxkRSnkoMyfn6EHvCEb1KISvwr2TfDLmVXnWY17 P83Jun+JMPH7M9WU5ItPKExvG48vrlQWPcrhBSRi9ZQIUdAfCE6ofkYv+obJq85das2O 5ay5J6uAJnO3NFV1oWQdSMasViY3s2oHPUTMgmxMtlQuFoI8KzeZx7a3BGicuL2clqkS 99pNhNBk5ajQunz2eBxg72BkJVMSgTNASzLd1c6vm2Bdu3NaSNNxP8rSvyTsFFTH8Ccd kJfA== 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=iNthCqkgiquwTHfUpsM+GGmJ42r/p7gGOlEhcv4jh4U=; b=VV93VNvzF6xxh/7O0I5O7sq9PQdTu6VkajvGAPN0CWhgubgZ/h89iDFrpQgVNlBgqb r3LP9+YyAxAW1Ir4MBTVaeJ/It0NDLlymusDSGSV2akmBt1s0fxOkr+0/H0zF7D0H2/f 6d4E2AkOzBcm/9meNGNQoz82e8clCr6TtPJ9BXwyxFACIR/dpOdH+rSYbHRe4vguqa54 QndH//8MHTTEfnRfJ1mJ2DOTxgjwkCx+5yxqCy7D2vvSTFEjaV81Q6WxnnKi9M07sbSU 4byv823tCgyR4IvOHpTqMcCtpSsdCNz/Zoa/7ezJp5kXhhru76B/pS60zi4CI3yYEN0g 1/Fw== 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 n93si4091010edc.552.2020.06.07.18.00.47; Sun, 07 Jun 2020 18:01:09 -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 S1728965AbgFHA6j (ORCPT + 99 others); Sun, 7 Jun 2020 20:58:39 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58386 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728667AbgFHA61 (ORCPT ); Sun, 7 Jun 2020 20:58:27 -0400 Received: from Galois.linutronix.de (Galois.linutronix.de [IPv6:2a0a:51c0:0:12e:550::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B2ACAC08C5C3; Sun, 7 Jun 2020 17:58:26 -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 1ji678-0000qF-22; Mon, 08 Jun 2020 02:58:10 +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 v2 08/18] netfilter: conntrack: Use sequence counter with associated spinlock Date: Mon, 8 Jun 2020 02:57:19 +0200 Message-Id: <20200608005729.1874024-9-a.darwish@linutronix.de> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200608005729.1874024-1-a.darwish@linutronix.de> References: <20200519214547.352050-1-a.darwish@linutronix.de> <20200608005729.1874024-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 90690e37a56f..ea4e2010b246 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 bb72ca5f3999..1f9518569195 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, @@ -2589,7 +2589,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