Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 01 Jun 2026 16:36:46 +0000
From:      Konstantin Belousov <kib@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Subject:   git: 16f21c5af350 - main - amd64: there is no reason to copy ucode around in ucode_load_bsp()
Message-ID:  <6a1db51e.44912.1c15fcaa@gitrepo.freebsd.org>

index | next in thread | raw e-mail

The branch main has been updated by kib:

URL: https://cgit.FreeBSD.org/src/commit/?id=16f21c5af35002b8361ffb2e83ff3c92cd899a3a

commit 16f21c5af35002b8361ffb2e83ff3c92cd899a3a
Author:     Konstantin Belousov <kib@FreeBSD.org>
AuthorDate: 2026-05-30 15:57:46 +0000
Commit:     Konstantin Belousov <kib@FreeBSD.org>
CommitDate: 2026-06-01 16:35:33 +0000

    amd64: there is no reason to copy ucode around in ucode_load_bsp()
    
    PR:     294630
    Reviewed by:    markj
    Sponsored by:   The FreeBSD Foundation
    MFC after:      1 week
    Differrential revision: https://reviews.freebsd.org/D57368
---
 sys/x86/x86/ucode.c | 20 +++++++++-----------
 1 file changed, 9 insertions(+), 11 deletions(-)

diff --git a/sys/x86/x86/ucode.c b/sys/x86/x86/ucode.c
index 3d7008eb30f2..439b0b83e650 100644
--- a/sys/x86/x86/ucode.c
+++ b/sys/x86/x86/ucode.c
@@ -377,18 +377,20 @@ ucode_load_ap(int cpu)
 		(void)ucode_loader->load(ucode_data, UNSAFE, NULL, NULL);
 }
 
-static void *
-map_ucode(uintptr_t free, size_t len)
+static const void *
+map_ucode(const void *match, uintptr_t free, size_t len)
 {
 #ifdef __i386__
 	uintptr_t va;
 
 	for (va = free; va < free + len; va += PAGE_SIZE)
 		pmap_kenter(va, (vm_paddr_t)va);
+	memcpy_early(free, match, len);
+	return ((const void *)free);
 #else
 	(void)len;
+	return (match);
 #endif
-	return ((void *)free);
 }
 
 static void
@@ -421,7 +423,7 @@ ucode_load_bsp(uintptr_t free)
 		char vendor[13];
 	} cpuid;
 	const uint8_t *fileaddr, *match;
-	uint8_t *addr;
+	const uint8_t *addr;
 	char *type;
 	uint64_t nrev, orev;
 	caddr_t file;
@@ -456,14 +458,10 @@ ucode_load_bsp(uintptr_t free)
 		len = preload_fetch_size(file);
 		match = ucode_loader->match(fileaddr, &len);
 		if (match != NULL) {
-			addr = map_ucode(free, len);
-			/* We can't use memcpy() before ifunc resolution. */
-			memcpy_early(addr, match, len);
-			match = addr;
-
-			error = ucode_loader->load(match, EARLY, &nrev, &orev);
+			addr = map_ucode(match, free, len);
+			error = ucode_loader->load(addr, EARLY, &nrev, &orev);
 			if (error == 0) {
-				ucode_data = early_ucode_data = match;
+				ucode_data = early_ucode_data = addr;
 				ucode_nrev = nrev;
 				ucode_orev = orev;
 				return (len);


home | help

Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?6a1db51e.44912.1c15fcaa>