[PATCH 13/17] kthread: assert static storage for delayed work declarations
From: Yury Norov
Date: Mon Sep 14 2026 - 23:17:43 EST
DEFINE_KTHREAD_DELAYED_WORK() embeds a statically initialized timer.
Using the declaration for an automatic object violates the timer's
debugobjects storage contract.
Add ASSERT_STATIC_STORAGE() to reject such declarations. Plain
DEFINE_KTHREAD_WORK() has no embedded timer or static lockdep map and
remains usable for automatic objects with an appropriately bounded
lifetime.
Assisted-by: OpenAI Codex
Signed-off-by: Yury Norov <ynorov@xxxxxxxxxx>
---
include/linux/kthread.h | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/include/linux/kthread.h b/include/linux/kthread.h
index a01a474719a7..faa9dfb2f6cf 100644
--- a/include/linux/kthread.h
+++ b/include/linux/kthread.h
@@ -2,6 +2,7 @@
#ifndef _LINUX_KTHREAD_H
#define _LINUX_KTHREAD_H
/* Simple interface for creating and stopping kernel threads without mess. */
+#include <linux/compiler.h>
#include <linux/err.h>
#include <linux/sched.h>
@@ -179,7 +180,8 @@ struct kthread_delayed_work {
#define DEFINE_KTHREAD_DELAYED_WORK(dwork, fn) \
struct kthread_delayed_work dwork = \
- KTHREAD_DELAYED_WORK_INIT(dwork, fn)
+ KTHREAD_DELAYED_WORK_INIT(dwork, fn); \
+ ASSERT_STATIC_STORAGE(dwork)
extern void __kthread_init_worker(struct kthread_worker *worker,
const char *name, struct lock_class_key *key);
--
2.53.0