summaryrefslogtreecommitdiffstats
path: root/sys/xen
diff options
context:
space:
mode:
authorgibbs <gibbs@FreeBSD.org>2013-09-06 22:17:02 +0000
committergibbs <gibbs@FreeBSD.org>2013-09-06 22:17:02 +0000
commit437790b3499686122e419c9f9748da26ba33577c (patch)
tree02c1225548025dd9f99d8436c7d8612a16545631 /sys/xen
parent696fdc845179d6ce0858b68e07bbda90b07aab86 (diff)
downloadFreeBSD-src-437790b3499686122e419c9f9748da26ba33577c.zip
FreeBSD-src-437790b3499686122e419c9f9748da26ba33577c.tar.gz
Implement PV IPIs for PVHVM guests and further converge PV and HVM
IPI implmementations. Submitted by: Roger Pau Monné Sponsored by: Citrix Systems R&D Submitted by: gibbs (misc cleanup, table driven config) Reviewed by: gibbs MFC after: 2 weeks sys/amd64/include/cpufunc.h: sys/amd64/amd64/pmap.c: Move invltlb_globpcid() into cpufunc.h so that it can be used by the Xen HVM version of tlb shootdown IPI handlers. sys/x86/xen/xen_intr.c: sys/xen/xen_intr.h: Rename xen_intr_bind_ipi() to xen_intr_alloc_and_bind_ipi(), and remove the ipi vector parameter. This api allocates an event channel port that can be used for ipi services, but knows nothing of the actual ipi for which that port will be used. Removing the unused argument and cleaning up the comments surrounding its declaration helps clarify its actual role. sys/amd64/amd64/mp_machdep.c: sys/amd64/include/cpu.h: sys/i386/i386/mp_machdep.c: sys/i386/include/cpu.h: Implement a generic framework for amd64 and i386 that allows the implementation of certain CPU management functions to be selected at runtime. Currently this is only used for the ipi send function, which we optimize for Xen when running on a Xen hypervisor, but can easily be expanded to support more operations. sys/x86/xen/hvm.c: Implement Xen PV IPI handlers and operations, replacing native send IPI. sys/amd64/include/pcpu.h: sys/i386/include/pcpu.h: sys/i386/include/smp.h: Remove NR_VIRQS and NR_IPIS from FreeBSD headers. NR_VIRQS is defined already for us in the xen interface files. NR_IPIS is only needed in one file per Xen platform and is easily inferred by the IPI vector table that is defined in those files. sys/i386/xen/mp_machdep.c: Restructure to more closely match the HVM implementation by performing table driven IPI setup.
Diffstat (limited to 'sys/xen')
-rw-r--r--sys/xen/xen_intr.h11
1 files changed, 5 insertions, 6 deletions
diff --git a/sys/xen/xen_intr.h b/sys/xen/xen_intr.h
index 109608f..3b339a5 100644
--- a/sys/xen/xen_intr.h
+++ b/sys/xen/xen_intr.h
@@ -141,21 +141,20 @@ int xen_intr_bind_virq(device_t dev, u_int virq, u_int cpu,
void *arg, enum intr_type irqflags, xen_intr_handle_t *handlep);
/**
- * Associate an interprocessor interrupt vector with an interrupt handler.
+ * Allocate a local event channel port for servicing interprocessor
+ * interupts and, if successful, associate the port with the specified
+ * interrupt handler.
*
* \param dev The device making this bind request.
- * \param ipi The interprocessor interrupt vector number of the
- * interrupt source being hooked.
* \param cpu The cpu receiving the IPI.
- * \param filter An interrupt filter handler. Specify NULL
- * to always dispatch to the ithread handler.
+ * \param filter The interrupt filter servicing this IPI.
* \param irqflags Interrupt handler flags. See sys/bus.h.
* \param handlep Pointer to an opaque handle used to manage this
* registration.
*
* \returns 0 on success, otherwise an errno.
*/
-int xen_intr_bind_ipi(device_t dev, u_int ipi, u_int cpu,
+int xen_intr_alloc_and_bind_ipi(device_t dev, u_int cpu,
driver_filter_t filter, enum intr_type irqflags,
xen_intr_handle_t *handlep);
OpenPOWER on IntegriCloud