aboutsummaryrefslogtreecommitdiff
path: root/sys/ddb/db_command.c
diff options
context:
space:
mode:
authorAlex Richardson <arichardson@FreeBSD.org>2021-02-18 10:25:10 +0000
committerAlex Richardson <arichardson@FreeBSD.org>2021-02-18 14:02:48 +0000
commitfa2528ac643519072c498b483d0dcc1fa5d99bc1 (patch)
tree255d2d54811e94f63b72fe40c4a88b4f11978e9f /sys/ddb/db_command.c
parentdf093aa9463b2121d8307fb91c4ba7cf17f4ea64 (diff)
downloadsrc-fa2528ac643519072c498b483d0dcc1fa5d99bc1.tar.gz
src-fa2528ac643519072c498b483d0dcc1fa5d99bc1.zip
Use atomic loads/stores when updating td->td_state
KCSAN complains about racy accesses in the locking code. Those races are fine since they are inside a TD_SET_RUNNING() loop that expects the value to be changed by another CPU. Use relaxed atomic stores/loads to indicate that this variable can be written/read by multiple CPUs at the same time. This will also prevent the compiler from doing unexpected re-ordering. Reported by: GENERIC-KCSAN Test Plan: KCSAN no longer complains, kernel still runs fine. Reviewed By: markj, mjg (earlier version) Differential Revision: https://reviews.freebsd.org/D28569
Diffstat (limited to 'sys/ddb/db_command.c')
-rw-r--r--sys/ddb/db_command.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/sys/ddb/db_command.c b/sys/ddb/db_command.c
index 21ff75f78e6a..fedec1dd33a4 100644
--- a/sys/ddb/db_command.c
+++ b/sys/ddb/db_command.c
@@ -854,7 +854,7 @@ _db_stack_trace_all(bool active_only)
for (td = kdb_thr_first(); td != NULL; td = kdb_thr_next(td)) {
prev_jb = kdb_jmpbuf(jb);
if (setjmp(jb) == 0) {
- if (td->td_state == TDS_RUNNING)
+ if (TD_IS_RUNNING(td))
db_printf("\nTracing command %s pid %d"
" tid %ld td %p (CPU %d)\n",
td->td_proc->p_comm, td->td_proc->p_pid,