Apply fix to un-cripple max cpu id on BSP earlier.
We need to know actual value for the standard extended features before ifuncs are resolved. Reported and tested by: madpilot Sponsored by: The FreeBSD Foundation MFC after: 1 week
This commit is contained in:
parent
44748aa487
commit
83813c6696
@ -1581,6 +1581,7 @@ hammer_time(u_int64_t modulep, u_int64_t physfree)
|
||||
|
||||
identify_cpu1();
|
||||
identify_hypervisor();
|
||||
identify_cpu_fixup_bsp();
|
||||
identify_cpu2();
|
||||
initializecpucache();
|
||||
|
||||
|
@ -129,6 +129,7 @@ void dump_drop_page(vm_paddr_t);
|
||||
void finishidentcpu(void);
|
||||
void identify_cpu1(void);
|
||||
void identify_cpu2(void);
|
||||
void identify_cpu_fixup_bsp(void);
|
||||
void identify_hypervisor(void);
|
||||
void initializecpu(void);
|
||||
void initializecpucache(void);
|
||||
|
@ -1467,6 +1467,19 @@ identify_cpu2(void)
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
identify_cpu_fixup_bsp(void)
|
||||
{
|
||||
u_int regs[4];
|
||||
|
||||
cpu_vendor_id = find_cpu_vendor_id();
|
||||
|
||||
if (fix_cpuid()) {
|
||||
do_cpuid(0, regs);
|
||||
cpu_high = regs[0];
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Final stage of CPU identification.
|
||||
*/
|
||||
@ -1478,12 +1491,7 @@ finishidentcpu(void)
|
||||
u_char ccr3;
|
||||
#endif
|
||||
|
||||
cpu_vendor_id = find_cpu_vendor_id();
|
||||
|
||||
if (fix_cpuid()) {
|
||||
do_cpuid(0, regs);
|
||||
cpu_high = regs[0];
|
||||
}
|
||||
identify_cpu_fixup_bsp();
|
||||
|
||||
if (cpu_high >= 5 && (cpu_feature2 & CPUID2_MON) != 0) {
|
||||
do_cpuid(5, regs);
|
||||
|
Loading…
Reference in New Issue
Block a user