From nobody Tue Apr 22 16:09:44 2025 X-Original-To: dev-commits-src-main@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 4ZhnHs21q3z5sqHQ; Tue, 22 Apr 2025 16:09:45 +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 "R10" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4ZhnHs0SPkz3nH0; Tue, 22 Apr 2025 16:09:45 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1745338185; 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=V3Tymf/8VeB2NzdSADkYUpDIM/q6/PQ9XPsr1aaY5u0=; b=cKICLC4fVn3zQeGb2nC92LS7IT6Oo3VBnM+tYqpwNBcQkmI0do/CTJuqqEHXHebvDqNyJ/ SgqzTem7yf9Hb0+8X4pbYhlCEwTEv4M162OjN3qu4gYfqOGAI+fmcQ+LVjP23qPlObHrnG y25jNIPRRQ1aRyOfo3pmoDI5qdCWJNffu3FU2xR+P4gTd2pkajyGAHujF9euOV0lbnOi0V tyztgyEV1lAZUPkknfEbUWSLt35XrVhcEL1/fRIemaCGw8iUV1efxjTa1zdjyKKj9Eg6j8 Glw8lEYk6cTjp/ZgZZgqiYKEKcTqf7TX4K85HFVRFDOVjnMrp59M0cnWqR3uhQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1745338185; a=rsa-sha256; cv=none; b=IppSvpP4gauV2Pq7txZaW7rCPqU1ZmtSNTwPoVaIYynTHIIGTxzRGHgBAjLoQi151VC++p wYclpIu0W3e/4Ww5tc7v1Xk85Zf7K74NQ7Sfq1Evv+rrCYxE07ukodouY8XkAn4YJJqKnL SPIyKy76P9QJlDCsY6DZ34dULsU+wmdRmPydKd8MbwXv8zpbgfQIof4Y2b2e/5pRGqxKTl fC8IbA4KPhd2AiscaHtUy+mURIlGrLSz3BRbOLZDh384791rqcCpmI1q3sFgBIiuuZ9pMZ g3hKcjq+U3YGNp3ixgLR42dL6VwNXYAXWEWqYbQJ85GDJ1W5EIzDVfW8zMZO9Q== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1745338185; 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=V3Tymf/8VeB2NzdSADkYUpDIM/q6/PQ9XPsr1aaY5u0=; b=PATX+ivvQQuD1SvM5ptGfZuJ07ZlgRj2/zNvHdmRz9CX95dNWR9N4GZLzzj8nXagxnDwj4 Vj3R6hUGsrph33O+JJA0Vu3rEBDNkKGe0ExqFVk8CcKGEiPwexXCog9zaxwwZ0NzWds7uJ f4xLqqwPyKyLY0me7gBx+Nr4jPQv5tWETxul7ikCG6p39AVXXx09FwH1X0Mk09PdieSRzt ARvPvUJiEZLHMzjpvxOmmJ7rvUXDPlK2SrEtuDdxjN69uHN4VM/6+v3atT3Y/5ihvCUzI6 8u2vE/HMvv6np/x0C79wrh8g27xqXhY2/R6jRWeBzcSVaEm+3AlME5nRCalOIA== 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 4ZhnHs047Rz9Mh; Tue, 22 Apr 2025 16:09:45 +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 53MG9iUH051278; Tue, 22 Apr 2025 16:09:44 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 53MG9iga051275; Tue, 22 Apr 2025 16:09:44 GMT (envelope-from git) Date: Tue, 22 Apr 2025 16:09:44 GMT Message-Id: <202504221609.53MG9iga051275@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Andrew Turner Subject: git: ccaf78c962e8 - main - arm64: Move cpu0 dpcpu and msgbuf to the DMAP List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: andrew X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: ccaf78c962e85630298f068931862a3595e9bbdf Auto-Submitted: auto-generated The branch main has been updated by andrew: URL: https://cgit.FreeBSD.org/src/commit/?id=ccaf78c962e85630298f068931862a3595e9bbdf commit ccaf78c962e85630298f068931862a3595e9bbdf Author: Andrew Turner AuthorDate: 2025-04-22 15:59:25 +0000 Commit: Andrew Turner CommitDate: 2025-04-22 16:08:57 +0000 arm64: Move cpu0 dpcpu and msgbuf to the DMAP When these are allocated we already have the DMAP region mapped. Search for the largest region and use this to hold these. Pr: 269726 Reviewed by: markj Sponsored by: Arm Ltd Differential Revision: https://reviews.freebsd.org/D42734 --- sys/arm64/arm64/pmap.c | 40 ++++++++++++++++++++++++++++++---------- 1 file changed, 30 insertions(+), 10 deletions(-) diff --git a/sys/arm64/arm64/pmap.c b/sys/arm64/arm64/pmap.c index 30efd40573d2..f4d6b1cfcb56 100644 --- a/sys/arm64/arm64/pmap.c +++ b/sys/arm64/arm64/pmap.c @@ -1332,6 +1332,7 @@ pmap_bootstrap(void) { vm_offset_t dpcpu, msgbufpv; vm_paddr_t start_pa, pa; + size_t largest_phys_size; /* Set this early so we can use the pagetable walking functions */ kernel_pmap_store.pm_l0 = pagetable_l0_ttbr1; @@ -1346,12 +1347,41 @@ pmap_bootstrap(void) kernel_pmap->pm_ttbr = kernel_pmap->pm_l0_paddr; kernel_pmap->pm_asid_set = &asids; + /* Reserve some VA space for early BIOS/ACPI mapping */ + preinit_map_va = roundup2(bs_state.freemempos, L2_SIZE); + + virtual_avail = preinit_map_va + PMAP_PREINIT_MAPPING_SIZE; + virtual_avail = roundup2(virtual_avail, L1_SIZE); + virtual_end = VM_MAX_KERNEL_ADDRESS - PMAP_MAPDEV_EARLY_SIZE; + kernel_vm_end = virtual_avail; + /* * We only use PXN when we know nothing will be executed from it, e.g. * the DMAP region. */ bs_state.table_attrs &= ~TATTR_PXN_TABLE; + /* + * Find the physical memory we could use. This needs to be after we + * exclude any memory that is mapped into the DMAP region but should + * not be used by the kernel, e.g. some UEFI memory types. + */ + physmap_idx = physmem_avail(physmap, nitems(physmap)); + + /* + * Find space for early allocations. We search for the largest + * region. This is because the user may choose a large msgbuf. + * This could be smarter, e.g. to allow multiple regions to be + * used & switch to the next when one is full. + */ + largest_phys_size = 0; + for (int i = 0; i < physmap_idx; i += 2) { + if ((physmap[i + 1] - physmap[i]) > largest_phys_size) { + largest_phys_size = physmap[i + 1] - physmap[i]; + bs_state.freemempos = PHYS_TO_DMAP(physmap[i]); + } + } + start_pa = pmap_early_vtophys(bs_state.freemempos); /* @@ -1378,19 +1408,9 @@ pmap_bootstrap(void) alloc_pages(msgbufpv, round_page(msgbufsize) / PAGE_SIZE); msgbufp = (void *)msgbufpv; - /* Reserve some VA space for early BIOS/ACPI mapping */ - preinit_map_va = roundup2(bs_state.freemempos, L2_SIZE); - - virtual_avail = preinit_map_va + PMAP_PREINIT_MAPPING_SIZE; - virtual_avail = roundup2(virtual_avail, L1_SIZE); - virtual_end = VM_MAX_KERNEL_ADDRESS - (PMAP_MAPDEV_EARLY_SIZE); - kernel_vm_end = virtual_avail; - pa = pmap_early_vtophys(bs_state.freemempos); physmem_exclude_region(start_pa, pa - start_pa, EXFLAG_NOALLOC); - - cpu_tlb_flushID(); } #if defined(KASAN) || defined(KMSAN)