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);
|
(void)ucode_loader->load(ucode_data, UNSAFE, NULL, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void *
|
static const void *
|
||||||
map_ucode(uintptr_t free, size_t len)
|
map_ucode(const void *match, uintptr_t free, size_t len)
|
||||||
{
|
{
|
||||||
#ifdef __i386__
|
#ifdef __i386__
|
||||||
uintptr_t va;
|
uintptr_t va;
|
||||||
|
|
||||||
for (va = free; va < free + len; va += PAGE_SIZE)
|
for (va = free; va < free + len; va += PAGE_SIZE)
|
||||||
pmap_kenter(va, (vm_paddr_t)va);
|
pmap_kenter(va, (vm_paddr_t)va);
|
||||||
|
memcpy_early(free, match, len);
|
||||||
|
return ((const void *)free);
|
||||||
#else
|
#else
|
||||||
(void)len;
|
(void)len;
|
||||||
|
return (match);
|
||||||
#endif
|
#endif
|
||||||
return ((void *)free);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -421,7 +423,7 @@ ucode_load_bsp(uintptr_t free)
|
|||||||
char vendor[13];
|
char vendor[13];
|
||||||
} cpuid;
|
} cpuid;
|
||||||
const uint8_t *fileaddr, *match;
|
const uint8_t *fileaddr, *match;
|
||||||
uint8_t *addr;
|
const uint8_t *addr;
|
||||||
char *type;
|
char *type;
|
||||||
uint64_t nrev, orev;
|
uint64_t nrev, orev;
|
||||||
caddr_t file;
|
caddr_t file;
|
||||||
@@ -456,14 +458,10 @@ ucode_load_bsp(uintptr_t free)
|
|||||||
len = preload_fetch_size(file);
|
len = preload_fetch_size(file);
|
||||||
match = ucode_loader->match(fileaddr, &len);
|
match = ucode_loader->match(fileaddr, &len);
|
||||||
if (match != NULL) {
|
if (match != NULL) {
|
||||||
addr = map_ucode(free, len);
|
addr = map_ucode(match, free, len);
|
||||||
/* We can't use memcpy() before ifunc resolution. */
|
error = ucode_loader->load(addr, EARLY, &nrev, &orev);
|
||||||
memcpy_early(addr, match, len);
|
|
||||||
match = addr;
|
|
||||||
|
|
||||||
error = ucode_loader->load(match, EARLY, &nrev, &orev);
|
|
||||||
if (error == 0) {
|
if (error == 0) {
|
||||||
ucode_data = early_ucode_data = match;
|
ucode_data = early_ucode_data = addr;
|
||||||
ucode_nrev = nrev;
|
ucode_nrev = nrev;
|
||||||
ucode_orev = orev;
|
ucode_orev = orev;
|
||||||
return (len);
|
return (len);
|
||||||
|
|||||||
Reference in New Issue
Block a user