All of lore.kernel.org
 help / color / mirror / Atom feed
From: Yury Norov <ynorov@nvidia.com>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: "Yury Norov" <ynorov@nvidia.com>,
	"Jason A. Donenfeld" <Jason@zx2c4.com>,
	"Andrew Lunn" <andrew+netdev@lunn.ch>,
	"David S. Miller" <davem@davemloft.net>,
	"Eric Dumazet" <edumazet@google.com>,
	"Jakub Kicinski" <kuba@kernel.org>,
	"Paolo Abeni" <pabeni@redhat.com>,
	"Matthew Wilcox" <willy@infradead.org>,
	"Peter Zijlstra" <peterz@infradead.org>,
	"Ingo Molnar" <mingo@redhat.com>, "Will Deacon" <will@kernel.org>,
	"Boqun Feng" <boqun@kernel.org>,
	"Waiman Long" <longman@redhat.com>,
	"Dennis Zhou" <dennis@kernel.org>, "Tejun Heo" <tj@kernel.org>,
	"Christoph Lameter" <cl@gentwo.org>,
	"Paul E. McKenney" <paulmck@kernel.org>,
	"Frederic Weisbecker" <frederic@kernel.org>,
	"Neeraj Upadhyay" <neeraj.upadhyay@kernel.org>,
	"Joel Fernandes" <joelagnelf@nvidia.com>,
	"Josh Triplett" <josh@joshtriplett.org>,
	"Uladzislau Rezki" <urezki@gmail.com>,
	"Steven Rostedt" <rostedt@goodmis.org>,
	"Mathieu Desnoyers" <mathieu.desnoyers@efficios.com>,
	"Lai Jiangshan" <jiangshanlai@gmail.com>,
	Zqiang <qiang.zhang@linux.dev>, "Onur Özkan" <work@onurozkan.dev>,
	"Kees Cook" <kees@kernel.org>,
	"Joel Granados" <joel.granados@kernel.org>,
	"Anna-Maria Behnsen" <anna-maria@linutronix.de>,
	"Thomas Gleixner" <tglx@kernel.org>,
	"Juri Lelli" <juri.lelli@redhat.com>,
	"Vincent Guittot" <vincent.guittot@linaro.org>,
	"Dietmar Eggemann" <dietmar.eggemann@arm.com>,
	"Ben Segall" <bsegall@google.com>, "Mel Gorman" <mgorman@suse.de>,
	"Valentin Schneider" <vschneid@redhat.com>,
	"K Prateek Nayak" <kprateek.nayak@amd.com>,
	"Mike Rapoport" <rppt@kernel.org>,
	"Liam R. Howlett" <liam@infradead.org>,
	"Lorenzo Stoakes" <ljs@kernel.org>,
	"Vlastimil Babka" <vbabka@kernel.org>,
	"Jann Horn" <jannh@google.com>,
	"Pedro Falcato" <pfalcato@suse.de>,
	"Michael S. Tsirkin" <mst@redhat.com>,
	"Jason Wang" <jasowangio@gmail.com>,
	"Xuan Zhuo" <xuanzhuo@linux.alibaba.com>,
	"Eugenio Pérez" <eperezma@redhat.com>,
	"Sebastian Andrzej Siewior" <bigeasy@linutronix.de>,
	"Clark Williams" <clrkwllms@kernel.org>,
	"Nathan Chancellor" <nathan@kernel.org>,
	"Nick Desaulniers" <ndesaulniers@google.com>,
	"Bill Wendling" <morbo@google.com>,
	"Justin Stitt" <justinstitt@google.com>,
	linuxppc-dev@lists.ozlabs.org, linux-kernel@vger.kernel.org,
	wireguard@lists.zx2c4.com, netdev@vger.kernel.org,
	linux-fsdevel@vger.kernel.org, linux-mm@kvack.org,
	rcu@vger.kernel.org, virtualization@lists.linux.dev,
	linux-rt-devel@lists.linux.dev, llvm@lists.linux.dev,
	"Yury Norov" <yury.norov@gmail.com>
Subject: [PATCH 08/17] idr: enforce the static-storage contract of DEFINE_IDR()
Date: Mon, 14 Sep 2026 23:13:23 -0400	[thread overview]
Message-ID: <20260915031334.1194975-3-ynorov@nvidia.com> (raw)
In-Reply-To: <20260915030336.1192299-1-ynorov@nvidia.com>

DEFINE_IDR() is documented as defining a statically allocated IDR. Enforce
that contract with ASSERT_STATIC_STORAGE(), matching DEFINE_IDA().

Normal IDR operations use external synchronization and do not acquire the
embedded XArray lock. This change enforces the declaration API contract;
it does not fix a lockdep failure in ordinary IDR operations.

Convert the seven automatic IDRs in the userspace tests to plain
declarations and runtime initialization. Two already use idr_init_base().
Keep direct IDR_INIT() and IDR_INIT_BASE() initializers unchanged.

Assisted-by: OpenAI Codex
Signed-off-by: Yury Norov <ynorov@nvidia.com>
---
 include/linux/idr.h                 |  4 +++-
 tools/testing/radix-tree/idr-test.c | 29 ++++++++++++++++++++---------
 2 files changed, 23 insertions(+), 10 deletions(-)

diff --git a/include/linux/idr.h b/include/linux/idr.h
index e2a4b6298511..d0393b7fe985 100644
--- a/include/linux/idr.h
+++ b/include/linux/idr.h
@@ -55,7 +55,9 @@ struct idr {
  * An IDR defined using this macro is ready for use with no additional
  * initialisation required.  It contains no IDs.
  */
-#define DEFINE_IDR(name)	struct idr name = IDR_INIT(name)
+#define DEFINE_IDR(name) \
+	struct idr name = IDR_INIT(name);	\
+	ASSERT_STATIC_STORAGE(name)
 
 /**
  * idr_get_cursor - Return the current position of the cyclic allocator
diff --git a/tools/testing/radix-tree/idr-test.c b/tools/testing/radix-tree/idr-test.c
index 6fcba5b5870b..4668c6a4f6ea 100644
--- a/tools/testing/radix-tree/idr-test.c
+++ b/tools/testing/radix-tree/idr-test.c
@@ -33,7 +33,9 @@ void item_idr_remove(struct idr *idr, int id)
 void idr_alloc_test(void)
 {
 	unsigned long i;
-	DEFINE_IDR(idr);
+	struct idr idr;
+
+	idr_init(&idr);
 
 	assert(idr_alloc_cyclic(&idr, DUMMY_PTR, 0, 0x4000, GFP_KERNEL) == 0);
 	assert(idr_alloc_cyclic(&idr, DUMMY_PTR, 0x3ffd, 0x4000, GFP_KERNEL) == 0x3ffd);
@@ -79,7 +81,9 @@ void idr_alloc2_test(void)
 
 void idr_replace_test(void)
 {
-	DEFINE_IDR(idr);
+	struct idr idr;
+
+	idr_init(&idr);
 
 	idr_alloc(&idr, (void *)-1, 10, 11, GFP_KERNEL);
 	idr_replace(&idr, &idr, 10);
@@ -96,7 +100,9 @@ void idr_replace_test(void)
 void idr_null_test(void)
 {
 	int i;
-	DEFINE_IDR(idr);
+	struct idr idr;
+
+	idr_init(&idr);
 
 	assert(idr_is_empty(&idr));
 
@@ -150,7 +156,9 @@ void idr_null_test(void)
 void idr_nowait_test(void)
 {
 	unsigned int i;
-	DEFINE_IDR(idr);
+	struct idr idr;
+
+	idr_init(&idr);
 
 	idr_preload(GFP_KERNEL);
 
@@ -169,11 +177,11 @@ void idr_get_next_test(int base)
 {
 	unsigned long i;
 	int nextid;
-	DEFINE_IDR(idr);
-	idr_init_base(&idr, base);
-
+	struct idr idr;
 	int indices[] = {4, 7, 9, 15, 65, 128, 1000, 99999, 0};
 
+	idr_init_base(&idr, base);
+
 	for(i = 0; indices[i]; i++) {
 		struct item *item = item_create(indices[i], 0);
 		assert(idr_alloc(&idr, item, indices[i], indices[i+1],
@@ -229,7 +237,8 @@ void idr_u32_test1(struct idr *idr, u32 handle)
 
 void idr_u32_test(int base)
 {
-	DEFINE_IDR(idr);
+	struct idr idr;
+
 	idr_init_base(&idr, base);
 	idr_u32_test1(&idr, 10);
 	idr_u32_test1(&idr, 0x7fffffff);
@@ -360,7 +369,9 @@ void idr_find_test(void)
 void idr_checks(void)
 {
 	unsigned long i;
-	DEFINE_IDR(idr);
+	struct idr idr;
+
+	idr_init(&idr);
 
 	for (i = 0; i < 10000; i++) {
 		struct item *item = item_create(i, 0);
-- 
2.53.0


  parent reply	other threads:[~2026-09-15  3:13 UTC|newest]

Thread overview: 45+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-09-15  3:03 [PATCH 00/17] Treewide: enforce static storage for object initializers Yury Norov
2026-09-15  3:03 ` [PATCH 01/17] locking/mutex: assert static storage for DEFINE_MUTEX() Yury Norov
2026-09-15  3:25   ` sashiko-bot
2026-09-15  8:23   ` Peter Zijlstra
2026-09-15 15:54     ` Yury Norov
2026-09-15  3:03 ` [PATCH 02/17] locking/rtmutex: assert static storage for DEFINE_RT_MUTEX() Yury Norov
2026-09-15  3:25   ` sashiko-bot
2026-09-15  3:03 ` [PATCH 03/17] locking/rwsem: assert static storage for semaphore definitions Yury Norov
2026-09-15  3:26   ` sashiko-bot
2026-09-15  3:03 ` [PATCH 04/17] locking/semaphore: assert static storage for DEFINE_SEMAPHORE() Yury Norov
2026-09-15  3:26   ` sashiko-bot
2026-09-15  3:03 ` [PATCH 05/17] locking/seqlock: assert static storage for DEFINE_SEQLOCK() Yury Norov
2026-09-15  3:26   ` sashiko-bot
2026-09-15  3:13 ` [PATCH 06/17] sched: assert static storage for wait queue and completion declarations Yury Norov
2026-09-15  3:25   ` sashiko-bot
2026-09-15  3:13 ` [PATCH 07/17] xarray: assert static storage for DEFINE_XARRAY_FLAGS() Yury Norov
2026-09-15  3:26   ` sashiko-bot
2026-09-15  3:13 ` Yury Norov [this message]
2026-09-15  3:25   ` [PATCH 08/17] idr: enforce the static-storage contract of DEFINE_IDR() sashiko-bot
2026-09-15  3:13 ` [PATCH 09/17] radix-tree: require static storage for RADIX_TREE() Yury Norov
2026-09-15  3:25   ` sashiko-bot
2026-09-15  3:13 ` [PATCH 10/17] klist: assert static storage for DEFINE_KLIST() Yury Norov
2026-09-15  3:25   ` sashiko-bot
2026-09-15  3:13 ` [PATCH 11/17] workqueue: assert static storage for work declarations Yury Norov
2026-09-15  3:25   ` sashiko-bot
2026-09-15  3:13 ` [PATCH 12/17] timers: assert static storage for DEFINE_TIMER() Yury Norov
2026-09-15  3:26   ` sashiko-bot
2026-09-29 18:50   ` Thomas Gleixner
2026-09-15  3:13 ` [PATCH 13/17] kthread: assert static storage for delayed work declarations Yury Norov
2026-09-15  3:25   ` sashiko-bot
2026-09-15  3:13 ` [PATCH 14/17] ratelimit: assert static storage for DEFINE_RATELIMIT_STATE() Yury Norov
2026-09-15  3:26   ` sashiko-bot
2026-09-15  3:13 ` [PATCH 15/17] notifier: assert static storage for locking notifier heads Yury Norov
2026-09-15  3:26   ` sashiko-bot
2026-09-15  3:13 ` [PATCH 16/17] rcu: assert static storage for RCU sync and SRCU definitions Yury Norov
2026-09-15  3:26   ` sashiko-bot
2026-10-07 18:41   ` Joel Fernandes
2026-10-07 18:48     ` Yury Norov
2026-10-07 18:58       ` Joel Fernandes
2026-09-15  3:13 ` [PATCH 17/17] sysctl: assert static storage for DEFINE_CTL_TABLE_POLL() Yury Norov
2026-09-15  3:26   ` sashiko-bot
2026-09-18  7:21   ` Joel Granados
2026-09-15  6:14 ` [PATCH 00/17] Treewide: enforce static storage for object initializers Andrew Morton
2026-09-15  9:24   ` David Laight
2026-09-15 15:53     ` Yury Norov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20260915031334.1194975-3-ynorov@nvidia.com \
    --to=ynorov@nvidia.com \
    --cc=Jason@zx2c4.com \
    --cc=akpm@linux-foundation.org \
    --cc=andrew+netdev@lunn.ch \
    --cc=anna-maria@linutronix.de \
    --cc=bigeasy@linutronix.de \
    --cc=boqun@kernel.org \
    --cc=bsegall@google.com \
    --cc=cl@gentwo.org \
    --cc=clrkwllms@kernel.org \
    --cc=davem@davemloft.net \
    --cc=dennis@kernel.org \
    --cc=dietmar.eggemann@arm.com \
    --cc=edumazet@google.com \
    --cc=eperezma@redhat.com \
    --cc=frederic@kernel.org \
    --cc=jannh@google.com \
    --cc=jasowangio@gmail.com \
    --cc=jiangshanlai@gmail.com \
    --cc=joel.granados@kernel.org \
    --cc=joelagnelf@nvidia.com \
    --cc=josh@joshtriplett.org \
    --cc=juri.lelli@redhat.com \
    --cc=justinstitt@google.com \
    --cc=kees@kernel.org \
    --cc=kprateek.nayak@amd.com \
    --cc=kuba@kernel.org \
    --cc=liam@infradead.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=linux-rt-devel@lists.linux.dev \
    --cc=linuxppc-dev@lists.ozlabs.org \
    --cc=ljs@kernel.org \
    --cc=llvm@lists.linux.dev \
    --cc=longman@redhat.com \
    --cc=mathieu.desnoyers@efficios.com \
    --cc=mgorman@suse.de \
    --cc=mingo@redhat.com \
    --cc=morbo@google.com \
    --cc=mst@redhat.com \
    --cc=nathan@kernel.org \
    --cc=ndesaulniers@google.com \
    --cc=neeraj.upadhyay@kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=pabeni@redhat.com \
    --cc=paulmck@kernel.org \
    --cc=peterz@infradead.org \
    --cc=pfalcato@suse.de \
    --cc=qiang.zhang@linux.dev \
    --cc=rcu@vger.kernel.org \
    --cc=rostedt@goodmis.org \
    --cc=rppt@kernel.org \
    --cc=tglx@kernel.org \
    --cc=tj@kernel.org \
    --cc=urezki@gmail.com \
    --cc=vbabka@kernel.org \
    --cc=vincent.guittot@linaro.org \
    --cc=virtualization@lists.linux.dev \
    --cc=vschneid@redhat.com \
    --cc=will@kernel.org \
    --cc=willy@infradead.org \
    --cc=wireguard@lists.zx2c4.com \
    --cc=work@onurozkan.dev \
    --cc=xuanzhuo@linux.alibaba.com \
    --cc=yury.norov@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.