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:
+9
-11
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user