From nobody Mon Oct 20 18:02:47 2025 X-Original-To: dev-commits-src-branches@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 4cr3Dm1XxZz6Crml; Mon, 20 Oct 2025 18:02:48 +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 "R12" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4cr3Dm15KGz3yng; Mon, 20 Oct 2025 18:02:48 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1760983368; 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=wykpQYwGumJL0xr4j2C2WTn6R8sJLAQmL6D8oaHQLY4=; b=TW5wHXjvuaso8q5sT1do6cV71/SmpiIOmhyrRs4dkQNsn2bW5MYEThB8aVfffxuMHn4wXY /p6CosQSfv1fmAAIjMnNl1KqhzVYhUkU7qpD5er7p9UsnoIm5dHmR3RHlVsyo1U0Bt8QTZ XL0bGoW/JX6oKKpuRmw1+PO4gy6LHUHuetKOo/1wDlgdL4KCMKwta4M+xS+aDspAmAI9n4 3vkWNaEUWqfyG6YrSV9n1GRp1/AXtSNjDRkCUgNqZMW+3bYgwqq6fsJI03OdesP1wAnXHB wpSX6ivFtdoKq+d2pmh/+7ywTKRSOD/Plw/9eUjmI9cubN2OfVQ8940C3rZNmA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1760983368; 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=wykpQYwGumJL0xr4j2C2WTn6R8sJLAQmL6D8oaHQLY4=; b=h2BCpSKvKUWekh+CcX2Zq48pgAKGe++evoJ04FkyI1St1Bv6OEGfWJFhyq6ug0UDPyxyW2 gN3qC3OzYZZ/h3kobC5zXUKo0yMoV+qjKPBLIDDf3v1YULDhvkQ0CDHfEgQfwZkIYuBrKj M+4w2G1fodoNRmGraCL4ZaEfHKSfT2z7kncwn/CE1cE6Q5FIyDLjLciLN71xU2lrm61sj9 pVgqmuVVGfrYwpyHo8cvrRXsJV9EV8wCMi/XMnaudUq2fELFFhtNKdbVs6Fw+u6S/webbK sR4HBds+OKsOJMd+12fNy8qyEeLiPTcj0r6ipFk6gpfr1dsHOALRvpDPGeBHOQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1760983368; a=rsa-sha256; cv=none; b=FhJVTNYt9AvURQcE1Gk2F8FC4rv7oNUbzABdpHteR8XwsGG1GRFIN8ozIAq4QpqsO3URP9 Wd47R5OGxVl5qyowVtfnuhFS7hp3tusXqklitscXQ2LdQYV0foBcwIbpM6PXWDSqMDxzhB WH+kT4Tg3eHsQsSn4jJg7QpFB56w0Zj+DTHkKlJweWzbsf8qahQCQHV/RiOZbuHUyf/xRs ra0OsALyQdDHnvbyD7ssc5sqLJnakkXVfk4ULjzUwmtH9IOcHcqx77/9bKYKf9RkI9MMlZ mot3buVfFAjWJOpB1VruGBo8nSWpi5l5gFH7vVp5rIEgbaw3LLWZXwd4ixkjRg== ARC-Authentication-Results: i=1; mx1.freebsd.org; none Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (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 did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4cr3Dm0fsfz8Gx; Mon, 20 Oct 2025 18:02:48 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.18.1/8.18.1) with ESMTP id 59KI2lDZ049980; Mon, 20 Oct 2025 18:02:47 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 59KI2leY049977; Mon, 20 Oct 2025 18:02:47 GMT (envelope-from git) Date: Mon, 20 Oct 2025 18:02:47 GMT Message-Id: <202510201802.59KI2leY049977@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Colin Percival Subject: git: 9554bb1249d8 - releng/15.0 - vm: Fix iterator usage in vm_thread_stack_create() List-Id: Commits to the stable branches of the FreeBSD src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-branches@freebsd.org Sender: owner-dev-commits-src-branches@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: cperciva X-Git-Repository: src X-Git-Refname: refs/heads/releng/15.0 X-Git-Reftype: branch X-Git-Commit: 9554bb1249d830a731fb941cd052ab24653a6938 Auto-Submitted: auto-generated The branch releng/15.0 has been updated by cperciva: URL: https://cgit.FreeBSD.org/src/commit/?id=9554bb1249d830a731fb941cd052ab24653a6938 commit 9554bb1249d830a731fb941cd052ab24653a6938 Author: Mark Johnston AuthorDate: 2025-10-16 23:12:54 +0000 Commit: Colin Percival CommitDate: 2025-10-20 18:02:26 +0000 vm: Fix iterator usage in vm_thread_stack_create() After commit 7a79d0669761 we no longer hold the VM object lock when initializing or advancing the domainset iterator in vm_thread_stack_create(). We could lift the lock out of vm_thread_stack_back() but that poses complications since we cannot allocate KVA with a VM object lock held. Instead of overridding the object's iterator, just borrow that of the current thread. Kernel stacks are basically always allocated with a DOMAINSET_POLICY_PREFER policy, so it's not very important to maintain a global iterator for round-robin allocation. As a part of this, fix up flag handling: make sure we handle M_NOWAIT/M_WAITOK from the caller. Delete a comment in vm_thread_new() which refers to a non-existent consideration (stack swapping has been removed). I suspect vm_thread_new() can use M_WAITOK but opted not to make that change here. Approved by: re (cperciva) Reported by: olce Reviewed by: olce, alc, kib Fixes: 7a79d0669761 ("vm: improve kstack_object pindex calculation to avoid pindex holes") MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D52982 (cherry picked from commit 3b9b64457676561b8de2bec7c94c561bbd807b0c) (cherry picked from commit 511311e4f7a6220234bc5bced1e8e0fae96d02a6) --- sys/vm/vm_glue.c | 24 ++++++++---------------- 1 file changed, 8 insertions(+), 16 deletions(-) diff --git a/sys/vm/vm_glue.c b/sys/vm/vm_glue.c index e0f1807a1b32..18d789c59281 100644 --- a/sys/vm/vm_glue.c +++ b/sys/vm/vm_glue.c @@ -441,19 +441,16 @@ vm_thread_kstack_arena_release(void *arena, vmem_addr_t addr, vmem_size_t size) * Create the kernel stack for a new thread. */ static vm_offset_t -vm_thread_stack_create(struct domainset *ds, int pages) +vm_thread_stack_create(struct domainset *ds, int pages, int flags) { vm_page_t ma[KSTACK_MAX_PAGES]; struct vm_domainset_iter di; - int req = VM_ALLOC_NORMAL; - vm_object_t obj; + int req; vm_offset_t ks; int domain, i; - obj = vm_thread_kstack_size_to_obj(pages); - if (vm_ndomains > 1) - obj->domain.dr_policy = ds; - vm_domainset_iter_page_init(&di, obj, 0, &domain, &req); + vm_domainset_iter_policy_init(&di, ds, &domain, &flags); + req = malloc2vm_flags(flags); do { /* * Get a kernel virtual address for this thread's kstack. @@ -480,7 +477,7 @@ vm_thread_stack_create(struct domainset *ds, int pages) vm_page_valid(ma[i]); pmap_qenter(ks, ma, pages); return (ks); - } while (vm_domainset_iter_page(&di, obj, &domain, NULL) == 0); + } while (vm_domainset_iter_policy(&di, &domain) == 0); return (0); } @@ -532,15 +529,9 @@ vm_thread_new(struct thread *td, int pages) ks = 0; if (pages == kstack_pages && kstack_cache != NULL) ks = (vm_offset_t)uma_zalloc(kstack_cache, M_NOWAIT); - - /* - * Ensure that kstack objects can draw pages from any memory - * domain. Otherwise a local memory shortage can block a process - * swap-in. - */ if (ks == 0) ks = vm_thread_stack_create(DOMAINSET_PREF(PCPU_GET(domain)), - pages); + pages, M_NOWAIT); if (ks == 0) return (0); @@ -660,7 +651,8 @@ kstack_import(void *arg, void **store, int cnt, int domain, int flags) ds = DOMAINSET_PREF(domain); for (i = 0; i < cnt; i++) { - store[i] = (void *)vm_thread_stack_create(ds, kstack_pages); + store[i] = (void *)vm_thread_stack_create(ds, kstack_pages, + flags); if (store[i] == NULL) break; }