1
0
mirror of https://git.FreeBSD.org/src.git synced 2026-06-02 11:24:32 +00:00

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
This commit is contained in:
Konstantin Belousov
2026-05-30 18:57:46 +03:00
parent 606d3cb1be
commit 16f21c5af3
+9 -11
View File
@@ -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);