Changeset View
Changeset View
Standalone View
Standalone View
head/sys/x86/xen/pvcpu_enum.c
Show All 36 Lines | |||||
#include <vm/vm.h> | #include <vm/vm.h> | ||||
#include <vm/pmap.h> | #include <vm/pmap.h> | ||||
#include <machine/intr_machdep.h> | #include <machine/intr_machdep.h> | ||||
#include <x86/apicvar.h> | #include <x86/apicvar.h> | ||||
#include <machine/cpu.h> | #include <machine/cpu.h> | ||||
#include <machine/smp.h> | #include <machine/smp.h> | ||||
#include <machine/md_var.h> | |||||
#include <xen/xen-os.h> | #include <xen/xen-os.h> | ||||
#include <xen/xen_intr.h> | #include <xen/xen_intr.h> | ||||
#include <xen/hypervisor.h> | #include <xen/hypervisor.h> | ||||
#include <xen/interface/vcpu.h> | #include <xen/interface/vcpu.h> | ||||
#include <contrib/dev/acpica/include/acpi.h> | #include <contrib/dev/acpica/include/acpi.h> | ||||
▲ Show 20 Lines • Show All 93 Lines • ▼ Show 20 Lines | |||||
* Test each possible vCPU in order to find the number of vCPUs | * Test each possible vCPU in order to find the number of vCPUs | ||||
*/ | */ | ||||
static int | static int | ||||
xenpv_probe_cpus(void) | xenpv_probe_cpus(void) | ||||
{ | { | ||||
#ifdef SMP | #ifdef SMP | ||||
int i, ret; | int i, ret; | ||||
for (i = 0; i < MAXCPU; i++) { | for (i = 0; i < MAXCPU && (i * 2) < MAX_APIC_ID; i++) { | ||||
ret = HYPERVISOR_vcpu_op(VCPUOP_is_up, i, NULL); | ret = HYPERVISOR_vcpu_op(VCPUOP_is_up, i, NULL); | ||||
if (ret >= 0) | mp_ncpus = min(mp_ncpus + 1, MAXCPU); | ||||
lapic_create((i * 2), (i == 0)); | |||||
} | } | ||||
mp_maxid = mp_ncpus - 1; | |||||
max_apic_id = mp_ncpus * 2; | |||||
#endif | #endif | ||||
return (0); | return (0); | ||||
} | } | ||||
/* | /* | ||||
* Initialize the vCPU id of the BSP | * Initialize the vCPU id of the BSP | ||||
*/ | */ | ||||
static int | static int | ||||
xenpv_setup_local(void) | xenpv_setup_local(void) | ||||
{ | { | ||||
#ifdef SMP | |||||
int i, ret; | |||||
for (i = 0; i < MAXCPU && (i * 2) < MAX_APIC_ID; i++) { | |||||
ret = HYPERVISOR_vcpu_op(VCPUOP_is_up, i, NULL); | |||||
if (ret >= 0) | |||||
lapic_create((i * 2), (i == 0)); | |||||
} | |||||
#endif | |||||
PCPU_SET(vcpu_id, 0); | PCPU_SET(vcpu_id, 0); | ||||
lapic_init(0); | lapic_init(0); | ||||
return (0); | return (0); | ||||
} | } | ||||
/* | /* | ||||
* On PVH guests there's no IO APIC | * On PVH guests there's no IO APIC | ||||
*/ | */ | ||||
▲ Show 20 Lines • Show All 77 Lines • Show Last 20 Lines |