From nobody Sun Jul 6 19:28:21 2025 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 4bZy8Q1cnpz61bKB; Sun, 06 Jul 2025 19:28:22 +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 4bZy8P6SzPz3K8n; Sun, 06 Jul 2025 19:28:21 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1751830101; 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=/z4HWvAQF/ie7NvORTlO6DQn6QOn9abbBQ4DepaaHWo=; b=g/R0RyFa8H/YMmi6jYkiu96bYqgfm/Kx4VC56yv4f3LcCgjbiQe+iCXmLCAO6+fY673+O1 XmCoGwzUXRxroX0KlcoLGmDNdEnYIxiB1YC1p9a+xOYcwlOweW4aZp4bNTPxcAqTB8QH7P /091kuOyRNXMECRATIUIBwhtq92edivJbuuJY5oi/k893MnEOybtEyclmagk4pbg6+BmBm WgCZi5gX1j3Dnflj+lypR2dReBHOScYnccDZnY1VGHBx8eAgzfXgEnCdE75YyD1aLwF2gW wo0rRFQWB4dlYksDZfPBjtLP21LfCqVJ/P4041YFMKVcfVtCK3YKFJm8KRvFMA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1751830101; 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=/z4HWvAQF/ie7NvORTlO6DQn6QOn9abbBQ4DepaaHWo=; b=GPw+tMgQfDRiIGbi74zTtm8q2cEJRmuMGNLeNZzw0wycbpVjiV2AbroK2zL+k0tHBm/PKh i/ka392T/rVbgLMfq84jHv/DxWBi4AUIPCjWE893Gwl/OsKjbm/KzbARVUMzEotAvk/rvi an/MDesZNqju7so5vO4OA+xAyBL4CEshrNUaA5V69pZj3KF9owMTghxG0jvT+81TPpGhyE ziCDKBE64DWg14prgbKAsFyOQrYIO2BT1DTf92WGFp/6YrvtRSsKdpGspV2vLIp4nJ3fZx IqEfCtRZxpTFRtd2NGyW0jKdN0Fu/wscNzr4xnoZm2BUirV6do/6u03cDAR8NA== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1751830101; a=rsa-sha256; cv=none; b=qDyh5zYADswtmTpuuARW92+lMrDLi5JOiehQYTWneI2cF/n2boGuqKYZ6JxiAuNfaZYvpR 58KV49D86nq6GOIj9MY4LbqpqjW3A9vYpED/ASKS8N91u9sb95ob6KJ7A7VC/K+GSr6KQG IExeZQaZrWhBuVTFZmZjWFVzKQ/1dwamKHUoCxg9TYPMFUu5/CTfkemA5zMEtd8LRx5i73 v72fBKYPiydJZiD5Imr5PTN8rDIwkT/IkblUNMVO9OiaGX5Y57Rfzwhjz50uC85kDvKGMs eF2YT8aXEaBQcw+86LogFZuTLXuxV9ZnDTDreUEo/qQYOgvx7jWl0X7yQN3u5g== 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 4bZy8P5wVdz3QX; Sun, 06 Jul 2025 19:28:21 +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 566JSL6J096966; Sun, 6 Jul 2025 19:28:21 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 566JSLh9096963; Sun, 6 Jul 2025 19:28:21 GMT (envelope-from git) Date: Sun, 6 Jul 2025 19:28:21 GMT Message-Id: <202507061928.566JSLh9096963@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Ahmad Khalifa Subject: git: 85dcdb7aad85 - main - amd64: allow the mapping of other regions for efirt 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: vexeduxr X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 85dcdb7aad85498b3f497b8752e69b8612b27cb7 Auto-Submitted: auto-generated The branch main has been updated by vexeduxr: URL: https://cgit.FreeBSD.org/src/commit/?id=85dcdb7aad85498b3f497b8752e69b8612b27cb7 commit 85dcdb7aad85498b3f497b8752e69b8612b27cb7 Author: Ahmad Khalifa AuthorDate: 2025-07-06 19:10:25 +0000 Commit: Ahmad Khalifa CommitDate: 2025-07-06 19:26:07 +0000 amd64: allow the mapping of other regions for efirt Some BIOSes access data outside of regions marked as "runtime" in their runtime EFI functions. Allow the mapping and preservation of other regions through a tunable. The tunable is a bitmap specifying the regions to map. e.g bit 3 would be set to map BootServicesCode. Currently allowed regions are: BootServicesCode BootServicesData RuntimeServicesCode RuntimeServicesData ACPIMemoryNVS PR: 287422 Reviewed by: kib Approved by: imp (mentor) Differential Revision: https://reviews.freebsd.org/D51146 --- sys/amd64/amd64/efirt_machdep.c | 18 +++++++++++++++++- sys/amd64/amd64/machdep.c | 8 ++++++-- sys/amd64/include/efi.h | 4 ++++ 3 files changed, 27 insertions(+), 3 deletions(-) diff --git a/sys/amd64/amd64/efirt_machdep.c b/sys/amd64/amd64/efirt_machdep.c index 81a28ebe97ee..75c357f6e3df 100644 --- a/sys/amd64/amd64/efirt_machdep.c +++ b/sys/amd64/amd64/efirt_machdep.c @@ -56,6 +56,15 @@ #include #include +/* The EFI regions we're allowed to map. */ +#define EFI_ALLOWED_TYPES_MASK ( \ + 1u << EFI_MD_TYPE_BS_CODE | 1u << EFI_MD_TYPE_BS_DATA | \ + 1u << EFI_MD_TYPE_RT_CODE | 1u << EFI_MD_TYPE_RT_DATA | \ + 1u << EFI_MD_TYPE_FIRMWARE \ +) + +uint32_t efi_map_regs; + static pml5_entry_t *efi_pml5; static pml4_entry_t *efi_pml4; static vm_object_t obj_1t1_pt; @@ -198,9 +207,16 @@ efi_create_1t1_map(struct efi_md *map, int ndesc, int descsz) pmap_pinit_pml4(efi_pmltop_page); } + if ((efi_map_regs & ~EFI_ALLOWED_TYPES_MASK) != 0) { + printf("Ignoring the following runtime EFI regions: %#x\n", + efi_map_regs & ~EFI_ALLOWED_TYPES_MASK); + efi_map_regs &= EFI_ALLOWED_TYPES_MASK; + } + for (i = 0, p = map; i < ndesc; i++, p = efi_next_descriptor(p, descsz)) { - if ((p->md_attr & EFI_MD_ATTR_RT) == 0) + if ((p->md_attr & EFI_MD_ATTR_RT) == 0 && + !EFI_MAP_BOOTTYPE_ALLOWED(p->md_type)) continue; if (p->md_virt != 0 && p->md_virt != p->md_phys) { if (bootverbose) diff --git a/sys/amd64/amd64/machdep.c b/sys/amd64/amd64/machdep.c index 9724a6acb130..1e8f9b22bd19 100644 --- a/sys/amd64/amd64/machdep.c +++ b/sys/amd64/amd64/machdep.c @@ -758,6 +758,7 @@ add_efi_map_entries(struct efi_map_header *efihdr, vm_paddr_t *physmap, printf("%23s %12s %12s %8s %4s\n", "Type", "Physical", "Virtual", "#Pages", "Attr"); + TUNABLE_INT_FETCH("machdep.efirt.regs", &efi_map_regs); for (i = 0, p = map; i < ndesc; i++, p = efi_next_descriptor(p, efihdr->descriptor_size)) { if (boothowto & RB_VERBOSE) { @@ -795,10 +796,13 @@ add_efi_map_entries(struct efi_map_header *efihdr, vm_paddr_t *physmap, } switch (p->md_type) { - case EFI_MD_TYPE_CODE: - case EFI_MD_TYPE_DATA: case EFI_MD_TYPE_BS_CODE: case EFI_MD_TYPE_BS_DATA: + if (EFI_MAP_BOOTTYPE_ALLOWED(p->md_type)) + continue; + /* FALLTHROUGH */ + case EFI_MD_TYPE_CODE: + case EFI_MD_TYPE_DATA: case EFI_MD_TYPE_FREE: /* * We're allowed to use any entry with these types. diff --git a/sys/amd64/include/efi.h b/sys/amd64/include/efi.h index b47c4aa27ac7..439f2f0b317d 100644 --- a/sys/amd64/include/efi.h +++ b/sys/amd64/include/efi.h @@ -53,6 +53,10 @@ #define EFI_TIME_OWNED() mtx_assert(&atrtc_time_lock, MA_OWNED) #define EFI_RT_HANDLE_FAULTS_DEFAULT 1 + +#define EFI_MAP_BOOTTYPE_ALLOWED(type) (((efi_map_regs >> (type)) & 1) != 0) + +extern uint32_t efi_map_regs; #endif struct efirt_callinfo {