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 14/17] ratelimit: assert static storage for DEFINE_RATELIMIT_STATE()
Date: Mon, 14 Sep 2026 23:13:29 -0400 [thread overview]
Message-ID: <20260915031334.1194975-9-ynorov@nvidia.com> (raw)
In-Reply-To: <20260915030336.1192299-1-ynorov@nvidia.com>
DEFINE_RATELIMIT_STATE() uses a static raw spinlock initializer, which
requires a persistent object address for lockdep. Automatic objects must
use ratelimit_state_init().
Add ASSERT_STATIC_STORAGE() to the declaration and align the virtio tools
stub. The virtio tools use a private compiler.h, so provide the same
assertion helper and its unused attribute there as well.
Assisted-by: OpenAI Codex
Signed-off-by: Yury Norov <ynorov@nvidia.com>
---
include/linux/ratelimit_types.h | 4 +++-
tools/virtio/linux/compiler.h | 9 +++++++++
tools/virtio/linux/ratelimit.h | 6 +++++-
3 files changed, 17 insertions(+), 2 deletions(-)
diff --git a/include/linux/ratelimit_types.h b/include/linux/ratelimit_types.h
index b19c4354540a..977fdfff5926 100644
--- a/include/linux/ratelimit_types.h
+++ b/include/linux/ratelimit_types.h
@@ -2,6 +2,7 @@
#ifndef _LINUX_RATELIMIT_TYPES_H
#define _LINUX_RATELIMIT_TYPES_H
+#include <linux/compiler.h>
#include <linux/bits.h>
#include <linux/param.h>
#include <linux/spinlock_types_raw.h>
@@ -40,7 +41,8 @@ struct ratelimit_state {
#define DEFINE_RATELIMIT_STATE(name, interval_init, burst_init) \
\
struct ratelimit_state name = \
- RATELIMIT_STATE_INIT(name, interval_init, burst_init) \
+ RATELIMIT_STATE_INIT(name, interval_init, burst_init); \
+ ASSERT_STATIC_STORAGE(name)
extern int ___ratelimit(struct ratelimit_state *rs, const char *func);
#define __ratelimit(state) ___ratelimit(state, __func__)
diff --git a/tools/virtio/linux/compiler.h b/tools/virtio/linux/compiler.h
index 0f25db473f55..3c1eca4a4380 100644
--- a/tools/virtio/linux/compiler.h
+++ b/tools/virtio/linux/compiler.h
@@ -15,6 +15,15 @@
#define __aligned(x) __attribute((__aligned__(x)))
+#ifndef __always_unused
+#define __always_unused __attribute__((__unused__))
+#endif
+
+/* Enforce static storage duration. */
+#define ASSERT_STATIC_STORAGE(name) \
+ static typeof(name) * const __always_unused \
+ name##_storage_check = &(name)
+
/**
* data_race - mark an expression as containing intentional data races
*
diff --git a/tools/virtio/linux/ratelimit.h b/tools/virtio/linux/ratelimit.h
index dcce1725f90d..c15c82a5ca21 100644
--- a/tools/virtio/linux/ratelimit.h
+++ b/tools/virtio/linux/ratelimit.h
@@ -1,4 +1,8 @@
-#define DEFINE_RATELIMIT_STATE(name, interval_init, burst_init) int name = 0
+#include <linux/compiler.h>
+
+#define DEFINE_RATELIMIT_STATE(name, interval_init, burst_init) \
+ int name = 0; \
+ ASSERT_STATIC_STORAGE(name)
#define __ratelimit(x) (*(x))
--
2.53.0
next prev parent reply other threads:[~2026-09-15 3:14 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 ` [PATCH 08/17] idr: enforce the static-storage contract of DEFINE_IDR() Yury Norov
2026-09-15 3:25 ` 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 ` Yury Norov [this message]
2026-09-15 3:26 ` [PATCH 14/17] ratelimit: assert static storage for DEFINE_RATELIMIT_STATE() 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-9-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.