From: Byungchul Park <byungchul@sk.com>
To: linux-kernel@vger.kernel.org
Cc: kernel_team@skhynix.com, torvalds@linux-foundation.org,
damien.lemoal@opensource.wdc.com, linux-ide@vger.kernel.org,
adilger.kernel@dilger.ca, linux-ext4@vger.kernel.org,
mingo@redhat.com, peterz@infradead.org, will@kernel.org,
tglx@linutronix.de, rostedt@goodmis.org, joel@joelfernandes.org,
sashal@kernel.org, daniel.vetter@ffwll.ch, duyuyang@gmail.com,
johannes.berg@intel.com, tj@kernel.org, tytso@mit.edu,
willy@infradead.org, david@fromorbit.com, amir73il@gmail.com,
gregkh@linuxfoundation.org, kernel-team@lge.com,
linux-mm@kvack.org, akpm@linux-foundation.org, mhocko@kernel.org,
minchan@kernel.org, hannes@cmpxchg.org, vdavydov.dev@gmail.com,
sj@kernel.org, jglisse@redhat.com, dennis@kernel.org,
cl@linux.com, penberg@kernel.org, rientjes@google.com,
vbabka@suse.cz, ngupta@vflare.org, linux-block@vger.kernel.org,
josef@toxicpanda.com, linux-fsdevel@vger.kernel.org,
jack@suse.cz, jlayton@kernel.org, dan.j.williams@intel.com,
hch@infradead.org, djwong@kernel.org,
dri-devel@lists.freedesktop.org, rodrigosiqueiramelo@gmail.com,
melissa.srw@gmail.com, hamohammed.sa@gmail.com,
harry.yoo@oracle.com, chris.p.wilson@intel.com,
gwan-gyeong.mun@intel.com, max.byungchul.park@gmail.com,
boqun.feng@gmail.com, longman@redhat.com,
yunseong.kim@ericsson.com, ysk@kzalloc.com, yeoreum.yun@arm.com,
netdev@vger.kernel.org, matthew.brost@intel.com,
her0gyugyu@gmail.com, corbet@lwn.net, catalin.marinas@arm.com,
bp@alien8.de, x86@kernel.org, hpa@zytor.com, luto@kernel.org,
sumit.semwal@linaro.org, gustavo@padovan.org,
christian.koenig@amd.com, andi.shyti@kernel.org, arnd@arndb.de,
lorenzo.stoakes@oracle.com, Liam.Howlett@oracle.com,
rppt@kernel.org, surenb@google.com, mcgrof@kernel.org,
petr.pavlu@suse.com, da.gomez@kernel.org,
samitolvanen@google.com, paulmck@kernel.org, frederic@kernel.org,
neeraj.upadhyay@kernel.org, joelagnelf@nvidia.com,
josh@joshtriplett.org, urezki@gmail.com,
mathieu.desnoyers@efficios.com, jiangshanlai@gmail.com,
qiang.zhang@linux.dev, juri.lelli@redhat.com,
vincent.guittot@linaro.org, dietmar.eggemann@arm.com,
bsegall@google.com, mgorman@suse.de, vschneid@redhat.com,
chuck.lever@oracle.com, neil@brown.name, okorniev@redhat.com,
Dai.Ngo@oracle.com, tom@talpey.com, trondmy@kernel.org,
anna@kernel.org, kees@kernel.org, bigeasy@linutronix.de,
clrkwllms@kernel.org, mark.rutland@arm.com,
ada.coupriediaz@arm.com, kristina.martsenko@arm.com,
wangkefeng.wang@huawei.com, broonie@kernel.org,
kevin.brodsky@arm.com, dwmw@amazon.co.uk, shakeel.butt@linux.dev,
ast@kernel.org, ziy@nvidia.com, yuzhao@google.com,
baolin.wang@linux.alibaba.com, usamaarif642@gmail.com,
joel.granados@kernel.org, richard.weiyang@gmail.com,
geert+renesas@glider.be, tim.c.chen@linux.intel.com,
linux@treblig.org, alexander.shishkin@linux.intel.com,
lillian@star-ark.net, chenhuacai@kernel.org, francesco@valla.it,
guoweikang.kernel@gmail.com, link@vivo.com, jpoimboe@kernel.org,
masahiroy@kernel.org, brauner@kernel.org,
thomas.weissschuh@linutronix.de, oleg@redhat.com,
mjguzik@gmail.com, andrii@kernel.org, wangfushuai@baidu.com,
linux-doc@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
linux-media@vger.kernel.org, linaro-mm-sig@lists.linaro.org,
linux-i2c@vger.kernel.org, linux-arch@vger.kernel.org,
linux-modules@vger.kernel.org, rcu@vger.kernel.org,
linux-nfs@vger.kernel.org, linux-rt-devel@lists.linux.dev,
2407018371@qq.com, dakr@kernel.org,
miguel.ojeda.sandonis@gmail.com, neilb@ownmail.net,
bagasdotme@gmail.com, wsa+renesas@sang-engineering.com,
dave.hansen@intel.com, geert@linux-m68k.org, ojeda@kernel.org,
alex.gaynor@gmail.com, gary@garyguo.net,
bjorn3_gh@protonmail.com, lossin@kernel.org,
a.hindborg@kernel.org, aliceryhl@google.com, tmgross@umich.edu,
rust-for-linux@vger.kernel.org
Subject: [PATCH v18 15/42] dept: track timeout waits separately with a new Kconfig
Date: Fri, 5 Dec 2025 16:18:28 +0900 [thread overview]
Message-ID: <20251205071855.72743-16-byungchul@sk.com> (raw)
In-Reply-To: <20251205071855.72743-1-byungchul@sk.com>
Waits with valid timeouts don't actually cause deadlocks. However, dept
has been reporting the cases as well because it's worth informing the
circular dependency for some cases where, for example, timeout is used
to avoid a deadlock.
However, yes, there are also a lot of, even more, cases where timeout
is used for its clear purpose and meant to be expired.
Report these as an information rather than warning DEADLOCK. Plus,
introduce CONFIG_DEPT_AGGRESSIVE_TIMEOUT_WAIT Kconfig to make it
optional so that any reports involving waits with timeouts can be turned
on/off depending on the purpose.
Signed-off-by: Byungchul Park <byungchul@sk.com>
---
include/linux/dept.h | 8 ++--
include/linux/dept_ldt.h | 6 +--
include/linux/dept_sdt.h | 13 +++---
include/linux/sched.h | 2 +
kernel/dependency/dept.c | 66 ++++++++++++++++++++++++++-----
kernel/dependency/dept_internal.h | 5 +++
lib/Kconfig.debug | 10 +++++
7 files changed, 89 insertions(+), 21 deletions(-)
diff --git a/include/linux/dept.h b/include/linux/dept.h
index 2343d8c392d7..e70cbc6f41dc 100644
--- a/include/linux/dept.h
+++ b/include/linux/dept.h
@@ -139,8 +139,8 @@ extern void dept_free_range(void *start, unsigned int sz);
extern void dept_map_init(struct dept_map *m, struct dept_key *k, int sub_u, const char *n);
extern void dept_map_reinit(struct dept_map *m, struct dept_key *k, int sub_u, const char *n);
extern void dept_map_copy(struct dept_map *to, struct dept_map *from);
-extern void dept_wait(struct dept_map *m, unsigned long w_f, unsigned long ip, const char *w_fn, int sub_l);
-extern void dept_stage_wait(struct dept_map *m, struct dept_key *k, unsigned long ip, const char *w_fn);
+extern void dept_wait(struct dept_map *m, unsigned long w_f, unsigned long ip, const char *w_fn, int sub_l, long timeout);
+extern void dept_stage_wait(struct dept_map *m, struct dept_key *k, unsigned long ip, const char *w_fn, long timeout);
extern void dept_request_event_wait_commit(void);
extern void dept_clean_stage(void);
extern void dept_ttwu_stage_wait(struct task_struct *t, unsigned long ip);
@@ -187,8 +187,8 @@ struct dept_map { };
#define dept_map_init(m, k, su, n) do { (void)(n); (void)(k); } while (0)
#define dept_map_reinit(m, k, su, n) do { (void)(n); (void)(k); } while (0)
#define dept_map_copy(t, f) do { } while (0)
-#define dept_wait(m, w_f, ip, w_fn, sl) do { (void)(w_fn); } while (0)
-#define dept_stage_wait(m, k, ip, w_fn) do { (void)(k); (void)(w_fn); } while (0)
+#define dept_wait(m, w_f, ip, w_fn, sl, t) do { (void)(w_fn); } while (0)
+#define dept_stage_wait(m, k, ip, w_fn, t) do { (void)(k); (void)(w_fn); } while (0)
#define dept_request_event_wait_commit() do { } while (0)
#define dept_clean_stage() do { } while (0)
#define dept_ttwu_stage_wait(t, ip) do { } while (0)
diff --git a/include/linux/dept_ldt.h b/include/linux/dept_ldt.h
index 8047d0a531f1..730af2517ecd 100644
--- a/include/linux/dept_ldt.h
+++ b/include/linux/dept_ldt.h
@@ -28,7 +28,7 @@
else if (t) \
dept_ecxt_enter(m, LDT_EVT_L, i, "trylock", "unlock", sl);\
else { \
- dept_wait(m, LDT_EVT_L, i, "lock", sl); \
+ dept_wait(m, LDT_EVT_L, i, "lock", sl, false); \
dept_ecxt_enter(m, LDT_EVT_L, i, "lock", "unlock", sl);\
} \
} while (0)
@@ -40,7 +40,7 @@
else if (t) \
dept_ecxt_enter(m, LDT_EVT_R, i, "read_trylock", "read_unlock", sl);\
else { \
- dept_wait(m, q ? LDT_EVT_RW : LDT_EVT_W, i, "read_lock", sl);\
+ dept_wait(m, q ? LDT_EVT_RW : LDT_EVT_W, i, "read_lock", sl, false);\
dept_ecxt_enter(m, LDT_EVT_R, i, "read_lock", "read_unlock", sl);\
} \
} while (0)
@@ -52,7 +52,7 @@
else if (t) \
dept_ecxt_enter(m, LDT_EVT_W, i, "write_trylock", "write_unlock", sl);\
else { \
- dept_wait(m, LDT_EVT_RW, i, "write_lock", sl); \
+ dept_wait(m, LDT_EVT_RW, i, "write_lock", sl, false);\
dept_ecxt_enter(m, LDT_EVT_W, i, "write_lock", "write_unlock", sl);\
} \
} while (0)
diff --git a/include/linux/dept_sdt.h b/include/linux/dept_sdt.h
index 0535f763b21b..14917df0cc30 100644
--- a/include/linux/dept_sdt.h
+++ b/include/linux/dept_sdt.h
@@ -23,11 +23,12 @@
#define sdt_map_init_key(m, k) dept_map_init(m, k, 0, #m)
-#define sdt_wait(m) \
+#define sdt_wait_timeout(m, t) \
do { \
dept_request_event(m); \
- dept_wait(m, 1UL, _THIS_IP_, __func__, 0); \
+ dept_wait(m, 1UL, _THIS_IP_, __func__, 0, t); \
} while (0)
+#define sdt_wait(m) sdt_wait_timeout(m, -1L)
/*
* sdt_might_sleep() and its family will be committed in __schedule()
@@ -38,13 +39,13 @@
/*
* Use the code location as the class key if an explicit map is not used.
*/
-#define sdt_might_sleep_start(m) \
+#define sdt_might_sleep_start_timeout(m, t) \
do { \
struct dept_map *__m = m; \
static struct dept_key __key; \
- dept_stage_wait(__m, __m ? NULL : &__key, _THIS_IP_, __func__);\
+ dept_stage_wait(__m, __m ? NULL : &__key, _THIS_IP_, __func__, t);\
} while (0)
-
+#define sdt_might_sleep_start(m) sdt_might_sleep_start_timeout(m, -1L)
#define sdt_might_sleep_end() dept_clean_stage()
#define sdt_ecxt_enter(m) dept_ecxt_enter(m, 1UL, _THIS_IP_, "start", "event", 0)
@@ -54,7 +55,9 @@
#else /* !CONFIG_DEPT */
#define sdt_map_init(m) do { } while (0)
#define sdt_map_init_key(m, k) do { (void)(k); } while (0)
+#define sdt_wait_timeout(m, t) do { } while (0)
#define sdt_wait(m) do { } while (0)
+#define sdt_might_sleep_start_timeout(m, t) do { } while (0)
#define sdt_might_sleep_start(m) do { } while (0)
#define sdt_might_sleep_end() do { } while (0)
#define sdt_ecxt_enter(m) do { } while (0)
diff --git a/include/linux/sched.h b/include/linux/sched.h
index 1cd0e78f3323..385c5b3c5b0b 100644
--- a/include/linux/sched.h
+++ b/include/linux/sched.h
@@ -870,6 +870,7 @@ struct dept_task {
bool stage_sched_map;
const char *stage_w_fn;
unsigned long stage_ip;
+ bool stage_timeout;
arch_spinlock_t stage_lock;
/*
@@ -910,6 +911,7 @@ struct dept_task {
.stage_sched_map = false, \
.stage_w_fn = NULL, \
.stage_ip = 0UL, \
+ .stage_timeout = false, \
.stage_lock = (arch_spinlock_t)__ARCH_SPIN_LOCK_UNLOCKED,\
.missing_ecxt = 0, \
.hardirqs_enabled = false, \
diff --git a/kernel/dependency/dept.c b/kernel/dependency/dept.c
index f4c08758f8db..519b2151403e 100644
--- a/kernel/dependency/dept.c
+++ b/kernel/dependency/dept.c
@@ -757,6 +757,8 @@ static void print_diagram(struct dept_dep *d)
if (!irqf) {
print_spc(spc, "[S] %s(%s:%d)\n", c_fn, fc_n, fc->sub_id);
print_spc(spc, "[W] %s(%s:%d)\n", w_fn, tc_n, tc->sub_id);
+ if (w->timeout)
+ print_spc(spc, "--------------- >8 timeout ---------------\n");
print_spc(spc, "[E] %s(%s:%d)\n", e_fn, fc_n, fc->sub_id);
}
}
@@ -810,6 +812,24 @@ static void print_dep(struct dept_dep *d)
static void save_current_stack(int skip);
+static bool is_timeout_wait_circle(struct dept_class *c)
+{
+ struct dept_class *fc = c->bfs_parent;
+ struct dept_class *tc = c;
+
+ do {
+ struct dept_dep *d = lookup_dep(fc, tc);
+
+ if (d->wait->timeout)
+ return true;
+
+ tc = fc;
+ fc = fc->bfs_parent;
+ } while (tc != c);
+
+ return false;
+}
+
/*
* Print all classes in a circle.
*/
@@ -832,10 +852,14 @@ static void print_circle(struct dept_class *c)
pr_warn("summary\n");
pr_warn("---------------------------------------------------\n");
- if (fc == tc)
+ if (is_timeout_wait_circle(c)) {
+ pr_warn("NOT A DEADLOCK BUT A CIRCULAR DEPENDENCY\n");
+ pr_warn("CHECK IF THE TIMEOUT IS INTENDED\n\n");
+ } else if (fc == tc) {
pr_warn("*** AA DEADLOCK ***\n\n");
- else
+ } else {
pr_warn("*** DEADLOCK ***\n\n");
+ }
i = 0;
do {
@@ -1579,7 +1603,8 @@ static int next_wgen(void)
}
static void add_wait(struct dept_class *c, unsigned long ip,
- const char *w_fn, int sub_l, bool sched_sleep)
+ const char *w_fn, int sub_l, bool sched_sleep,
+ bool timeout)
{
struct dept_task *dt = dept_task();
struct dept_wait *w;
@@ -1599,6 +1624,7 @@ static void add_wait(struct dept_class *c, unsigned long ip,
w->wait_fn = w_fn;
w->wait_stack = get_current_stack();
w->sched_sleep = sched_sleep;
+ w->timeout = timeout;
cxt = cur_cxt();
if (cxt == DEPT_CXT_HIRQ || cxt == DEPT_CXT_SIRQ)
@@ -2297,7 +2323,7 @@ static struct dept_class *check_new_class(struct dept_key *local,
*/
static void __dept_wait(struct dept_map *m, unsigned long w_f,
unsigned long ip, const char *w_fn, int sub_l,
- bool sched_sleep, bool sched_map)
+ bool sched_sleep, bool sched_map, bool timeout)
{
int e;
@@ -2320,7 +2346,7 @@ static void __dept_wait(struct dept_map *m, unsigned long w_f,
if (!c)
continue;
- add_wait(c, ip, w_fn, sub_l, sched_sleep);
+ add_wait(c, ip, w_fn, sub_l, sched_sleep, timeout);
}
}
@@ -2355,14 +2381,23 @@ static void __dept_event(struct dept_map *m, struct dept_map *real_m,
}
void dept_wait(struct dept_map *m, unsigned long w_f,
- unsigned long ip, const char *w_fn, int sub_l)
+ unsigned long ip, const char *w_fn, int sub_l,
+ long timeoutval)
{
struct dept_task *dt = dept_task();
unsigned long flags;
+ bool timeout;
if (unlikely(!dept_working()))
return;
+ timeout = timeoutval > 0 && timeoutval < MAX_SCHEDULE_TIMEOUT;
+
+#if !defined(CONFIG_DEPT_AGGRESSIVE_TIMEOUT_WAIT)
+ if (timeout)
+ return;
+#endif
+
if (dt->recursive)
return;
@@ -2371,21 +2406,30 @@ void dept_wait(struct dept_map *m, unsigned long w_f,
flags = dept_enter();
- __dept_wait(m, w_f, ip, w_fn, sub_l, false, false);
+ __dept_wait(m, w_f, ip, w_fn, sub_l, false, false, timeout);
dept_exit(flags);
}
EXPORT_SYMBOL_GPL(dept_wait);
void dept_stage_wait(struct dept_map *m, struct dept_key *k,
- unsigned long ip, const char *w_fn)
+ unsigned long ip, const char *w_fn,
+ long timeoutval)
{
struct dept_task *dt = dept_task();
unsigned long flags;
+ bool timeout;
if (unlikely(!dept_working()))
return;
+ timeout = timeoutval > 0 && timeoutval < MAX_SCHEDULE_TIMEOUT;
+
+#if !defined(CONFIG_DEPT_AGGRESSIVE_TIMEOUT_WAIT)
+ if (timeout)
+ return;
+#endif
+
if (m && m->nocheck)
return;
@@ -2434,6 +2478,7 @@ void dept_stage_wait(struct dept_map *m, struct dept_key *k,
dt->stage_w_fn = w_fn;
dt->stage_ip = ip;
+ dt->stage_timeout = timeout;
arch_spin_unlock(&dt->stage_lock);
exit:
dept_exit_recursive(flags);
@@ -2447,6 +2492,7 @@ static void __dept_clean_stage(struct dept_task *dt)
dt->stage_sched_map = false;
dt->stage_w_fn = NULL;
dt->stage_ip = 0UL;
+ dt->stage_timeout = false;
}
void dept_clean_stage(void)
@@ -2479,6 +2525,7 @@ void dept_request_event_wait_commit(void)
unsigned long ip;
const char *w_fn;
bool sched_map;
+ bool timeout;
if (unlikely(!dept_working()))
return;
@@ -2505,12 +2552,13 @@ void dept_request_event_wait_commit(void)
w_fn = dt->stage_w_fn;
ip = dt->stage_ip;
sched_map = dt->stage_sched_map;
+ timeout = dt->stage_timeout;
wg = next_wgen();
WRITE_ONCE(dt->stage_m.wgen, wg);
arch_spin_unlock(&dt->stage_lock);
- __dept_wait(&dt->stage_m, 1UL, ip, w_fn, 0, true, sched_map);
+ __dept_wait(&dt->stage_m, 1UL, ip, w_fn, 0, true, sched_map, timeout);
exit:
dept_exit(flags);
}
diff --git a/kernel/dependency/dept_internal.h b/kernel/dependency/dept_internal.h
index 4c4d7bacec15..aa1a588805b3 100644
--- a/kernel/dependency/dept_internal.h
+++ b/kernel/dependency/dept_internal.h
@@ -238,6 +238,11 @@ struct dept_wait {
* whether this wait is for commit in scheduler
*/
bool sched_sleep;
+
+ /*
+ * whether a timeout is set
+ */
+ bool timeout;
};
};
};
diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug
index 712514e2c149..540583425d8e 100644
--- a/lib/Kconfig.debug
+++ b/lib/Kconfig.debug
@@ -1394,6 +1394,16 @@ config DEPT
noting, to mitigate the impact by the false positives, multi
reporting has been supported.
+config DEPT_AGGRESSIVE_TIMEOUT_WAIT
+ bool "Aggressively track even timeout waits"
+ depends on DEPT
+ default n
+ help
+ Timeout wait doesn't contribute to a deadlock. However,
+ informing a circular dependency might be helpful for cases
+ that timeout is used to avoid a deadlock. Say N if you'd like
+ to avoid verbose reports.
+
config LOCK_DEBUGGING_SUPPORT
bool
depends on TRACE_IRQFLAGS_SUPPORT && STACKTRACE_SUPPORT && LOCKDEP_SUPPORT
--
2.17.1
next prev parent reply other threads:[~2025-12-05 7:20 UTC|newest]
Thread overview: 45+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-12-05 7:18 [PATCH v18 00/42] DEPT(DEPendency Tracker) Byungchul Park
2025-12-05 7:18 ` [PATCH v18 01/42] dept: implement " Byungchul Park
2025-12-05 7:18 ` [PATCH v18 02/42] dept: add single event dependency tracker APIs Byungchul Park
2025-12-05 7:18 ` [PATCH v18 03/42] dept: add lock " Byungchul Park
2025-12-05 7:18 ` [PATCH v18 04/42] dept: tie to lockdep and IRQ tracing Byungchul Park
2025-12-05 7:18 ` [PATCH v18 05/42] dept: add proc knobs to show stats and dependency graph Byungchul Park
2025-12-05 7:18 ` [PATCH v18 06/42] dept: distinguish each kernel context from another Byungchul Park
2025-12-05 7:18 ` [PATCH v18 07/42] dept: distinguish each work " Byungchul Park
2025-12-05 7:18 ` [PATCH v18 08/42] dept: add a mechanism to refill the internal memory pools on running out Byungchul Park
2025-12-05 7:18 ` [PATCH v18 09/42] dept: record the latest one out of consecutive waits of the same class Byungchul Park
2025-12-05 7:18 ` [PATCH v18 10/42] dept: apply sdt_might_sleep_{start,end}() to wait_for_completion()/complete() Byungchul Park
2025-12-05 7:18 ` [PATCH v18 11/42] dept: apply sdt_might_sleep_{start,end}() to swait Byungchul Park
2025-12-05 7:18 ` [PATCH v18 12/42] dept: apply sdt_might_sleep_{start,end}() to waitqueue wait Byungchul Park
2025-12-05 7:18 ` [PATCH v18 13/42] dept: apply sdt_might_sleep_{start,end}() to hashed-waitqueue wait Byungchul Park
2025-12-05 7:18 ` [PATCH v18 14/42] dept: apply sdt_might_sleep_{start,end}() to dma fence Byungchul Park
2025-12-05 7:18 ` Byungchul Park [this message]
2025-12-05 7:18 ` [PATCH v18 16/42] dept: apply timeout consideration to wait_for_completion()/complete() Byungchul Park
2025-12-05 7:18 ` [PATCH v18 17/42] dept: apply timeout consideration to swait Byungchul Park
2025-12-05 7:18 ` [PATCH v18 18/42] dept: apply timeout consideration to waitqueue wait Byungchul Park
2025-12-05 7:18 ` [PATCH v18 19/42] dept: apply timeout consideration to hashed-waitqueue wait Byungchul Park
2025-12-05 7:18 ` [PATCH v18 20/42] dept: apply timeout consideration to dma fence wait Byungchul Park
2025-12-05 7:18 ` [PATCH v18 21/42] dept: make dept able to work with an external wgen Byungchul Park
2025-12-05 7:18 ` [PATCH v18 22/42] dept: track PG_locked with dept Byungchul Park
2025-12-05 7:18 ` [PATCH v18 23/42] dept: print staged wait's stacktrace on report Byungchul Park
2025-12-05 7:18 ` [PATCH v18 24/42] locking/lockdep: prevent various lockdep assertions when lockdep_off()'ed Byungchul Park
2025-12-05 7:18 ` [PATCH v18 25/42] dept: add documents for dept Byungchul Park
2025-12-06 0:25 ` Bagas Sanjaya
2025-12-05 7:18 ` [PATCH v18 26/42] cpu/hotplug: use a weaker annotation in AP thread Byungchul Park
2025-12-05 7:18 ` [PATCH v18 27/42] dept: assign dept map to mmu notifier invalidation synchronization Byungchul Park
2025-12-05 7:18 ` [PATCH v18 28/42] dept: assign unique dept_key to each distinct dma fence caller Byungchul Park
2025-12-05 7:18 ` [PATCH v18 29/42] dept: make dept aware of lockdep_set_lock_cmp_fn() annotation Byungchul Park
2025-12-05 7:18 ` [PATCH v18 30/42] dept: make dept stop from working on debug_locks_off() Byungchul Park
2025-12-05 7:18 ` [PATCH v18 31/42] dept: assign unique dept_key to each distinct wait_for_completion() caller Byungchul Park
2025-12-05 7:18 ` [PATCH v18 32/42] completion, dept: introduce init_completion_dmap() API Byungchul Park
2025-12-05 7:18 ` [PATCH v18 33/42] dept: introduce a new type of dependency tracking between multi event sites Byungchul Park
2025-12-05 7:18 ` [PATCH v18 34/42] dept: add module support for struct dept_event_site and dept_event_site_dep Byungchul Park
2025-12-05 7:18 ` [PATCH v18 35/42] dept: introduce event_site() to disable event tracking if it's recoverable Byungchul Park
2025-12-05 7:18 ` [PATCH v18 36/42] dept: implement a basic unit test for dept Byungchul Park
2025-12-05 7:18 ` [PATCH v18 37/42] dept: call dept_hardirqs_off() in local_irq_*() regardless of irq state Byungchul Park
2025-12-05 7:18 ` [PATCH v18 38/42] rcu/update: fix same dept key collision between various types of RCU Byungchul Park
2025-12-05 7:18 ` [PATCH v18 39/42] dept: introduce APIs to set page usage and use subclasses_evt for the usage Byungchul Park
2025-12-05 7:18 ` [PATCH v18 40/42] dept: track PG_writeback with dept Byungchul Park
2025-12-05 7:18 ` [PATCH v18 41/42] SUNRPC: relocate struct rcu_head to the first field of struct rpc_xprt Byungchul Park
2025-12-05 9:27 ` Jeff Layton
2025-12-05 7:18 ` [PATCH v18 42/42] mm: percpu: increase PERCPU_DYNAMIC_SIZE_SHIFT on DEPT and large PAGE_SIZE Byungchul Park
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=20251205071855.72743-16-byungchul@sk.com \
--to=byungchul@sk.com \
--cc=2407018371@qq.com \
--cc=Dai.Ngo@oracle.com \
--cc=Liam.Howlett@oracle.com \
--cc=a.hindborg@kernel.org \
--cc=ada.coupriediaz@arm.com \
--cc=adilger.kernel@dilger.ca \
--cc=akpm@linux-foundation.org \
--cc=alex.gaynor@gmail.com \
--cc=alexander.shishkin@linux.intel.com \
--cc=aliceryhl@google.com \
--cc=amir73il@gmail.com \
--cc=andi.shyti@kernel.org \
--cc=andrii@kernel.org \
--cc=anna@kernel.org \
--cc=arnd@arndb.de \
--cc=ast@kernel.org \
--cc=bagasdotme@gmail.com \
--cc=baolin.wang@linux.alibaba.com \
--cc=bigeasy@linutronix.de \
--cc=bjorn3_gh@protonmail.com \
--cc=boqun.feng@gmail.com \
--cc=bp@alien8.de \
--cc=brauner@kernel.org \
--cc=broonie@kernel.org \
--cc=bsegall@google.com \
--cc=catalin.marinas@arm.com \
--cc=chenhuacai@kernel.org \
--cc=chris.p.wilson@intel.com \
--cc=christian.koenig@amd.com \
--cc=chuck.lever@oracle.com \
--cc=cl@linux.com \
--cc=clrkwllms@kernel.org \
--cc=corbet@lwn.net \
--cc=da.gomez@kernel.org \
--cc=dakr@kernel.org \
--cc=damien.lemoal@opensource.wdc.com \
--cc=dan.j.williams@intel.com \
--cc=daniel.vetter@ffwll.ch \
--cc=dave.hansen@intel.com \
--cc=david@fromorbit.com \
--cc=dennis@kernel.org \
--cc=dietmar.eggemann@arm.com \
--cc=djwong@kernel.org \
--cc=dri-devel@lists.freedesktop.org \
--cc=duyuyang@gmail.com \
--cc=dwmw@amazon.co.uk \
--cc=francesco@valla.it \
--cc=frederic@kernel.org \
--cc=gary@garyguo.net \
--cc=geert+renesas@glider.be \
--cc=geert@linux-m68k.org \
--cc=gregkh@linuxfoundation.org \
--cc=guoweikang.kernel@gmail.com \
--cc=gustavo@padovan.org \
--cc=gwan-gyeong.mun@intel.com \
--cc=hamohammed.sa@gmail.com \
--cc=hannes@cmpxchg.org \
--cc=harry.yoo@oracle.com \
--cc=hch@infradead.org \
--cc=her0gyugyu@gmail.com \
--cc=hpa@zytor.com \
--cc=jack@suse.cz \
--cc=jglisse@redhat.com \
--cc=jiangshanlai@gmail.com \
--cc=jlayton@kernel.org \
--cc=joel.granados@kernel.org \
--cc=joel@joelfernandes.org \
--cc=joelagnelf@nvidia.com \
--cc=johannes.berg@intel.com \
--cc=josef@toxicpanda.com \
--cc=josh@joshtriplett.org \
--cc=jpoimboe@kernel.org \
--cc=juri.lelli@redhat.com \
--cc=kees@kernel.org \
--cc=kernel-team@lge.com \
--cc=kernel_team@skhynix.com \
--cc=kevin.brodsky@arm.com \
--cc=kristina.martsenko@arm.com \
--cc=lillian@star-ark.net \
--cc=linaro-mm-sig@lists.linaro.org \
--cc=link@vivo.com \
--cc=linux-arch@vger.kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-block@vger.kernel.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-ext4@vger.kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-i2c@vger.kernel.org \
--cc=linux-ide@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-media@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=linux-modules@vger.kernel.org \
--cc=linux-nfs@vger.kernel.org \
--cc=linux-rt-devel@lists.linux.dev \
--cc=linux@treblig.org \
--cc=longman@redhat.com \
--cc=lorenzo.stoakes@oracle.com \
--cc=lossin@kernel.org \
--cc=luto@kernel.org \
--cc=mark.rutland@arm.com \
--cc=masahiroy@kernel.org \
--cc=mathieu.desnoyers@efficios.com \
--cc=matthew.brost@intel.com \
--cc=max.byungchul.park@gmail.com \
--cc=mcgrof@kernel.org \
--cc=melissa.srw@gmail.com \
--cc=mgorman@suse.de \
--cc=mhocko@kernel.org \
--cc=miguel.ojeda.sandonis@gmail.com \
--cc=minchan@kernel.org \
--cc=mingo@redhat.com \
--cc=mjguzik@gmail.com \
--cc=neeraj.upadhyay@kernel.org \
--cc=neil@brown.name \
--cc=neilb@ownmail.net \
--cc=netdev@vger.kernel.org \
--cc=ngupta@vflare.org \
--cc=ojeda@kernel.org \
--cc=okorniev@redhat.com \
--cc=oleg@redhat.com \
--cc=paulmck@kernel.org \
--cc=penberg@kernel.org \
--cc=peterz@infradead.org \
--cc=petr.pavlu@suse.com \
--cc=qiang.zhang@linux.dev \
--cc=rcu@vger.kernel.org \
--cc=richard.weiyang@gmail.com \
--cc=rientjes@google.com \
--cc=rodrigosiqueiramelo@gmail.com \
--cc=rostedt@goodmis.org \
--cc=rppt@kernel.org \
--cc=rust-for-linux@vger.kernel.org \
--cc=samitolvanen@google.com \
--cc=sashal@kernel.org \
--cc=shakeel.butt@linux.dev \
--cc=sj@kernel.org \
--cc=sumit.semwal@linaro.org \
--cc=surenb@google.com \
--cc=tglx@linutronix.de \
--cc=thomas.weissschuh@linutronix.de \
--cc=tim.c.chen@linux.intel.com \
--cc=tj@kernel.org \
--cc=tmgross@umich.edu \
--cc=tom@talpey.com \
--cc=torvalds@linux-foundation.org \
--cc=trondmy@kernel.org \
--cc=tytso@mit.edu \
--cc=urezki@gmail.com \
--cc=usamaarif642@gmail.com \
--cc=vbabka@suse.cz \
--cc=vdavydov.dev@gmail.com \
--cc=vincent.guittot@linaro.org \
--cc=vschneid@redhat.com \
--cc=wangfushuai@baidu.com \
--cc=wangkefeng.wang@huawei.com \
--cc=will@kernel.org \
--cc=willy@infradead.org \
--cc=wsa+renesas@sang-engineering.com \
--cc=x86@kernel.org \
--cc=yeoreum.yun@arm.com \
--cc=ysk@kzalloc.com \
--cc=yunseong.kim@ericsson.com \
--cc=yuzhao@google.com \
--cc=ziy@nvidia.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox