summaryrefslogtreecommitdiffstats
path: root/sys/kern/subr_smp.c
diff options
context:
space:
mode:
authorgibbs <gibbs@FreeBSD.org>2013-09-20 22:59:22 +0000
committergibbs <gibbs@FreeBSD.org>2013-09-20 22:59:22 +0000
commit7ed30adae7eb0c6e156983ca0c96c04e1e6a8e0d (patch)
tree301b6e7f4ff8cd017faecbcf64de6922be093a7e /sys/kern/subr_smp.c
parentec391855a94cc7ab44ba6ba5b3d8d27a5a1c224d (diff)
downloadFreeBSD-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.c14
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);
OpenPOWER on IntegriCloud