From nobody Mon Jan 19 16:20:46 2026 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4dvwg32sYsz6P1fk for ; Mon, 19 Jan 2026 16:20:47 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R13" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4dvwg26tVfz3y0W for ; Mon, 19 Jan 2026 16:20:46 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1768839647; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=t+TYdzAe4vYqr32nLq7Omu1VfZU+M3itrsXbLOQaifw=; b=K1dolN5Y+7YKOlnay2Y5nDe/N1jOzrol+BmEu43/Pvkh/pGR+9p+oR0rkjebG/0V7mRzHd dnSpXhjr303NJaa7MXizuYivjFsc9OLsr7HutypFGfLhb3NfITCYe9fKxw+1cCHasApZVX lInI4nORE/QPpI4QPdHy73MkiExqcoMe4w/uz15a9nHTQe7rf6BL2vK0JqCH0tQMUesGuD oCykJgFzhsWCDMidmZFg10LME0tqS7UlWVgN3YHUSCAkvSXpcLg6swgVsRGVmvmtW37dKz m7mXJgodmrfc78oegvXl02+eeFx82odI/0n5+/JuOUIGQgL5mVqu3X+DKFnXfA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1768839647; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=t+TYdzAe4vYqr32nLq7Omu1VfZU+M3itrsXbLOQaifw=; b=ZXkK+UJ6EW1mNbHCEqX7mpcu5fmpKKigt/xw5iySgRh7pWiSj5qqJG9j9b+5VfCPJZjcw7 DoIkCWJd+o+y0Ek97BmGtEiYHZuF+wUQ/qSjQmS8ANXNASWliktWd5RATL9+bDlJK33YUz 4qgQe4EJ/wtB1S/PLMu5BpoeAQifGaqItvdWu9QeYhnKYsNK+VnEgND6JOIJrcHrFfh+Ep FGf1BpAbvBOoiRIc7dIAl3oRDUEQGSRV6VQC3yOP2ILMhWf8OSS5yvjr1eb614zCm36cun JShMJWjP8U7cPX0DfRQLLw9nLGm7qjryUOjo8PFjNlC3q0WsplH0G0TSu4JURw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1768839647; a=rsa-sha256; cv=none; b=EEta3w0nzdLLoO6jAabfN6+hDyB5fetv4p2Z8yNjNNR1nseQRE9tLeu733xE8U7zfugaHA O6V/vZRx0ednSyZ1r5KUHkA9/5UA/W6DuNZYmMzZ1AAmpDco0zm37QYHT9iLSdB2JFDCYG jZakkBptEMzBWE3CsgPViaQo42F3S6rRcjNxKT+IX4RvwZzsZVJMoN5EYr3dGQYMiAgeFb 7L9KJhCdH/jiCPciNtYl9BCh1wd5ZASATS6OpTEpAQRaQVGV7+kG7En4wD9Ymp7JxtCwrq JqKxLvJiejB5cyM1LNjW9c6+Gw3JefclPdDnFqmlkjYwFf+/jVIOq2V9PbniRg== ARC-Authentication-Results: i=1; mx1.freebsd.org; none Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4dvwg264LPzg09 for ; Mon, 19 Jan 2026 16:20:46 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 34332 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 19 Jan 2026 16:20:46 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Konstantin Belousov Subject: git: 83d988288675 - main - sys: do not allow entering vm_fault() on boot until VM is initialized List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: kib X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 83d98828867591b5d842573ed6edcec7392f82df Auto-Submitted: auto-generated Date: Mon, 19 Jan 2026 16:20:46 +0000 Message-Id: <696e59de.34332.c043f54@gitrepo.freebsd.org> The branch main has been updated by kib: URL: https://cgit.FreeBSD.org/src/commit/?id=83d98828867591b5d842573ed6edcec7392f82df commit 83d98828867591b5d842573ed6edcec7392f82df Author: Konstantin Belousov AuthorDate: 2026-01-18 21:14:59 +0000 Commit: Konstantin Belousov CommitDate: 2026-01-19 16:20:36 +0000 sys: do not allow entering vm_fault() on boot until VM is initialized On amd64, a hack sets td_critnest to 1 in hammer_time(), and then clear it before returning from hammer_time(), which is too early. Instead, set TDP_NOFAULTING for thread0, and clear the flag after vm_init() finished. Noted by: adrian Reviewed by: adrian (previous version), markj Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D54768 --- sys/amd64/amd64/machdep.c | 5 +---- sys/kern/init_main.c | 12 +++++++++++- sys/vm/vm_init.c | 8 ++++++++ 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/sys/amd64/amd64/machdep.c b/sys/amd64/amd64/machdep.c index 2fce1a7e64b6..cae58181000f 100644 --- a/sys/amd64/amd64/machdep.c +++ b/sys/amd64/amd64/machdep.c @@ -1518,13 +1518,11 @@ hammer_time(u_int64_t modulep, u_int64_t physfree) /* * We initialize the PCB pointer early so that exception - * handlers will work. Also set up td_critnest to short-cut - * the page fault handler. + * handlers will work. */ cpu_max_ext_state_size = sizeof(struct savefpu); set_top_of_stack_td(&thread0); thread0.td_pcb = get_pcb_td(&thread0); - thread0.td_critnest = 1; /* * The console and kdb should be initialized even earlier than here, @@ -1615,7 +1613,6 @@ hammer_time(u_int64_t modulep, u_int64_t physfree) #ifdef FDT x86_init_fdt(); #endif - thread0.td_critnest = 0; kasan_init(); kmsan_init(); diff --git a/sys/kern/init_main.c b/sys/kern/init_main.c index 4144297d674c..39357b8d4440 100644 --- a/sys/kern/init_main.c +++ b/sys/kern/init_main.c @@ -104,7 +104,17 @@ void mi_startup(void); /* Should be elsewhere */ static struct session session0; static struct pgrp pgrp0; struct proc proc0; -struct thread0_storage thread0_st __aligned(32); +struct thread0_storage thread0_st __aligned(32) = { + .t0st_thread = { + /* + * thread0.td_pflags is set with TDP_NOFAULTING to + * short-cut the vm page fault handler until it is + * ready. It is cleared in vm_init() after VM + * initialization. + */ + .td_pflags = TDP_NOFAULTING, + }, +}; struct vmspace vmspace0; struct proc *initproc; diff --git a/sys/vm/vm_init.c b/sys/vm/vm_init.c index a0d3651ba266..2764b438d27b 100644 --- a/sys/vm/vm_init.c +++ b/sys/vm/vm_init.c @@ -159,6 +159,14 @@ vm_mem_init(void *dummy) pmap_init(); vm_pager_init(); + /* + * Now we can properly handle calls into vm_fault() from + * kernel page faults during initialization, typically to + * panic. Clear the nofaulting flag set for thread0 in the + * image, see kern/init_main.c + */ + curthread->td_pflags &= ~TDP_NOFAULTING; + #ifdef INVARIANTS vm_check_pagesizes(); #endif