version 1.188, 2020/04/29 22:03:09 |
version 1.189, 2020/05/02 16:44:36 |
Line 447 cpu_attach(device_t parent, device_t sel |
|
Line 447 cpu_attach(device_t parent, device_t sel |
|
/* Enable lapic. */ |
/* Enable lapic. */ |
lapic_enable(); |
lapic_enable(); |
lapic_set_lvt(); |
lapic_set_lvt(); |
if (vm_guest != VM_GUEST_XENPVHVM) |
if (!vm_guest_is_xenpvh_or_pvhvm()) |
lapic_calibrate_timer(ci); |
lapic_calibrate_timer(ci); |
} |
} |
#endif |
#endif |
Line 824 cpu_start_secondary(struct cpu_info *ci) |
|
Line 824 cpu_start_secondary(struct cpu_info *ci) |
|
KASSERT(cpu_starting == NULL); |
KASSERT(cpu_starting == NULL); |
cpu_starting = ci; |
cpu_starting = ci; |
for (i = 100000; (!(ci->ci_flags & CPUF_PRESENT)) && i > 0; i--) { |
for (i = 100000; (!(ci->ci_flags & CPUF_PRESENT)) && i > 0; i--) { |
x86_delay(10); |
delay_func(10); |
} |
} |
|
|
if ((ci->ci_flags & CPUF_PRESENT) == 0) { |
if ((ci->ci_flags & CPUF_PRESENT) == 0) { |
Line 860 cpu_boot_secondary(struct cpu_info *ci) |
|
Line 860 cpu_boot_secondary(struct cpu_info *ci) |
|
|
|
atomic_or_32(&ci->ci_flags, CPUF_GO); |
atomic_or_32(&ci->ci_flags, CPUF_GO); |
for (i = 100000; (!(ci->ci_flags & CPUF_RUNNING)) && i > 0; i--) { |
for (i = 100000; (!(ci->ci_flags & CPUF_RUNNING)) && i > 0; i--) { |
x86_delay(10); |
delay_func(10); |
} |
} |
if ((ci->ci_flags & CPUF_RUNNING) == 0) { |
if ((ci->ci_flags & CPUF_RUNNING) == 0) { |
aprint_error_dev(ci->ci_dev, "failed to start\n"); |
aprint_error_dev(ci->ci_dev, "failed to start\n"); |
Line 1143 mp_cpu_start(struct cpu_info *ci, paddr_ |
|
Line 1143 mp_cpu_start(struct cpu_info *ci, paddr_ |
|
__func__); |
__func__); |
return error; |
return error; |
} |
} |
x86_delay(10000); |
delay_func(10000); |
|
|
error = x86_ipi_startup(ci->ci_cpuid, target / PAGE_SIZE); |
error = x86_ipi_startup(ci->ci_cpuid, target / PAGE_SIZE); |
if (error != 0) { |
if (error != 0) { |
Line 1151 mp_cpu_start(struct cpu_info *ci, paddr_ |
|
Line 1151 mp_cpu_start(struct cpu_info *ci, paddr_ |
|
__func__); |
__func__); |
return error; |
return error; |
} |
} |
x86_delay(200); |
delay_func(200); |
|
|
error = x86_ipi_startup(ci->ci_cpuid, target / PAGE_SIZE); |
error = x86_ipi_startup(ci->ci_cpuid, target / PAGE_SIZE); |
if (error != 0) { |
if (error != 0) { |
Line 1159 mp_cpu_start(struct cpu_info *ci, paddr_ |
|
Line 1159 mp_cpu_start(struct cpu_info *ci, paddr_ |
|
__func__); |
__func__); |
return error; |
return error; |
} |
} |
x86_delay(200); |
delay_func(200); |
} |
} |
|
|
return 0; |
return 0; |
Line 1321 cpu_get_tsc_freq(struct cpu_info *ci) |
|
Line 1321 cpu_get_tsc_freq(struct cpu_info *ci) |
|
} else { |
} else { |
/* Calibrate TSC frequency. */ |
/* Calibrate TSC frequency. */ |
last_tsc = cpu_counter_serializing(); |
last_tsc = cpu_counter_serializing(); |
x86_delay(100000); |
delay_func(100000); |
ci->ci_data.cpu_cc_freq = |
ci->ci_data.cpu_cc_freq = |
(cpu_counter_serializing() - last_tsc) * 10; |
(cpu_counter_serializing() - last_tsc) * 10; |
} |
} |