Date: Thu, 04 Jun 2026 14:30:02 +0000 From: Konstantin Belousov <kib@FreeBSD.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org Subject: git: c6ccef4a32b4 - stable/15 - amd64: there is no reason to copy ucode around in ucode_load_bsp() Message-ID: <6a218bea.3a871.37977cac@gitrepo.freebsd.org>
index | next in thread | raw e-mail
The branch stable/15 has been updated by kib: URL: https://cgit.FreeBSD.org/src/commit/?id=c6ccef4a32b4e09927dfdcc0f734af25c6193f5a commit c6ccef4a32b4e09927dfdcc0f734af25c6193f5a Author: Konstantin Belousov <kib@FreeBSD.org> AuthorDate: 2026-05-30 15:57:46 +0000 Commit: Konstantin Belousov <kib@FreeBSD.org> CommitDate: 2026-06-04 14:29:19 +0000 amd64: there is no reason to copy ucode around in ucode_load_bsp() PR: 294630 (cherry picked from commit 16f21c5af35002b8361ffb2e83ff3c92cd899a3a) --- 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 72133de211f8..613a7b03489f 100644 --- a/sys/x86/x86/ucode.c +++ b/sys/x86/x86/ucode.c @@ -361,18 +361,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 @@ -405,7 +407,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; @@ -440,14 +442,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?6a218bea.3a871.37977cac>
