Author: cperciva
Date: Fri May 16 19:28:22 2014
New Revision: 266269
URL: http://svnweb.freebsd.org/changeset/base/266269

Log:
  Add xenhvm.ko, which can be loaded along with a !XENHVM kernel in order to
  provide support for the Xen/HVM environment.
  
  This code is compiled with XENHVM defined; since this would result in the
  (no longer used) "last processed" values being included in PCPU data
  structures, an additional MODXENHVM define is used to exclude those.  This
  allows KBI to be retained for both GENERIC and XENHVM kernel configurations
  (which are not KBI compatible with each other).
  
  This is a direct commit to stable/9, since stable/10 and HEAD have XENHVM
  merged into the GENERIC kernel configuration (but the changes in stable/10
  and HEAD cannot be MFCed as-is).
  
  Discussed with: royger, gjb
  Relnotes:     FreeBSD 9.3-RELEASE can run in Xen/HVM environments,
                including Amazon EC2, using GENERIC + xenhvm.ko.

Added:
  stable/9/sys/modules/xenhvm/
  stable/9/sys/modules/xenhvm/Makefile   (contents, props changed)
  stable/9/sys/xen/xenhvm_mod.c   (contents, props changed)
Modified:
  stable/9/sys/amd64/include/pcpu.h
  stable/9/sys/i386/include/pcpu.h
  stable/9/sys/modules/Makefile

Modified: stable/9/sys/amd64/include/pcpu.h
==============================================================================
--- stable/9/sys/amd64/include/pcpu.h   Fri May 16 19:15:03 2014        
(r266268)
+++ stable/9/sys/amd64/include/pcpu.h   Fri May 16 19:28:22 2014        
(r266269)
@@ -42,7 +42,7 @@
 #endif
 #endif
 
-#ifdef XENHVM
+#if defined(XENHVM) && !defined(MODXENHVM)
 /* This is now unused, but remains here for KBI compatibility reasons. */
 #define PCPU_XEN_FIELDS                                                        
\
        ;                                                               \

Modified: stable/9/sys/i386/include/pcpu.h
==============================================================================
--- stable/9/sys/i386/include/pcpu.h    Fri May 16 19:15:03 2014        
(r266268)
+++ stable/9/sys/i386/include/pcpu.h    Fri May 16 19:28:22 2014        
(r266269)
@@ -76,7 +76,7 @@ struct shadow_time_info {
        int     pc_virq_to_irq[NR_VIRQS];                               \
        int     pc_ipi_to_irq[NR_IPIS]  
 
-#elif defined(XENHVM)
+#elif defined(XENHVM) && !defined(MODXENHVM)
 
 /* This is now unused, but remains here for KBI compatibility reasons. */
 #define        PCPU_XEN_FIELDS                                                 
\
@@ -84,7 +84,7 @@ struct shadow_time_info {
        unsigned int pc_last_processed_l1i;                             \
        unsigned int pc_last_processed_l2i
 
-#else /* !XEN && !XENHVM */
+#else /* !XEN && (!XENHVM || MODXENHVM) */
 
 #define PCPU_XEN_FIELDS
 

Modified: stable/9/sys/modules/Makefile
==============================================================================
--- stable/9/sys/modules/Makefile       Fri May 16 19:15:03 2014        
(r266268)
+++ stable/9/sys/modules/Makefile       Fri May 16 19:28:22 2014        
(r266269)
@@ -361,6 +361,7 @@ SUBDIR=     \
        ${_wpifw} \
        ${_x86bios} \
        ${_xe} \
+       ${_xenhvm} \
        xfs \
        xl \
        ${_zfs} \
@@ -368,6 +369,7 @@ SUBDIR=     \
 
 .if ${MACHINE_CPUARCH} == "i386" || ${MACHINE_CPUARCH} == "amd64"
 _filemon=      filemon
+_xenhvm=       xenhvm
 .endif
 
 .if ${MACHINE_CPUARCH} != "powerpc" && ${MACHINE_CPUARCH} != "arm" && \

Added: stable/9/sys/modules/xenhvm/Makefile
==============================================================================
--- /dev/null   00:00:00 1970   (empty, because file is newly added)
+++ stable/9/sys/modules/xenhvm/Makefile        Fri May 16 19:28:22 2014        
(r266269)
@@ -0,0 +1,21 @@
+# $FreeBSD$
+
+KMOD=  xenhvm
+
+DEVXENDIR=     ${.CURDIR}/../../dev/xen/
+XENDIR=        ${.CURDIR}/../../xen/
+.PATH: ${DEVXENDIR}/balloon ${DEVXENDIR}/blkfront ${DEVXENDIR}/blkback \
+       ${DEVXENDIR}/control ${DEVXENDIR}/netback ${DEVXENDIR}/netfront \
+       ${DEVXENDIR}/xenpci ${XENDIR}/ ${XENDIR}/evtchn \
+       ${XENDIR}/xenbus ${XENDIR}/xenstore
+
+SRCS=  xenhvm_mod.c    \
+       balloon.c blkfront.c blkback.c control.c netback.c netfront.c   \
+       xenpci.c evtchn.c gnttab.c features.c evtchn_dev.c              \
+       xenbus.c xenbusb.c xenbusb_front.c xenbusb_back.c               \
+       xenbus_if.c xenbus_if.h xenbusb_if.c xenbusb_if.h                       
                \
+       xenstore.c xenstore_dev.c
+MFILES=        xen/xenbus/xenbus_if.m xen/xenbus/xenbusb_if.m
+CFLAGS+=       -DXENHVM -DMODXENHVM
+
+.include <bsd.kmod.mk>

Added: stable/9/sys/xen/xenhvm_mod.c
==============================================================================
--- /dev/null   00:00:00 1970   (empty, because file is newly added)
+++ stable/9/sys/xen/xenhvm_mod.c       Fri May 16 19:28:22 2014        
(r266269)
@@ -0,0 +1,32 @@
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <sys/param.h>
+#include <sys/kernel.h>
+#include <sys/module.h>
+#include <sys/systm.h>
+
+static int
+xenhvm_modevent(module_t mod, int type, void *arg)
+{
+
+       switch (type) {
+       case MOD_LOAD:
+               if (inw(0x10) == 0x49d2) {
+                       if (bootverbose)
+                               printf("Xen detected: disabling emulated block 
and network devices\n");
+                       outw(0x10, 3);
+               }
+               return (0);
+       }
+
+       return (EOPNOTSUPP);
+}
+
+static moduledata_t xenhvm_mod = {
+       "xenhvm",
+       xenhvm_modevent,
+       0
+};
+
+DECLARE_MODULE(xenhvm, xenhvm_mod, SI_SUB_DRIVERS, SI_ORDER_FIRST);
_______________________________________________
svn-src-stable-9@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-stable-9
To unsubscribe, send any mail to "svn-src-stable-9-unsubscr...@freebsd.org"

Reply via email to