git: 648fa3558c16 - main - amd64: Initialize IPI scoreboard earlier
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Wed, 28 Sep 2022 13:23:57 UTC
The branch main has been updated by kib:
URL: https://cgit.FreeBSD.org/src/commit/?id=648fa3558c161a1d8564626d21047710c3fbfdf6
commit 648fa3558c161a1d8564626d21047710c3fbfdf6
Author: Konstantin Belousov <kib@FreeBSD.org>
AuthorDate: 2021-12-17 04:28:11 +0000
Commit: Konstantin Belousov <kib@FreeBSD.org>
CommitDate: 2022-09-28 13:23:52 +0000
amd64: Initialize IPI scoreboard earlier
Scoreboard is needed a moment when smp_started == true. If some kernel
daemon thread is started before scoreboard is inited, and does some pmap
operation that requires TLB maintanence, which races with SMP startup,
we might dereference NULL invl_scoreboard. This is particularly easy
to trigger when EARLY_AP_STARTUP is not defined.
Reported by: glebius
Reviewed by: markj
Sponsored by: The FreeBSD Foundation
MFC after: 1 week
Differential revision: https://reviews.freebsd.org/D36766
---
sys/amd64/amd64/mp_machdep.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/sys/amd64/amd64/mp_machdep.c b/sys/amd64/amd64/mp_machdep.c
index e5114b93328e..3356726b24de 100644
--- a/sys/amd64/amd64/mp_machdep.c
+++ b/sys/amd64/amd64/mp_machdep.c
@@ -579,7 +579,7 @@ invl_scoreboard_init(void *arg __unused)
invl_op_pg = INVL_OP_PG;
}
}
-SYSINIT(invl_ops, SI_SUB_SMP, SI_ORDER_FIRST, invl_scoreboard_init, NULL);
+SYSINIT(invl_ops, SI_SUB_SMP - 1, SI_ORDER_ANY, invl_scoreboard_init, NULL);
static uint32_t *
invl_scoreboard_getcpu(u_int cpu)