git: 02d90458669d - main - tslog: Handle curthread equal to NULL
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Sun, 04 Jun 2023 17:17:56 UTC
The branch main has been updated by cperciva:
URL: https://cgit.FreeBSD.org/src/commit/?id=02d90458669d6f8063ef32e35069e9246f487b37
commit 02d90458669d6f8063ef32e35069e9246f487b37
Author: Colin Percival <cperciva@FreeBSD.org>
AuthorDate: 2023-05-21 20:03:33 +0000
Commit: Colin Percival <cperciva@FreeBSD.org>
CommitDate: 2023-06-04 17:16:22 +0000
tslog: Handle curthread equal to NULL
Early in the kernel boot, curthread goes through three stages:
1. Kernel crash when you try to access it, because PCPU doesn't exist.
2. NULL, because PCU exists but isn't initialized.
3. &thread0, which is where most of the kernel boot process runs.
This broke TSLOG from inside hammer_time since the scripts which parse
logged records didn't understand that NULL meant &thread0.
Tell tslog to record &thread0 as the active thread if passed NULL.
Sponsored by: https://www.patreon.com/cperciva
Differential Revision: https://reviews.freebsd.org/D40324
---
sys/kern/kern_tslog.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/sys/kern/kern_tslog.c b/sys/kern/kern_tslog.c
index 5eba7719880d..3629f7d88a93 100644
--- a/sys/kern/kern_tslog.c
+++ b/sys/kern/kern_tslog.c
@@ -59,6 +59,10 @@ tslog(void * td, int type, const char * f, const char * s)
uint64_t tsc = get_cyclecount();
long pos;
+ /* A NULL thread is thread0 before curthread is set. */
+ if (td == NULL)
+ td = &thread0;
+
/* Grab a slot. */
pos = atomic_fetchadd_long(&nrecs, 1);