diff options
author | gibbs <gibbs@FreeBSD.org> | 2013-09-20 22:59:22 +0000 |
---|---|---|
committer | gibbs <gibbs@FreeBSD.org> | 2013-09-20 22:59:22 +0000 |
commit | 7ed30adae7eb0c6e156983ca0c96c04e1e6a8e0d (patch) | |
tree | 301b6e7f4ff8cd017faecbcf64de6922be093a7e /sys/kern/subr_smp.c | |
parent | ec391855a94cc7ab44ba6ba5b3d8d27a5a1c224d (diff) | |
download | FreeBSD-src-7ed30adae7eb0c6e156983ca0c96c04e1e6a8e0d.zip FreeBSD-src-7ed30adae7eb0c6e156983ca0c96c04e1e6a8e0d.tar.gz |
Merge Xen PVHVM support into the GENERIC kernel config for both
amd64 and i386.
Submitted by: Roger Pau Monné
Sponsored by: Citrix Systems R&D
Reviewed by: gibbs
Approved by: re (blanket Xen)
MFC after: 2 weeks
sys/amd64/amd64/mp_machdep.c:
sys/amd64/include/cpu.h:
sys/i386/i386/mp_machdep.c:
sys/i386/include/cpu.h:
- Introduce two new CPU hooks for initialization and resume
purposes. This allows us to get rid of the XENHVM ifdefs in
mp_machdep, and also sets some hooks into common code that can be
used by other hypervisor implementations.
sys/amd64/conf/XENHVM:
sys/i386/conf/XENHVM:
- Remove these configs now that GENERIC has builtin support for Xen
HVM.
sys/kern/subr_smp.c:
- Make sure there are no pending IPIs when suspending a system.
sys/x86/xen/hvm.c:
- Add cpu init and resume vectors that are called from mp_machdep
using the new hooks.
- Only clear the vcpu_info mapping data on resume. It is already
clear for the BSP on a cold boot and is set correctly as APs
are started.
- Gate xen_hvm_init_cpu only to systems running under Xen.
sys/x86/xen/xen_intr.c:
- Gate the setup of event channels only to systems running under Xen.
Diffstat (limited to 'sys/kern/subr_smp.c')
-rw-r--r-- | sys/kern/subr_smp.c | 14 |
1 files changed, 5 insertions, 9 deletions
diff --git a/sys/kern/subr_smp.c b/sys/kern/subr_smp.c index 77d1b2b..86fbebb 100644 --- a/sys/kern/subr_smp.c +++ b/sys/kern/subr_smp.c @@ -225,17 +225,15 @@ generic_stop_cpus(cpuset_t map, u_int type) CTR2(KTR_SMP, "stop_cpus(%s) with %u type", cpusetobj_strprint(cpusetbuf, &map), type); -#ifdef XENHVM /* - * When migrating a PVHVM domain we need to make sure there are - * no IPIs in progress. IPIs that have been issued, but not - * yet delivered (not pending on a vCPU) will be lost in the - * IPI rebinding process, violating FreeBSD's assumption of - * reliable IPI delivery. + * When suspending, ensure there are are no IPIs in progress. + * IPIs that have been issued, but not yet delivered (e.g. + * not pending on a vCPU when running under virtualization) + * will be lost, violating FreeBSD's assumption of reliable + * IPI delivery. */ if (type == IPI_SUSPEND) mtx_lock_spin(&smp_ipi_mtx); -#endif if (stopping_cpu != PCPU_GET(cpuid)) while (atomic_cmpset_int(&stopping_cpu, NOCPU, @@ -264,10 +262,8 @@ generic_stop_cpus(cpuset_t map, u_int type) } } -#ifdef XENHVM if (type == IPI_SUSPEND) mtx_unlock_spin(&smp_ipi_mtx); -#endif stopping_cpu = NOCPU; return (1); |