diff options
author | decke <decke@FreeBSD.org> | 2013-12-13 19:17:19 +0800 |
---|---|---|
committer | decke <decke@FreeBSD.org> | 2013-12-13 19:17:19 +0800 |
commit | 10683952c4a318d634c7e95abcb9f936d6394b7a (patch) | |
tree | 0ce1cf3abd9d6f7f619c3cda4ecadd684b6c900a /emulators | |
parent | 1aa8913cb43c86163b8ae0a8a60d93cbe9d3b74f (diff) | |
download | freebsd-ports-gnome-10683952c4a318d634c7e95abcb9f936d6394b7a.tar.gz freebsd-ports-gnome-10683952c4a318d634c7e95abcb9f936d6394b7a.tar.zst freebsd-ports-gnome-10683952c4a318d634c7e95abcb9f936d6394b7a.zip |
- Update to virtualbox-ose 4.2.20_1
- This update pulls in many changes from the port and brings better support
for FreeBSD 10 and GCC from ports. I am doing that in preparation of the
upcoming VirtualBox 4.3 update that should land soon.
Diffstat (limited to 'emulators')
45 files changed, 824 insertions, 1588 deletions
diff --git a/emulators/virtualbox-ose-kmod-legacy/Makefile b/emulators/virtualbox-ose-kmod-legacy/Makefile index 8d0834ee700d..b839a63c91c3 100644 --- a/emulators/virtualbox-ose-kmod-legacy/Makefile +++ b/emulators/virtualbox-ose-kmod-legacy/Makefile @@ -2,7 +2,7 @@ # $FreeBSD$ PORTNAME= virtualbox-ose -DISTVERSION= 4.1.24 +DISTVERSION= 4.2.20 CATEGORIES= emulators MASTER_SITES= http://download.virtualbox.org/virtualbox/${DISTVERSION}/ \ http://tmp.chruetertee.ch/ \ @@ -34,9 +34,10 @@ CONFIGURE_ARGS+=--with-gcc="${CC}" --with-g++="${CXX}" --nofatal \ --build-headless CONFLICTS= bcc-[0-9]* -CONFLICTS_INSTALL= virtualbox-ose-kmod-[3,4]* virtualbox-ose-kmod-devel-[3,4]* +CONFLICTS_INSTALL= virtualbox-ose-kmod-4* virtualbox-ose-kmod-devel-4* OPTIONS_DEFINE= DEBUG VIMAGE +DEBUG_DESC= Debug symbols, additional logs and assertions VIMAGE_DESC= VIMAGE virtual networking support NO_STAGE= yes @@ -48,13 +49,14 @@ VBOX_BIN= ${WRKSRC}/out/${KMK_ARCH}/${KMK_BUILDTYPE}/bin/src KMK_BUILDTYPE= release KMK_CONFIG= VBOX_LIBPATH_X11=${LOCALBASE} VBOX_FREEBSD_SRC=${SRC_BASE}/sys -KMK_FLAGS= HostDrivers-src vboxdrv-mod VBoxNetFlt-src VBoxNetAdp-src +KMK_FLAGS= HostDrivers-scripts vboxdrv-mod VBoxNetFlt-src VBoxNetAdp-src MAKE_FLAGS= SYSDIR=${SRC_BASE}/sys .if ${PORT_OPTIONS:MDEBUG} KMK_FLAGS+= BUILD_TYPE=debug KMK_BUILDTYPE= debug +EXTRA_PATCHES+= ${FILESDIR}/extrapatch-Config.kmk ${FILESDIR}/extrapatch-src-VBox-HostDrivers-Support-freebsd-Makefile MAKE_FLAGS+= DEBUG_FLAGS="-O1 -g" PLIST_SUB+= WITH_DEBUG="" .else @@ -69,14 +71,6 @@ KMK_ARCH= freebsd.${ARCH} .include <bsd.port.pre.mk> -.if ${OSVERSION} < 802000 -BROKEN= Does not compile on FreeBSD < 8.2 -.endif - -.if ${OSVERSION} < 800500 && !empty(PORT_OPTIONS:MVIMAGE) -IGNORE= newer kernel is required to build with VIMAGE -.endif - post-patch: @${ECHO} 'VBOX_WITH_VBOXDRV = 1' > ${WRKSRC}/LocalConfig.kmk @${ECHO} 'VBOX_WITH_NETFLT = 1' >> ${WRKSRC}/LocalConfig.kmk diff --git a/emulators/virtualbox-ose-kmod-legacy/distinfo b/emulators/virtualbox-ose-kmod-legacy/distinfo index f19872868d76..f3287ff8e8b3 100644 --- a/emulators/virtualbox-ose-kmod-legacy/distinfo +++ b/emulators/virtualbox-ose-kmod-legacy/distinfo @@ -1,2 +1,2 @@ -SHA256 (VirtualBox-4.1.24.tar.bz2) = 74008b8e8942045668c1b7d06b0a4bb5fe8464066e343e3a2e1ba30b94ce8a7f -SIZE (VirtualBox-4.1.24.tar.bz2) = 74612732 +SHA256 (VirtualBox-4.2.20.tar.bz2) = 193aa3ce7c0e700fe6a12b64bf462ce633a856f1e831ee4a337cc3439b21df61 +SIZE (VirtualBox-4.2.20.tar.bz2) = 77050211 diff --git a/emulators/virtualbox-ose-kmod-legacy/files/extrapatch-Config.kmk b/emulators/virtualbox-ose-kmod-legacy/files/extrapatch-Config.kmk new file mode 100644 index 000000000000..7df1b0883f27 --- /dev/null +++ b/emulators/virtualbox-ose-kmod-legacy/files/extrapatch-Config.kmk @@ -0,0 +1,11 @@ +--- Config.kmk.orig 2012-05-24 01:15:53.393052000 +0200 ++++ Config.kmk 2012-05-24 01:16:15.883067161 +0200 +@@ -3188,7 +3188,7 @@ + | xargs -J% objcopy % $(out) + + ## Strip debug info (comment out if debugging or something). +- objcopy --strip-debug $(out) ++# objcopy --strip-debug $(out) + endef + else # x86 + TOOL_FREEBSDKMODLD_LINK_SYSMOD_OUTPUT = $(outbase).kld diff --git a/emulators/virtualbox-ose-kmod-legacy/files/extrapatch-src-VBox-HostDrivers-Support-freebsd-Makefile b/emulators/virtualbox-ose-kmod-legacy/files/extrapatch-src-VBox-HostDrivers-Support-freebsd-Makefile new file mode 100644 index 000000000000..90efbaeb2965 --- /dev/null +++ b/emulators/virtualbox-ose-kmod-legacy/files/extrapatch-src-VBox-HostDrivers-Support-freebsd-Makefile @@ -0,0 +1,11 @@ +--- src/VBox/HostDrivers/Support/freebsd/Makefile.orig 2012-10-18 16:23:16.000000000 +0200 ++++ src/VBox/HostDrivers/Support/freebsd/Makefile 2012-10-20 08:13:07.301179212 +0200 +@@ -27,7 +27,7 @@ + + KMOD = vboxdrv + +-CFLAGS += -DRT_OS_FREEBSD -DIN_RING0 -DIN_RT_R0 -DIN_SUP_R0 -DSUPDRV_WITH_RELEASE_LOGGER -DVBOX -DRT_WITH_VBOX -Iinclude -I. -Ir0drv -w -DVBOX_WITH_HARDENING -DVBOX_WITH_64_BITS_GUESTS ++CFLAGS += -DRT_OS_FREEBSD -DIN_RING0 -DIN_RT_R0 -DIN_SUP_R0 -DSUPDRV_WITH_RELEASE_LOGGER -DVBOX -DRT_WITH_VBOX -Iinclude -I. -Ir0drv -w -DVBOX_WITH_HARDENING -DVBOX_WITH_64_BITS_GUESTS -DEBUG + + .if (${MACHINE_ARCH} == "i386") + CFLAGS += -DRT_ARCH_X86 diff --git a/emulators/virtualbox-ose-kmod-legacy/files/patch-Config.kmk b/emulators/virtualbox-ose-kmod-legacy/files/patch-Config.kmk new file mode 100644 index 000000000000..d7edc886bb4a --- /dev/null +++ b/emulators/virtualbox-ose-kmod-legacy/files/patch-Config.kmk @@ -0,0 +1,56 @@ +--- Config.kmk.orig 2012-12-20 14:44:38.260858319 +0100 ++++ Config.kmk 2012-12-20 14:55:59.491850177 +0100 +@@ -3239,7 +3239,7 @@ + $(VBOX_GCC_WARN) -Wpointer-arith -Winline $(VBOX_GCC_Wno-pointer-sign) $(VBOX_GCC_fdiagnostics-show-option) \ + -Wstrict-prototypes -Wmissing-prototypes -Wstrict-prototypes \ + -Wimplicit-function-declaration -Werror-implicit-function-declaration \ +- -O2 -fformat-extensions -ffreestanding -fno-strict-aliasing -fno-common -finline-limit=8000 \ ++ -O2 -ffreestanding -fno-strict-aliasing -fno-common -finline-limit=8000 \ + $(VBOX_GCC_fno-stack-protector) $(VBOX_GCC_R0_OPT) $(VBOX_GCC_R0_FP) \ + -nostdinc -std=c99 + TEMPLATE_VBOXR0DRV_CFLAGS.x86 = -m32 -mno-align-long-strings -mpreferred-stack-boundary=2 -mno-mmx -mno-3dnow -mno-sse -mno-sse2 +@@ -3248,7 +3248,7 @@ + -mno-3dnow -msoft-float -fno-asynchronous-unwind-tables -Wundef + TEMPLATE_VBOXR0DRV_CXXFLAGS = -fno-exceptions -fno-rtti \ + $(VBOX_GCC_WARN) -Wpointer-arith -Winline \ +- -O2 -fno-format-extensions -fno-strict-aliasing -fno-common -finline-limit=8000 \ ++ -O2 -fno-strict-aliasing -fno-common -finline-limit=8000 \ + $(VBOX_GCC_fno-stack-protector) $(VBOX_GCC_R0_OPT) $(VBOX_GCC_R0_FP) \ + -nostdinc + TEMPLATE_VBOXR0DRV_CXXFLAGS.x86 = $(TEMPLATE_VBOXR0DRV_CFLAGS.x86) +@@ -3465,8 +3465,6 @@ + /usr/X11R6/include \ + /usr/local/include + TEMPLATE_VBOXR3EXE_LIBPATH += \ +- /usr/lib \ +- /usr/X11R6/lib \ + /usr/local/lib + else ifeq ($(KBUILD_TARGET),solaris) + TEMPLATE_VBOXR3EXE_TOOL = GXX3PLAIN +@@ -3955,8 +3953,6 @@ + /usr/X11R6/include \ + /usr/local/include + TEMPLATE_VBOXMAINEXE_LIBPATH += \ +- /usr/lib \ +- /usr/X11R6/lib \ + /usr/local/lib + else ifeq ($(KBUILD_TARGET),solaris) + TEMPLATE_VBOXMAINEXE_TOOL = GXX3PLAIN +@@ -4371,8 +4367,6 @@ + /usr/X11R6/include \ + /usr/local/include + TEMPLATE_VBOXQT4GUIEXE_LIBPATH += \ +- /usr/lib \ +- /usr/X11R6/lib \ + /usr/local/lib + endif + ifeq ($(KBUILD_TARGET),solaris) +@@ -4555,8 +4549,6 @@ + /usr/X11R6/include \ + /usr/local/include + TEMPLATE_VBOXBLDPROG_LIBPATH += \ +- /usr/lib \ +- /usr/X11R6/lib \ + /usr/local/lib + else ifeq ($(KBUILD_HOST),solaris) + TEMPLATE_VBOXBLDPROG_TOOL = GXX3PLAIN diff --git a/emulators/virtualbox-ose-kmod-legacy/files/patch-include-iprt-types.h b/emulators/virtualbox-ose-kmod-legacy/files/patch-include-iprt-types.h deleted file mode 100644 index afa28bbb1461..000000000000 --- a/emulators/virtualbox-ose-kmod-legacy/files/patch-include-iprt-types.h +++ /dev/null @@ -1,19 +0,0 @@ -- Fix build failure on FreeBSD 10-CURRENT after r228444 - -include/iprt/types.h:174: error: redefinition of typedef 'bool' -@/sys/types.h:271: error: previous declaration of 'bool' was here - -Submitted by: Daichi GOTO <daichi@freebsd.org> ---- include/iprt/types.h.orig 2011-10-28 16:29:51.000000000 +0200 -+++ include/iprt/types.h 2011-12-22 10:17:16.000000000 +0100 -@@ -167,6 +167,10 @@ - # if defined(__GNUC__) - # if defined(RT_OS_LINUX) && __GNUC__ < 3 - typedef uint8_t bool; -+# elif defined(RT_OS_FREEBSD) -+# ifndef __bool_true_false_are_defined -+typedef _Bool bool; -+# endif - # else - # if defined(RT_OS_DARWIN) && defined(_STDBOOL_H) - # undef bool diff --git a/emulators/virtualbox-ose-kmod-legacy/files/patch-src-VBox-HostDrivers-Support-freebsd-SUPDrv-freebsd.c b/emulators/virtualbox-ose-kmod-legacy/files/patch-src-VBox-HostDrivers-Support-freebsd-SUPDrv-freebsd.c deleted file mode 100644 index 8bc13932892d..000000000000 --- a/emulators/virtualbox-ose-kmod-legacy/files/patch-src-VBox-HostDrivers-Support-freebsd-SUPDrv-freebsd.c +++ /dev/null @@ -1,31 +0,0 @@ -- Fix compile error: 'D_PSEUDO' undeclared here on 10-CURRENT - -Submitted by: Jung-uk Kim <jkim@FreeBSD.org> - -- Fix check that kernel module can not be unloaded when there -are running VMs - -Submitted by: aeichner -Reported by: avg ---- src/VBox/HostDrivers/Support/freebsd/SUPDrv-freebsd.c.orig 2011-11-04 12:19:39.000000000 +0100 -+++ src/VBox/HostDrivers/Support/freebsd/SUPDrv-freebsd.c 2011-12-13 12:22:44.325251163 +0100 -@@ -100,7 +100,9 @@ - static struct cdevsw g_VBoxDrvFreeBSDChrDevSW = - { - .d_version = D_VERSION, --#if __FreeBSD_version > 800061 -+#if __FreeBSD_version >= 1000000 -+ .d_flags = D_TRACKCLOSE | D_NEEDMINOR, -+#elif __FreeBSD_version > 800061 - .d_flags = D_PSEUDO | D_TRACKCLOSE | D_NEEDMINOR, - #else - .d_flags = D_PSEUDO | D_TRACKCLOSE, -@@ -205,7 +207,7 @@ - Log(("VBoxDrvFreeBSDUnload:\n")); - - if (g_cUsers > 0) -- return EBUSY; -+ return VERR_RESOURCE_BUSY; - - /* - * Reserve what we did in VBoxDrvFreeBSDInit. diff --git a/emulators/virtualbox-ose-kmod-legacy/files/patch-src-VBox-HostDrivers-VBoxNetAdp-Makefile.kmk b/emulators/virtualbox-ose-kmod-legacy/files/patch-src-VBox-HostDrivers-VBoxNetAdp-Makefile.kmk new file mode 100644 index 000000000000..01d25b3ac02a --- /dev/null +++ b/emulators/virtualbox-ose-kmod-legacy/files/patch-src-VBox-HostDrivers-VBoxNetAdp-Makefile.kmk @@ -0,0 +1,25 @@ +Fix kmod panic when VIMAGE is disabled in the kernel and port + +Submitted by: Gleb Kurtsou <gleb@freebsd.org> +--- src/VBox/HostDrivers/VBoxNetAdp/Makefile.kmk.orig 2013-04-12 03:38:10.000000000 -0700 ++++ src/VBox/HostDrivers/VBoxNetAdp/Makefile.kmk 2013-06-11 21:24:05.000000000 -0700 +@@ -143,12 +143,15 @@ + $$(if $$(eq $$(VBoxNetAdp/freebsd/Makefile_VBOX_HARDENED),$$(VBOX_WITH_HARDENING)),,FORCE) \ + | $$(dir $$@) + $(QUIET)$(RM) -f -- $@ +- ifndef VBOX_WITH_HARDENING +- $(QUIET)$(SED) -e "s;-DVBOX_WITH_HARDENING;;g" --output $@ $< +- else + $(QUIET)$(CP) -f $< $@ ++ ifndef VBOX_WITH_HARDENING ++ $(QUIET)$(SED) -e "s;-DVBOX_WITH_HARDENING;;g" --output $@.tmp $@ ++ ${QUIET}$(MV) -f $@.tmp $@ ++ endif ++ ifndef VBOX_WITH_NETFLT_VIMAGE ++ $(QUIET)$(SED) -e "s;-DVIMAGE;;g" --output $@.tmp $@ ++ ${QUIET}$(MV) -f $@.tmp $@ + endif +- + endif # freebsd + + include $(FILE_KBUILD_SUB_FOOTER) diff --git a/emulators/virtualbox-ose-kmod-legacy/files/patch-src-VBox-HostDrivers-VBoxNetAdp-freebsd-Makefile b/emulators/virtualbox-ose-kmod-legacy/files/patch-src-VBox-HostDrivers-VBoxNetAdp-freebsd-Makefile deleted file mode 100644 index 821c767192e1..000000000000 --- a/emulators/virtualbox-ose-kmod-legacy/files/patch-src-VBox-HostDrivers-VBoxNetAdp-freebsd-Makefile +++ /dev/null @@ -1,16 +0,0 @@ -This patch adds support for VIMAGE to VBoxNetAdp and thus -also fixes that panic. - -Submitted by: Mikolaj Golub <trociny at freebsd.org> ---- src/VBox/HostDrivers/VBoxNetAdp/freebsd/Makefile 2012-03-13 15:15:44.000000000 +0200 -+++ src/VBox/HostDrivers/VBoxNetAdp/freebsd/Makefile 2012-04-01 13:27:16.000000000 +0300 -@@ -18,7 +18,7 @@ - - KMOD = vboxnetadp - --CFLAGS += -DRT_OS_FREEBSD -DIN_RING0 -DIN_RT_R0 -DIN_SUP_R0 -DVBOX -DRT_WITH_VBOX -Iinclude -I. -Ir0drv -w -DVBOX_WITH_HARDENING -+CFLAGS += -DRT_OS_FREEBSD -DIN_RING0 -DIN_RT_R0 -DIN_SUP_R0 -DVBOX -DRT_WITH_VBOX -Iinclude -I. -Ir0drv -w -DVBOX_WITH_HARDENING -DVIMAGE - - .if (${MACHINE_ARCH} == "i386") - CFLAGS += -DRT_ARCH_X86 -diff -rpu VirtualBox-4.1.10.orig/src/VBox/HostDrivers/VBoxNetAdp/freebsd/VBoxNetAdp-freebsd.c VirtualBox-4.1.10/src/VBox/HostDrivers/VBoxNetAdp/freebsd/VBoxNetAdp-freebsd.c diff --git a/emulators/virtualbox-ose-kmod-legacy/files/patch-src-VBox-HostDrivers-VBoxNetAdp-freebsd-VBoxNetAdp-freebsd.c b/emulators/virtualbox-ose-kmod-legacy/files/patch-src-VBox-HostDrivers-VBoxNetAdp-freebsd-VBoxNetAdp-freebsd.c deleted file mode 100644 index aa64625d47af..000000000000 --- a/emulators/virtualbox-ose-kmod-legacy/files/patch-src-VBox-HostDrivers-VBoxNetAdp-freebsd-VBoxNetAdp-freebsd.c +++ /dev/null @@ -1,54 +0,0 @@ -This patch adds support for VIMAGE to VBoxNetAdp and thus -also fixes that panic. - -Submitted by: Mikolaj Golub <trociny at freebsd.org> ---- src/VBox/HostDrivers/VBoxNetAdp/freebsd/VBoxNetAdp-freebsd.c.orig 2012-06-20 15:17:03.000000000 +0200 -+++ src/VBox/HostDrivers/VBoxNetAdp/freebsd/VBoxNetAdp-freebsd.c 2012-07-25 18:30:13.695891353 +0200 -@@ -68,6 +68,22 @@ - #define VBOXNETADP_OS_SPECFIC 1 - #include "../VBoxNetAdpInternal.h" - -+#if defined(__FreeBSD_version) && __FreeBSD_version >= 800500 -+# include <sys/jail.h> -+# include <net/vnet.h> -+ -+# define VBOXCURVNET_SET(arg) CURVNET_SET_QUIET(arg) -+# define VBOXCURVNET_SET_FROM_UCRED() VBOXCURVNET_SET(CRED_TO_VNET(curthread->td_ucred)) -+# define VBOXCURVNET_RESTORE() CURVNET_RESTORE() -+ -+#else /* !defined(__FreeBSD_version) || __FreeBSD_version < 800500 */ -+ -+# define VBOXCURVNET_SET(arg) -+# define VBOXCURVNET_SET_FROM_UCRED() -+# define VBOXCURVNET_RESTORE() -+ -+#endif /* !defined(__FreeBSD_version) || __FreeBSD_version < 800500 */ -+ - static int VBoxNetAdpFreeBSDCtrlioctl(struct cdev *, u_long, caddr_t, int flags, - struct thread *); - static struct cdevsw vboxnetadp_cdevsw = -@@ -260,6 +276,7 @@ - { - struct ifnet *ifp; - -+ VBOXCURVNET_SET_FROM_UCRED(); - ifp = if_alloc(IFT_ETHER); - if (ifp == NULL) - return VERR_NO_MEMORY; -@@ -279,6 +296,7 @@ - - strncpy(pThis->szName, ifp->if_xname, VBOXNETADP_MAX_NAME_LEN); - pThis->u.s.ifp = ifp; -+ VBOXCURVNET_RESTORE(); - return 0; - } - -@@ -287,6 +305,8 @@ - struct ifnet *ifp; - - ifp = pThis->u.s.ifp; -+ VBOXCURVNET_SET(ifp->if_vnet); - ether_ifdetach(ifp); - if_free(ifp); -+ VBOXCURVNET_RESTORE(); - } diff --git a/emulators/virtualbox-ose-kmod-legacy/files/patch-src-VBox-HostDrivers-VBoxNetFlt-freebsd-VBoxNetFlt-freebsd.c b/emulators/virtualbox-ose-kmod-legacy/files/patch-src-VBox-HostDrivers-VBoxNetFlt-freebsd-VBoxNetFlt-freebsd.c index 185931e4f504..6cb5a1ebd30c 100644 --- a/emulators/virtualbox-ose-kmod-legacy/files/patch-src-VBox-HostDrivers-VBoxNetFlt-freebsd-VBoxNetFlt-freebsd.c +++ b/emulators/virtualbox-ose-kmod-legacy/files/patch-src-VBox-HostDrivers-VBoxNetFlt-freebsd-VBoxNetFlt-freebsd.c @@ -1,31 +1,72 @@ -The attached patch fixes a kernel crash on FreeBSD 10-CURRENT hosts -with VIMAGE enabled when a VM is powered off. +Add VLAN trunking support to vboxnetflt -Submitted by: Mikolaj Golub <trociny at freebsd.org> ---- src/VBox/HostDrivers/VBoxNetFlt/freebsd/VBoxNetFlt-freebsd.c 2012-03-13 15:15:44.000000000 +0200 -+++ src/VBox/HostDrivers/VBoxNetFlt/freebsd/VBoxNetFlt-freebsd.c 2012-04-01 13:43:02.000000000 +0300 -@@ -651,13 +651,13 @@ bool vboxNetFltOsMaybeRediscovered(PVBOX - ng_rmnode_self(pThis->u.s.node); - pThis->u.s.node = NULL; - } -+ VBOXCURVNET_RESTORE(); +See: http://lists.freebsd.org/pipermail/freebsd-emulation/2012-April/009698.html +See: http://lists.freebsd.org/pipermail/freebsd-emulation/2013-May/010605.html +Submitted by: Landon J Fuller <landonf at plausible.coop> +--- ./src/VBox/HostDrivers/VBoxNetFlt/freebsd/VBoxNetFlt-freebsd.c.orig 2013-04-12 06:38:11.000000000 -0400 ++++ ./src/VBox/HostDrivers/VBoxNetFlt/freebsd/VBoxNetFlt-freebsd.c 2013-05-25 20:14:52.152180452 -0400 +@@ -51,6 +51,7 @@ + #include <net/if_dl.h> + #include <net/if_types.h> + #include <net/ethernet.h> ++#include <net/if_vlan_var.h> - if (ifp0 != NULL) - { - vboxNetFltOsDeleteInstance(pThis); - vboxNetFltOsInitInstance(pThis, NULL); - } -- VBOXCURVNET_RESTORE(); + #include <netgraph/ng_message.h> + #include <netgraph/netgraph.h> +@@ -427,6 +428,8 @@ + struct ifnet *ifp = pThis->u.s.ifp; + unsigned int cSegs = 0; + bool fDropIt = false, fActive; ++ bool is_vl_tagged = false; ++ uint16_t vl_tag; + PINTNETSG pSG; - return !ASMAtomicUoReadBool(&pThis->fDisconnectedFromHost); - } -@@ -671,8 +671,10 @@ void vboxNetFltOsDeleteInstance(PVBOXNET - mtx_destroy(&pThis->u.s.inq.ifq_mtx); - mtx_destroy(&pThis->u.s.outq.ifq_mtx); + VBOXCURVNET_SET(ifp->if_vnet); +@@ -439,6 +442,19 @@ + if (m == NULL) + break; -+ VBOXCURVNET_SET_FROM_UCRED(); - if (pThis->u.s.node != NULL) - ng_rmnode_self(pThis->u.s.node); -+ VBOXCURVNET_RESTORE(); - pThis->u.s.node = NULL; - } ++ /* Prepend a VLAN header for consumption by the virtual switch */ ++ if (m->m_flags & M_VLANTAG) { ++ vl_tag = m->m_pkthdr.ether_vtag; ++ is_vl_tagged = true; ++ ++ m = ether_vlanencap(m, m->m_pkthdr.ether_vtag); ++ if (m == NULL) { ++ printf("vboxflt: unable to prepend VLAN header\n"); ++ break; ++ } ++ m->m_flags &= ~M_VLANTAG; ++ } ++ + for (m0 = m; m0 != NULL; m0 = m0->m_next) + if (m0->m_len > 0) + cSegs++; +@@ -453,6 +469,27 @@ + vboxNetFltFreeBSDMBufToSG(pThis, m, pSG, cSegs, 0); + fDropIt = pThis->pSwitchPort->pfnRecv(pThis->pSwitchPort, NULL /* pvIf */, pSG, INTNETTRUNKDIR_WIRE); + RTMemTmpFree(pSG); ++ ++ /* Restore the VLAN flags before re-injecting the packet */ ++ if (is_vl_tagged && !fDropIt) { ++ struct ether_vlan_header *vl_hdr; ++ ++ /* This shouldn't fail, as the header was just prepended */ ++ if (m->m_len < sizeof(*vl_hdr) && (m = m_pullup(m, sizeof(*vl_hdr))) == NULL) { ++ printf("vboxflt: unable to pullup VLAN header\n"); ++ m_freem(m); ++ break; ++ } ++ ++ /* Copy the MAC dhost/shost over the 802.1q field */ ++ vl_hdr = mtod(m, struct ether_vlan_header *); ++ bcopy((char *)vl_hdr, (char *)vl_hdr + ETHER_VLAN_ENCAP_LEN, ETHER_HDR_LEN - ETHER_TYPE_LEN); ++ m_adj(m, ETHER_VLAN_ENCAP_LEN); ++ ++ m->m_pkthdr.ether_vtag = vl_tag; ++ m->m_flags |= M_VLANTAG; ++ } ++ + if (fDropIt) + m_freem(m); + else diff --git a/emulators/virtualbox-ose-kmod-legacy/files/patch-src-VBox-Runtime-r0drv-freebsd-alloc-r0drv-freebsd.c b/emulators/virtualbox-ose-kmod-legacy/files/patch-src-VBox-Runtime-r0drv-freebsd-alloc-r0drv-freebsd.c new file mode 100644 index 000000000000..f8b9743c21c8 --- /dev/null +++ b/emulators/virtualbox-ose-kmod-legacy/files/patch-src-VBox-Runtime-r0drv-freebsd-alloc-r0drv-freebsd.c @@ -0,0 +1,16 @@ +--- src/VBox/Runtime/r0drv/freebsd/alloc-r0drv-freebsd.c 2013-09-06 06:30:30.000000000 -0600 ++++ src/VBox/Runtime/r0drv/freebsd/alloc-r0drv-freebsd.c 2013-09-18 12:01:45.000000000 -0600 +@@ -79,8 +79,13 @@ + return VERR_NO_EXEC_MEMORY; + + /* Addr contains a start address vm_map_find will start searching for suitable space at. */ ++#if __FreeBSD_version >= 1000055 ++ int rc = vm_map_find(kernel_map, pVmObject, 0, &Addr, ++ cbAllocated, 0, VMFS_ANY_SPACE, VM_PROT_ALL, VM_PROT_ALL, 0); ++#else + int rc = vm_map_find(kernel_map, pVmObject, 0, &Addr, + cbAllocated, TRUE, VM_PROT_ALL, VM_PROT_ALL, 0); ++#endif + if (rc == KERN_SUCCESS) + { + rc = vm_map_wire(kernel_map, Addr, Addr + cbAllocated, diff --git a/emulators/virtualbox-ose-kmod-legacy/files/patch-src-VBox-Runtime-r0drv-freebsd-memobj-r0drv-freebsd.c b/emulators/virtualbox-ose-kmod-legacy/files/patch-src-VBox-Runtime-r0drv-freebsd-memobj-r0drv-freebsd.c index 92017090571b..b666b7ed0362 100644 --- a/emulators/virtualbox-ose-kmod-legacy/files/patch-src-VBox-Runtime-r0drv-freebsd-memobj-r0drv-freebsd.c +++ b/emulators/virtualbox-ose-kmod-legacy/files/patch-src-VBox-Runtime-r0drv-freebsd-memobj-r0drv-freebsd.c @@ -1,893 +1,56 @@ ---- src/VBox/Runtime/r0drv/freebsd/memobj-r0drv-freebsd.c.orig 2012-12-19 20:51:59.000000000 +0100 -+++ src/VBox/Runtime/r0drv/freebsd/memobj-r0drv-freebsd.c 2012-12-20 11:57:20.999850739 +0100 -@@ -5,6 +5,7 @@ - - /* - * Copyright (c) 2007 knut st. osmundsen <bird-src-spam@anduin.net> -+ * Copyright (c) 2011 Andriy Gapon <avg@FreeBSD.org> - * - * Permission is hereby granted, free of charge, to any person - * obtaining a copy of this software and associated documentation -@@ -54,23 +55,8 @@ - /** The core structure. */ - RTR0MEMOBJINTERNAL Core; - /** Type dependent data */ -- union -- { -- /** Non physical memory allocations */ -- struct -- { -- /** The VM object associated with the allocation. */ -- vm_object_t pObject; -- } NonPhys; -- /** Physical memory allocations */ -- struct -- { -- /** Number of pages */ -- uint32_t cPages; -- /** Array of pages - variable */ -- vm_page_t apPages[1]; -- } Phys; -- } u; -+ /** The VM object associated with the allocation. */ -+ vm_object_t pObject; - } RTR0MEMOBJFREEBSD, *PRTR0MEMOBJFREEBSD; - - -@@ -125,25 +111,14 @@ - - switch (pMemFreeBSD->Core.enmType) - { -- case RTR0MEMOBJTYPE_CONT: -- contigfree(pMemFreeBSD->Core.pv, pMemFreeBSD->Core.cb, M_IPRTMOBJ); -- break; -- - case RTR0MEMOBJTYPE_PAGE: -+ case RTR0MEMOBJTYPE_LOW: -+ case RTR0MEMOBJTYPE_CONT: - { - rc = vm_map_remove(kernel_map, - (vm_offset_t)pMemFreeBSD->Core.pv, - (vm_offset_t)pMemFreeBSD->Core.pv + pMemFreeBSD->Core.cb); - AssertMsg(rc == KERN_SUCCESS, ("%#x", rc)); -- -- vm_page_lock_queues(); -- for (uint32_t iPage = 0; iPage < pMemFreeBSD->u.Phys.cPages; iPage++) -- { -- vm_page_t pPage = pMemFreeBSD->u.Phys.apPages[iPage]; -- vm_page_unwire(pPage, 0); -- vm_page_free(pPage); -- } -- vm_page_unlock_queues(); - break; - } - -@@ -165,8 +140,8 @@ - case RTR0MEMOBJTYPE_RES_VIRT: - { - vm_map_t pMap = kernel_map; -- if (pMemFreeBSD->Core.u.Lock.R0Process != NIL_RTR0PROCESS) -- pMap = &((struct proc *)pMemFreeBSD->Core.u.Lock.R0Process)->p_vmspace->vm_map; -+ if (pMemFreeBSD->Core.u.ResVirt.R0Process != NIL_RTR0PROCESS) -+ pMap = &((struct proc *)pMemFreeBSD->Core.u.ResVirt.R0Process)->p_vmspace->vm_map; - rc = vm_map_remove(pMap, - (vm_offset_t)pMemFreeBSD->Core.pv, - (vm_offset_t)pMemFreeBSD->Core.pv + pMemFreeBSD->Core.cb); -@@ -180,7 +155,6 @@ - - if (pMemFreeBSD->Core.u.Mapping.R0Process != NIL_RTR0PROCESS) - pMap = &((struct proc *)pMemFreeBSD->Core.u.Mapping.R0Process)->p_vmspace->vm_map; -- - rc = vm_map_remove(pMap, - (vm_offset_t)pMemFreeBSD->Core.pv, - (vm_offset_t)pMemFreeBSD->Core.pv + pMemFreeBSD->Core.cb); -@@ -191,26 +165,24 @@ - case RTR0MEMOBJTYPE_PHYS: - case RTR0MEMOBJTYPE_PHYS_NC: - { -+ VM_OBJECT_LOCK(pMemFreeBSD->pObject); -+ vm_page_t pPage = vm_page_find_least(pMemFreeBSD->pObject, 0); +From Alan L. Cox on FreeBSD-current: + + I just glanced at the virtualbox code for a couple minutes. For + FreeBSD 9 and 10, these lock acquires are completely unnecessary, and + have been since FreeBSD 9.0. Just delete them. They may be equally + unnecessary under FreeBSD 8, but I didn't look carefully enough to + answer that question. + +[1] http://lists.freebsd.org/pipermail/freebsd-current/2012-November/037963.html +--- + src/VBox/Runtime/r0drv/freebsd/memobj-r0drv-freebsd.c | 9 +++++++++ + 1 file changed, 9 insertions(+) + +diff --git a/src/VBox/Runtime/r0drv/freebsd/memobj-r0drv-freebsd.c b/src/VBox/Runtime/r0drv/freebsd/memobj-r0drv-freebsd.c +index 5c90cf3..1176b51 100644 +--- src/VBox/Runtime/r0drv/freebsd/memobj-r0drv-freebsd.c ++++ src/VBox/Runtime/r0drv/freebsd/memobj-r0drv-freebsd.c +@@ -164,14 +164,19 @@ DECLHIDDEN(int) rtR0MemObjNativeFree(RTR0MEMOBJ pMem) + { + VM_OBJECT_LOCK(pMemFreeBSD->pObject); + vm_page_t pPage = vm_page_find_least(pMemFreeBSD->pObject, 0); +#if __FreeBSD_version < 900000 + /* See http://lists.freebsd.org/pipermail/freebsd-current/2012-November/037963.html */ vm_page_lock_queues(); -- for (uint32_t iPage = 0; iPage < pMemFreeBSD->u.Phys.cPages; iPage++) +#endif -+ for (vm_page_t pPage = vm_page_find_least(pMemFreeBSD->pObject, 0); -+ pPage != NULL; -+ pPage = vm_page_next(pPage)) + for (vm_page_t pPage = vm_page_find_least(pMemFreeBSD->pObject, 0); + pPage != NULL; + pPage = vm_page_next(pPage)) { -- vm_page_t pPage = pMemFreeBSD->u.Phys.apPages[iPage]; vm_page_unwire(pPage, 0); -- vm_page_free(pPage); } ++#if __FreeBSD_version < 900000 vm_page_unlock_queues(); -+ VM_OBJECT_UNLOCK(pMemFreeBSD->pObject); -+ vm_object_deallocate(pMemFreeBSD->pObject); - break; - } - --#ifdef USE_KMEM_ALLOC_ATTR -- case RTR0MEMOBJTYPE_LOW: -- { -- kmem_free(kernel_map, (vm_offset_t)pMemFreeBSD->Core.pv, pMemFreeBSD->Core.cb); -- break; -- } --#else -- case RTR0MEMOBJTYPE_LOW: /* unused */ --#endif - default: - AssertMsgFailed(("enmType=%d\n", pMemFreeBSD->Core.enmType)); - return VERR_INTERNAL_ERROR; -@@ -220,183 +192,185 @@ - } - - --DECLHIDDEN(int) rtR0MemObjNativeAllocPage(PPRTR0MEMOBJINTERNAL ppMem, size_t cb, bool fExecutable) --{ -- int rc; -- size_t cPages = cb >> PAGE_SHIFT; -- -- /* create the object. */ -- PRTR0MEMOBJFREEBSD pMemFreeBSD = (PRTR0MEMOBJFREEBSD)rtR0MemObjNew(RT_OFFSETOF(RTR0MEMOBJFREEBSD, u.Phys.apPages[cPages]), -- RTR0MEMOBJTYPE_PAGE, NULL, cb); -- if (!pMemFreeBSD) -- return VERR_NO_MEMORY; -- -- pMemFreeBSD->u.Phys.cPages = cPages; -+static vm_page_t FreeBSDContigPhysAllocHelper(vm_object_t pObject, vm_pindex_t iPIndex, -+ u_long cPages, vm_paddr_t VmPhysAddrHigh, -+ u_long uAlignment, bool fWire) -+{ -+ vm_page_t pPages; -+ int tries = 0; -+#if __FreeBSD_version > 1000000 -+ int flags = VM_ALLOC_INTERRUPT | VM_ALLOC_NOBUSY; -+ -+ if (fWire) -+ flags |= VM_ALLOC_WIRED; -+ while (1) -+ { -+ VM_OBJECT_LOCK(pObject); -+ pPages = vm_page_alloc_contig(pObject, iPIndex, flags, cPages, 0, VmPhysAddrHigh, uAlignment, 0, VM_MEMATTR_DEFAULT); -+ VM_OBJECT_UNLOCK(pObject); -+ if (pPages || tries >= 1) -+ break; -+ vm_pageout_grow_cache(tries, 0, VmPhysAddrHigh); -+ tries++; -+ } -+ return pPages; -+#else - -- vm_offset_t MapAddress = vm_map_min(kernel_map); -- rc = vm_map_find(kernel_map, /* map */ -- NULL, /* object */ -- 0, /* offset */ -- &MapAddress, /* addr (IN/OUT) */ -- cb, /* length */ -- TRUE, /* find_space */ -- fExecutable /* protection */ -- ? VM_PROT_ALL -- : VM_PROT_RW, -- VM_PROT_ALL, /* max(_prot) */ -- 0); /* cow (copy-on-write) */ -- if (rc == KERN_SUCCESS) -+ while (1) - { -- rc = VINF_SUCCESS; -- -- for (size_t iPage = 0; iPage < cPages; iPage++) -+ pPages = vm_phys_alloc_contig(cPages, 0, VmPhysAddrHigh, uAlignment, 0); -+ if (pPages || tries >= 1) -+ break; -+ vm_contig_grow_cache(tries, 0, VmPhysAddrHigh); -+ tries++; -+ } -+ if (!pPages) -+ return pPages; -+ VM_OBJECT_LOCK(pObject); -+ for (vm_pindex_t iPage = 0; iPage < cPages; iPage++) -+ { -+ vm_page_t pPage = pPages + iPage; -+ vm_page_insert(pPage, pObject, iPIndex + iPage); -+ pPage->valid = VM_PAGE_BITS_ALL; -+ if (fWire) - { -- vm_page_t pPage; -+ pPage->wire_count = 1; -+ atomic_add_int(&cnt.v_wire_count, 1); -+ } -+ } -+ VM_OBJECT_UNLOCK(pObject); -+ return pPages; +#endif -+} - -- pPage = vm_page_alloc(NULL, iPage, -- VM_ALLOC_SYSTEM | -- VM_ALLOC_WIRED | VM_ALLOC_NOOBJ); -+static int FreeBSDPhysAllocHelper(vm_object_t pObject, u_long cPages, -+ vm_paddr_t VmPhysAddrHigh, u_long uAlignment, -+ bool fContiguous, bool fWire) -+{ -+ if (fContiguous) -+ { -+ if (FreeBSDContigPhysAllocHelper(pObject, 0, cPages, VmPhysAddrHigh, uAlignment, fWire) != NULL) -+ return VINF_SUCCESS; -+ else -+ return VERR_NO_MEMORY; -+ } - -- if (!pPage) -+ for (vm_pindex_t iPage = 0; iPage < cPages; iPage++) -+ { -+ vm_page_t pPage = FreeBSDContigPhysAllocHelper(pObject, iPage, 1, VmPhysAddrHigh, uAlignment, fWire); -+ if (!pPage) -+ { -+ /* Free all allocated pages */ -+ VM_OBJECT_LOCK(pObject); -+ while (iPage-- > 0) + VM_OBJECT_UNLOCK(pMemFreeBSD->pObject); + vm_object_deallocate(pMemFreeBSD->pObject); + break; +@@ -263,11 +268,15 @@ static int rtR0MemObjFreeBSDPhysAllocHelper(vm_object_t pObject, u_long cPages, + while (iPage-- > 0) { -- /* -- * Out of pages -- * Remove already allocated pages -- */ -- while (iPage-- > 0) -- { -- pPage = pMemFreeBSD->u.Phys.apPages[iPage]; -- vm_page_lock_queues(); -+ pPage = vm_page_lookup(pObject, iPage); + pPage = vm_page_lookup(pObject, iPage); +#if __FreeBSD_version < 900000 -+ vm_page_lock_queues(); + vm_page_lock_queues(); +#endif -+ if (fWire) + if (fWire) vm_page_unwire(pPage, 0); -- vm_page_free(pPage); -- vm_page_unlock_queues(); -- } -- rc = VERR_NO_MEMORY; -- break; -+ vm_page_free(pPage); -+ vm_page_unlock_queues(); - } -- -- pPage->valid = VM_PAGE_BITS_ALL; -- pMemFreeBSD->u.Phys.apPages[iPage] = pPage; -+ VM_OBJECT_UNLOCK(pObject); -+ return VERR_NO_MEMORY; - } -+ } -+ return VINF_SUCCESS; -+} - -- if (rc == VINF_SUCCESS) -- { -- vm_offset_t AddressDst = MapAddress; -+static int FreeBSDAllocHelper(PRTR0MEMOBJFREEBSD pMemFreeBSD, bool fExecutable, -+ vm_paddr_t VmPhysAddrHigh, bool fContiguous) -+{ -+ int rc; -+ size_t cPages = atop(pMemFreeBSD->Core.cb); - -- for (size_t iPage = 0; iPage < cPages; iPage++) -- { -- vm_page_t pPage = pMemFreeBSD->u.Phys.apPages[iPage]; -+ pMemFreeBSD->pObject = vm_object_allocate(OBJT_PHYS, cPages); -+ vm_offset_t MapAddress = vm_map_min(kernel_map); - -- MY_PMAP_ENTER(kernel_map->pmap, AddressDst, pPage, -- fExecutable -- ? VM_PROT_ALL -- : VM_PROT_RW, -- TRUE); -+ // no additional object reference for auto-deallocation upon unmapping -+ rc = vm_map_find(kernel_map, pMemFreeBSD->pObject, 0, -+ &MapAddress, pMemFreeBSD->Core.cb, VMFS_ANY_SPACE, -+ fExecutable ? VM_PROT_ALL : VM_PROT_RW, VM_PROT_ALL, 0); - -- AddressDst += PAGE_SIZE; -- } -+ if (rc == KERN_SUCCESS) -+ { -+ rc = FreeBSDPhysAllocHelper(pMemFreeBSD->pObject, cPages, VmPhysAddrHigh, PAGE_SIZE, fContiguous, false); -+ if (RT_SUCCESS(rc)) -+ { -+ vm_map_wire(kernel_map, MapAddress, MapAddress + pMemFreeBSD->Core.cb, VM_MAP_WIRE_SYSTEM|VM_MAP_WIRE_NOHOLES); - - /* Store start address */ - pMemFreeBSD->Core.pv = (void *)MapAddress; -- *ppMem = &pMemFreeBSD->Core; - return VINF_SUCCESS; - } -- } -- rc = VERR_NO_MEMORY; /** @todo fix translation (borrow from darwin) */ - -- rtR0MemObjDelete(&pMemFreeBSD->Core); -+ vm_map_remove(kernel_map, MapAddress, MapAddress + pMemFreeBSD->Core.cb); -+ } -+ else -+ { -+ rc = VERR_NO_MEMORY; /** @todo fix translation (borrow from darwin) */ -+ vm_object_deallocate(pMemFreeBSD->pObject); -+ } - return rc; - } - -- --DECLHIDDEN(int) rtR0MemObjNativeAllocLow(PPRTR0MEMOBJINTERNAL ppMem, size_t cb, bool fExecutable) -+DECLHIDDEN(int) rtR0MemObjNativeAllocPage(PPRTR0MEMOBJINTERNAL ppMem, size_t cb, bool fExecutable) - { --#ifdef USE_KMEM_ALLOC_ATTR -- /* -- * Use kmem_alloc_attr, fExectuable is not needed because the -- * memory will be executable by default -- */ -- NOREF(fExecutable); -- -- /* create the object. */ -- PRTR0MEMOBJFREEBSD pMemFreeBSD = (PRTR0MEMOBJFREEBSD)rtR0MemObjNew(sizeof(*pMemFreeBSD), RTR0MEMOBJTYPE_LOW, NULL, cb); -+ PRTR0MEMOBJFREEBSD pMemFreeBSD = (PRTR0MEMOBJFREEBSD)rtR0MemObjNew(sizeof(*pMemFreeBSD), -+ RTR0MEMOBJTYPE_PAGE, NULL, cb); - if (!pMemFreeBSD) - return VERR_NO_MEMORY; - -- pMemFreeBSD->Core.pv = (void *)kmem_alloc_attr(kernel_map, /* Kernel */ -- cb, /* Amount */ -- M_ZERO, /* Zero memory */ -- 0, /* Low physical address */ -- _4G - PAGE_SIZE, /* Highest physical address */ -- VM_MEMATTR_DEFAULT); /* Default memory attributes */ -- if (!pMemFreeBSD->Core.pv) -- return VERR_NO_MEMORY; -- -- *ppMem = &pMemFreeBSD->Core; -- -- return VINF_SUCCESS; --#else -- /* -- * Try a Alloc first and see if we get luck, if not try contigmalloc. -- * Might wish to try find our own pages or something later if this -- * turns into a problemspot on AMD64 boxes. -- */ -- int rc = rtR0MemObjNativeAllocPage(ppMem, cb, fExecutable); -- if (RT_SUCCESS(rc)) -+ int rc = FreeBSDAllocHelper(pMemFreeBSD, fExecutable, ~(vm_paddr_t)0, false); -+ if (RT_FAILURE(rc)) - { -- size_t iPage = cb >> PAGE_SHIFT; -- while (iPage-- > 0) -- if (rtR0MemObjNativeGetPagePhysAddr(*ppMem, iPage) > (_4G - PAGE_SIZE)) -- { -- RTR0MemObjFree(*ppMem, false); -- *ppMem = NULL; -- rc = VERR_NO_MEMORY; -- break; -- } -+ rtR0MemObjDelete(&pMemFreeBSD->Core); -+ return rc; - } -- if (RT_FAILURE(rc)) -- rc = rtR0MemObjNativeAllocCont(ppMem, cb, fExecutable); -+ -+ *ppMem = &pMemFreeBSD->Core; - return rc; --#endif - } - - --DECLHIDDEN(int) rtR0MemObjNativeAllocCont(PPRTR0MEMOBJINTERNAL ppMem, size_t cb, bool fExecutable) -+DECLHIDDEN(int) rtR0MemObjNativeAllocLow(PPRTR0MEMOBJINTERNAL ppMem, size_t cb, bool fExecutable) - { -- /* create the object. */ -- PRTR0MEMOBJFREEBSD pMemFreeBSD = (PRTR0MEMOBJFREEBSD)rtR0MemObjNew(sizeof(*pMemFreeBSD), RTR0MEMOBJTYPE_CONT, NULL, cb); -+ PRTR0MEMOBJFREEBSD pMemFreeBSD = (PRTR0MEMOBJFREEBSD)rtR0MemObjNew(sizeof(*pMemFreeBSD), -+ RTR0MEMOBJTYPE_LOW, NULL, cb); - if (!pMemFreeBSD) - return VERR_NO_MEMORY; - -- /* do the allocation. */ -- pMemFreeBSD->Core.pv = contigmalloc(cb, /* size */ -- M_IPRTMOBJ, /* type */ -- M_NOWAIT | M_ZERO, /* flags */ -- 0, /* lowest physical address*/ -- _4G-1, /* highest physical address */ -- PAGE_SIZE, /* alignment. */ -- 0); /* boundary */ -- if (pMemFreeBSD->Core.pv) -+ int rc = FreeBSDAllocHelper(pMemFreeBSD, fExecutable, _4G - 1, false); -+ if (RT_FAILURE(rc)) - { -- pMemFreeBSD->Core.u.Cont.Phys = vtophys(pMemFreeBSD->Core.pv); -- *ppMem = &pMemFreeBSD->Core; -- return VINF_SUCCESS; -+ rtR0MemObjDelete(&pMemFreeBSD->Core); -+ return rc; - } - -- NOREF(fExecutable); -- rtR0MemObjDelete(&pMemFreeBSD->Core); -- return VERR_NO_MEMORY; -+ *ppMem = &pMemFreeBSD->Core; -+ return rc; - } - - --static void rtR0MemObjFreeBSDPhysPageInit(vm_page_t pPage, vm_pindex_t iPage) -+DECLHIDDEN(int) rtR0MemObjNativeAllocCont(PPRTR0MEMOBJINTERNAL ppMem, size_t cb, bool fExecutable) - { -- pPage->wire_count = 1; -- pPage->pindex = iPage; -- pPage->act_count = 0; -- pPage->oflags = 0; -- pPage->flags = PG_UNMANAGED; -- atomic_add_int(&cnt.v_wire_count, 1); -+ PRTR0MEMOBJFREEBSD pMemFreeBSD = (PRTR0MEMOBJFREEBSD)rtR0MemObjNew(sizeof(*pMemFreeBSD), -+ RTR0MEMOBJTYPE_CONT, NULL, cb); -+ if (!pMemFreeBSD) -+ return VERR_NO_MEMORY; -+ -+ int rc = FreeBSDAllocHelper(pMemFreeBSD, fExecutable, _4G - 1, true); -+ if (RT_FAILURE(rc)) -+ { -+ rtR0MemObjDelete(&pMemFreeBSD->Core); -+ return rc; -+ } -+ -+ pMemFreeBSD->Core.u.Cont.Phys = vtophys(pMemFreeBSD->Core.pv); -+ *ppMem = &pMemFreeBSD->Core; -+ return rc; - } - - -@@ -405,69 +379,36 @@ - RTHCPHYS PhysHighest, size_t uAlignment, - bool fContiguous) - { -- int rc = VINF_SUCCESS; -- uint32_t cPages = cb >> PAGE_SHIFT; -+ uint32_t cPages = atop(cb); - vm_paddr_t VmPhysAddrHigh; - - /* create the object. */ -- PRTR0MEMOBJFREEBSD pMemFreeBSD = (PRTR0MEMOBJFREEBSD)rtR0MemObjNew(RT_OFFSETOF(RTR0MEMOBJFREEBSD, u.Phys.apPages[cPages]), -+ PRTR0MEMOBJFREEBSD pMemFreeBSD = (PRTR0MEMOBJFREEBSD)rtR0MemObjNew(sizeof(*pMemFreeBSD), - enmType, NULL, cb); - if (!pMemFreeBSD) - return VERR_NO_MEMORY; - -- pMemFreeBSD->u.Phys.cPages = cPages; -+ pMemFreeBSD->pObject = vm_object_allocate(OBJT_PHYS, atop(cb)); - - if (PhysHighest != NIL_RTHCPHYS) - VmPhysAddrHigh = PhysHighest; - else - VmPhysAddrHigh = ~(vm_paddr_t)0; - -- if (fContiguous) -- { -- vm_page_t pPage = vm_phys_alloc_contig(cPages, 0, VmPhysAddrHigh, uAlignment, 0); -- -- if (pPage) -- for (uint32_t iPage = 0; iPage < cPages; iPage++) -- { -- rtR0MemObjFreeBSDPhysPageInit(&pPage[iPage], iPage); -- pMemFreeBSD->u.Phys.apPages[iPage] = &pPage[iPage]; -- } -- else -- rc = VERR_NO_MEMORY; -- } -- else -- { -- /* Allocate page by page */ -- for (uint32_t iPage = 0; iPage < cPages; iPage++) -- { -- vm_page_t pPage = vm_phys_alloc_contig(1, 0, VmPhysAddrHigh, uAlignment, 0); -- -- if (!pPage) -- { -- /* Free all allocated pages */ -- while (iPage-- > 0) -- { -- pPage = pMemFreeBSD->u.Phys.apPages[iPage]; -- vm_page_lock_queues(); -- vm_page_unwire(pPage, 0); -- vm_page_free(pPage); -- vm_page_unlock_queues(); -- } -- rc = VERR_NO_MEMORY; -- break; -- } -- rtR0MemObjFreeBSDPhysPageInit(pPage, iPage); -- pMemFreeBSD->u.Phys.apPages[iPage] = pPage; -- } -- } -+ int rc = FreeBSDPhysAllocHelper(pMemFreeBSD->pObject, cPages, VmPhysAddrHigh, uAlignment, fContiguous, true); - -- if (RT_FAILURE(rc)) -+ if (RT_FAILURE(rc)) { -+ vm_object_deallocate(pMemFreeBSD->pObject); - rtR0MemObjDelete(&pMemFreeBSD->Core); -+ } - else - { -- if (enmType == RTR0MEMOBJTYPE_PHYS) -+ if (fContiguous) - { -- pMemFreeBSD->Core.u.Phys.PhysBase = VM_PAGE_TO_PHYS(pMemFreeBSD->u.Phys.apPages[0]); -+ Assert(enmType == RTR0MEMOBJTYPE_PHYS); -+ VM_OBJECT_LOCK(pMemFreeBSD->pObject); -+ pMemFreeBSD->Core.u.Phys.PhysBase = VM_PAGE_TO_PHYS(vm_page_find_least(pMemFreeBSD->pObject, 0)); -+ VM_OBJECT_UNLOCK(pMemFreeBSD->pObject); - pMemFreeBSD->Core.u.Phys.fAllocated = true; - } - -@@ -480,42 +421,13 @@ - - DECLHIDDEN(int) rtR0MemObjNativeAllocPhys(PPRTR0MEMOBJINTERNAL ppMem, size_t cb, RTHCPHYS PhysHighest, size_t uAlignment) - { --#if 1 - return rtR0MemObjFreeBSDAllocPhysPages(ppMem, RTR0MEMOBJTYPE_PHYS, cb, PhysHighest, uAlignment, true); --#else -- /* create the object. */ -- PRTR0MEMOBJFREEBSD pMemFreeBSD = (PRTR0MEMOBJFREEBSD)rtR0MemObjNew(sizeof(*pMemFreeBSD), RTR0MEMOBJTYPE_CONT, NULL, cb); -- if (!pMemFreeBSD) -- return VERR_NO_MEMORY; -- -- /* do the allocation. */ -- pMemFreeBSD->Core.pv = contigmalloc(cb, /* size */ -- M_IPRTMOBJ, /* type */ -- M_NOWAIT | M_ZERO, /* flags */ -- 0, /* lowest physical address*/ -- _4G-1, /* highest physical address */ -- uAlignment, /* alignment. */ -- 0); /* boundary */ -- if (pMemFreeBSD->Core.pv) -- { -- pMemFreeBSD->Core.u.Cont.Phys = vtophys(pMemFreeBSD->Core.pv); -- *ppMem = &pMemFreeBSD->Core; -- return VINF_SUCCESS; -- } -- -- rtR0MemObjDelete(&pMemFreeBSD->Core); -- return VERR_NO_MEMORY; --#endif - } - - - DECLHIDDEN(int) rtR0MemObjNativeAllocPhysNC(PPRTR0MEMOBJINTERNAL ppMem, size_t cb, RTHCPHYS PhysHighest) - { --#if 1 - return rtR0MemObjFreeBSDAllocPhysPages(ppMem, RTR0MEMOBJTYPE_PHYS_NC, cb, PhysHighest, PAGE_SIZE, false); --#else -- return VERR_NOT_SUPPORTED; --#endif - } - - -@@ -625,49 +537,41 @@ - if (!pMemFreeBSD) - return VERR_NO_MEMORY; - -- /* -- * Allocate an empty VM object and map it into the requested map. -- */ -- pMemFreeBSD->u.NonPhys.pObject = vm_object_allocate(OBJT_DEFAULT, cb >> PAGE_SHIFT); -- if (pMemFreeBSD->u.NonPhys.pObject) -+ vm_offset_t MapAddress = pvFixed != (void *)-1 -+ ? (vm_offset_t)pvFixed -+ : vm_map_min(pMap); -+ if (pvFixed != (void *)-1) -+ vm_map_remove(pMap, -+ MapAddress, -+ MapAddress + cb); -+ -+ rc = vm_map_find(pMap, /* map */ -+ NULL, /* object */ -+ 0, /* offset */ -+ &MapAddress, /* addr (IN/OUT) */ -+ cb, /* length */ -+ pvFixed == (void *)-1 ? VMFS_ANY_SPACE : VMFS_NO_SPACE, -+ /* find_space */ -+ VM_PROT_NONE, /* protection */ -+ VM_PROT_ALL, /* max(_prot) ?? */ -+ 0); /* cow (copy-on-write) */ -+ if (rc == KERN_SUCCESS) - { -- vm_offset_t MapAddress = pvFixed != (void *)-1 -- ? (vm_offset_t)pvFixed -- : vm_map_min(pMap); -- if (pvFixed != (void *)-1) -- vm_map_remove(pMap, -- MapAddress, -- MapAddress + cb); -- -- rc = vm_map_find(pMap, /* map */ -- pMemFreeBSD->u.NonPhys.pObject, /* object */ -- 0, /* offset */ -- &MapAddress, /* addr (IN/OUT) */ -- cb, /* length */ -- pvFixed == (void *)-1, /* find_space */ -- VM_PROT_NONE, /* protection */ -- VM_PROT_ALL, /* max(_prot) ?? */ -- 0); /* cow (copy-on-write) */ -- if (rc == KERN_SUCCESS) -+ if (R0Process != NIL_RTR0PROCESS) - { -- if (R0Process != NIL_RTR0PROCESS) -- { -- rc = vm_map_inherit(pMap, -- MapAddress, -- MapAddress + cb, -- VM_INHERIT_SHARE); -- AssertMsg(rc == KERN_SUCCESS, ("%#x\n", rc)); -- } -- pMemFreeBSD->Core.pv = (void *)MapAddress; -- pMemFreeBSD->Core.u.ResVirt.R0Process = R0Process; -- *ppMem = &pMemFreeBSD->Core; -- return VINF_SUCCESS; -+ rc = vm_map_inherit(pMap, -+ MapAddress, -+ MapAddress + cb, -+ VM_INHERIT_SHARE); -+ AssertMsg(rc == KERN_SUCCESS, ("%#x\n", rc)); - } -- vm_object_deallocate(pMemFreeBSD->u.NonPhys.pObject); -- rc = VERR_NO_MEMORY; /** @todo fix translation (borrow from darwin) */ -+ pMemFreeBSD->Core.pv = (void *)MapAddress; -+ pMemFreeBSD->Core.u.ResVirt.R0Process = R0Process; -+ *ppMem = &pMemFreeBSD->Core; -+ return VINF_SUCCESS; - } -- else -- rc = VERR_NO_MEMORY; -+ -+ rc = VERR_NO_MEMORY; /** @todo fix translation (borrow from darwin) */ - rtR0MemObjDelete(&pMemFreeBSD->Core); - return rc; - -@@ -690,7 +594,7 @@ - DECLHIDDEN(int) rtR0MemObjNativeMapKernel(PPRTR0MEMOBJINTERNAL ppMem, RTR0MEMOBJ pMemToMap, void *pvFixed, size_t uAlignment, - unsigned fProt, size_t offSub, size_t cbSub) - { -- AssertMsgReturn(!offSub && !cbSub, ("%#x %#x\n", offSub, cbSub), VERR_NOT_SUPPORTED); -+// AssertMsgReturn(!offSub && !cbSub, ("%#x %#x\n", offSub, cbSub), VERR_NOT_SUPPORTED); - AssertMsgReturn(pvFixed == (void *)-1, ("%p\n", pvFixed), VERR_NOT_SUPPORTED); - - /* -@@ -699,21 +603,68 @@ - if (uAlignment > PAGE_SIZE) - return VERR_NOT_SUPPORTED; - --/* Phys: see pmap_mapdev in i386/i386/pmap.c (http://fxr.watson.org/fxr/source/i386/i386/pmap.c?v=RELENG62#L2860) */ --/** @todo finish the implementation. */ -+ int rc; -+ PRTR0MEMOBJFREEBSD pMemToMapFreeBSD = (PRTR0MEMOBJFREEBSD)pMemToMap; - -- return VERR_NOT_SUPPORTED; -+ /* calc protection */ -+ vm_prot_t ProtectionFlags = 0; -+ if ((fProt & RTMEM_PROT_NONE) == RTMEM_PROT_NONE) -+ ProtectionFlags = VM_PROT_NONE; -+ if ((fProt & RTMEM_PROT_READ) == RTMEM_PROT_READ) -+ ProtectionFlags |= VM_PROT_READ; -+ if ((fProt & RTMEM_PROT_WRITE) == RTMEM_PROT_WRITE) -+ ProtectionFlags |= VM_PROT_WRITE; -+ if ((fProt & RTMEM_PROT_EXEC) == RTMEM_PROT_EXEC) -+ ProtectionFlags |= VM_PROT_EXECUTE; -+ -+ vm_offset_t Addr = vm_map_min(kernel_map); -+ if (cbSub == 0) -+ cbSub = pMemToMap->cb - offSub; -+ -+ vm_object_reference(pMemToMapFreeBSD->pObject); -+ rc = vm_map_find(kernel_map, /* Map to insert the object in */ -+ pMemToMapFreeBSD->pObject, /* Object to map */ -+ offSub, /* Start offset in the object */ -+ &Addr, /* Start address IN/OUT */ -+ cbSub, /* Size of the mapping */ -+ VMFS_ANY_SPACE, /* Whether a suitable address should be searched for first */ -+ ProtectionFlags, /* protection flags */ -+ VM_PROT_ALL, /* Maximum protection flags */ -+ 0); /* copy-on-write and similar flags */ -+ -+ if (rc == KERN_SUCCESS) -+ { -+ rc = vm_map_wire(kernel_map, Addr, Addr + cbSub, VM_MAP_WIRE_SYSTEM|VM_MAP_WIRE_NOHOLES); -+ AssertMsg(rc == KERN_SUCCESS, ("%#x\n", rc)); -+ -+ PRTR0MEMOBJFREEBSD pMemFreeBSD = (PRTR0MEMOBJFREEBSD)rtR0MemObjNew(sizeof(RTR0MEMOBJFREEBSD), -+ RTR0MEMOBJTYPE_MAPPING, -+ (void *)Addr, -+ cbSub); -+ if (pMemFreeBSD) -+ { -+ Assert((vm_offset_t)pMemFreeBSD->Core.pv == Addr); -+ pMemFreeBSD->Core.u.Mapping.R0Process = NIL_RTR0PROCESS; -+ *ppMem = &pMemFreeBSD->Core; -+ return VINF_SUCCESS; -+ } -+ rc = vm_map_remove(kernel_map, Addr, Addr + cbSub); -+ AssertMsg(rc == KERN_SUCCESS, ("Deleting mapping failed\n")); -+ } -+ else -+ vm_object_deallocate(pMemToMapFreeBSD->pObject); -+ -+ return VERR_NO_MEMORY; - } - - --/* see http://markmail.org/message/udhq33tefgtyfozs */ --DECLHIDDEN(int) rtR0MemObjNativeMapUser(PPRTR0MEMOBJINTERNAL ppMem, RTR0MEMOBJ pMemToMap, RTR3PTR R3PtrFixed, size_t uAlignment, unsigned fProt, RTR0PROCESS R0Process) -+DECLHIDDEN(int) rtR0MemObjNativeMapUser(PPRTR0MEMOBJINTERNAL ppMem, RTR0MEMOBJ pMemToMap, RTR3PTR R3PtrFixed, size_t uAlignment, -+ unsigned fProt, RTR0PROCESS R0Process) - { - /* - * Check for unsupported stuff. - */ - AssertMsgReturn(R0Process == RTR0ProcHandleSelf(), ("%p != %p\n", R0Process, RTR0ProcHandleSelf()), VERR_NOT_SUPPORTED); -- AssertMsgReturn(R3PtrFixed == (RTR3PTR)-1, ("%p\n", R3PtrFixed), VERR_NOT_SUPPORTED); - if (uAlignment > PAGE_SIZE) - return VERR_NOT_SUPPORTED; - -@@ -734,62 +685,38 @@ - ProtectionFlags |= VM_PROT_EXECUTE; - - /* calc mapping address */ -- PROC_LOCK(pProc); -- vm_offset_t AddrR3 = round_page((vm_offset_t)pProc->p_vmspace->vm_daddr + lim_max(pProc, RLIMIT_DATA)); -- PROC_UNLOCK(pProc); -+ vm_offset_t AddrR3; -+ if (R3PtrFixed == (RTR3PTR)-1) -+ { -+ // is this needed? -+ PROC_LOCK(pProc); -+ AddrR3 = round_page((vm_offset_t)pProc->p_vmspace->vm_daddr + lim_max(pProc, RLIMIT_DATA)); -+ PROC_UNLOCK(pProc); -+ } -+ else -+ AddrR3 = (vm_offset_t)R3PtrFixed; - -- /* Insert the object in the map. */ -+ /* Insert the pObject in the map. */ -+ vm_object_reference(pMemToMapFreeBSD->pObject); - rc = vm_map_find(pProcMap, /* Map to insert the object in */ -- NULL, /* Object to map */ -+ pMemToMapFreeBSD->pObject, /* Object to map */ - 0, /* Start offset in the object */ - &AddrR3, /* Start address IN/OUT */ - pMemToMap->cb, /* Size of the mapping */ -- TRUE, /* Whether a suitable address should be searched for first */ -+ R3PtrFixed == (RTR3PTR)-1 ? VMFS_ANY_SPACE : VMFS_NO_SPACE, -+ /* Whether a suitable address should be searched for first */ - ProtectionFlags, /* protection flags */ - VM_PROT_ALL, /* Maximum protection flags */ -- 0); /* Copy on write */ -+ 0); /* copy-on-write and similar flags */ - -- /* Map the memory page by page into the destination map. */ - if (rc == KERN_SUCCESS) - { -- size_t cPages = pMemToMap->cb >> PAGE_SHIFT;; -- pmap_t pPhysicalMap = pProcMap->pmap; -- vm_offset_t AddrR3Dst = AddrR3; -- -- if ( pMemToMap->enmType == RTR0MEMOBJTYPE_PHYS -- || pMemToMap->enmType == RTR0MEMOBJTYPE_PHYS_NC -- || pMemToMap->enmType == RTR0MEMOBJTYPE_PAGE) -- { -- /* Mapping physical allocations */ -- Assert(cPages == pMemToMapFreeBSD->u.Phys.cPages); -+ rc = vm_map_wire(pProcMap, AddrR3, AddrR3 + pMemToMap->cb, VM_MAP_WIRE_USER|VM_MAP_WIRE_NOHOLES); -+ AssertMsg(rc == KERN_SUCCESS, ("%#x\n", rc)); - -- /* Insert the memory page by page into the mapping. */ -- for (uint32_t iPage = 0; iPage < cPages; iPage++) -- { -- vm_page_t pPage = pMemToMapFreeBSD->u.Phys.apPages[iPage]; -+ rc = vm_map_inherit(pProcMap, AddrR3, AddrR3 + pMemToMap->cb, VM_INHERIT_SHARE); -+ AssertMsg(rc == KERN_SUCCESS, ("%#x\n", rc)); - -- MY_PMAP_ENTER(pPhysicalMap, AddrR3Dst, pPage, ProtectionFlags, TRUE); -- AddrR3Dst += PAGE_SIZE; -- } -- } -- else -- { -- /* Mapping cont or low memory types */ -- vm_offset_t AddrToMap = (vm_offset_t)pMemToMap->pv; -- -- for (uint32_t iPage = 0; iPage < cPages; iPage++) -- { -- vm_page_t pPage = PHYS_TO_VM_PAGE(vtophys(AddrToMap)); -- -- MY_PMAP_ENTER(pPhysicalMap, AddrR3Dst, pPage, ProtectionFlags, TRUE); -- AddrR3Dst += PAGE_SIZE; -- AddrToMap += PAGE_SIZE; -- } -- } -- } -- -- if (RT_SUCCESS(rc)) -- { - /* - * Create a mapping object for it. - */ -@@ -805,9 +732,11 @@ - return VINF_SUCCESS; - } - -- rc = vm_map_remove(pProcMap, ((vm_offset_t)AddrR3), ((vm_offset_t)AddrR3) + pMemToMap->cb); -+ rc = vm_map_remove(pProcMap, AddrR3, AddrR3 + pMemToMap->cb); - AssertMsg(rc == KERN_SUCCESS, ("Deleting mapping failed\n")); - } -+ else -+ vm_object_deallocate(pMemToMapFreeBSD->pObject); - - return VERR_NO_MEMORY; - } -@@ -855,49 +784,47 @@ - return NIL_RTHCPHYS; - } - -- vm_offset_t pb = (vm_offset_t)pMemFreeBSD->Core.pv + (iPage << PAGE_SHIFT); -+ vm_offset_t pb = (vm_offset_t)pMemFreeBSD->Core.pv + ptoa(iPage); - - struct proc *pProc = (struct proc *)pMemFreeBSD->Core.u.Lock.R0Process; - struct vm_map *pProcMap = &pProc->p_vmspace->vm_map; -- pmap_t pPhysicalMap = pProcMap->pmap; -+ pmap_t pPhysicalMap = vm_map_pmap(pProcMap); - - return pmap_extract(pPhysicalMap, pb); - } - - case RTR0MEMOBJTYPE_MAPPING: - { -- vm_offset_t pb = (vm_offset_t)pMemFreeBSD->Core.pv + (iPage << PAGE_SHIFT); -+ vm_offset_t pb = (vm_offset_t)pMemFreeBSD->Core.pv + ptoa(iPage); - - if (pMemFreeBSD->Core.u.Mapping.R0Process != NIL_RTR0PROCESS) - { - struct proc *pProc = (struct proc *)pMemFreeBSD->Core.u.Mapping.R0Process; - struct vm_map *pProcMap = &pProc->p_vmspace->vm_map; -- pmap_t pPhysicalMap = pProcMap->pmap; -+ pmap_t pPhysicalMap = vm_map_pmap(pProcMap); - - return pmap_extract(pPhysicalMap, pb); + vm_page_free(pPage); ++#if __FreeBSD_version < 900000 + vm_page_unlock_queues(); ++#endif } - return vtophys(pb); - } - -- case RTR0MEMOBJTYPE_CONT: -- return pMemFreeBSD->Core.u.Cont.Phys + (iPage << PAGE_SHIFT); -- -- case RTR0MEMOBJTYPE_PHYS: -- return pMemFreeBSD->Core.u.Phys.PhysBase + (iPage << PAGE_SHIFT); -- - case RTR0MEMOBJTYPE_PAGE: -- case RTR0MEMOBJTYPE_PHYS_NC: -- return VM_PAGE_TO_PHYS(pMemFreeBSD->u.Phys.apPages[iPage]); -- --#ifdef USE_KMEM_ALLOC_ATTR - case RTR0MEMOBJTYPE_LOW: -+ case RTR0MEMOBJTYPE_PHYS_NC: - { -- vm_offset_t pb = (vm_offset_t)pMemFreeBSD->Core.pv + (iPage << PAGE_SHIFT); -- return vtophys(pb); -+ RTHCPHYS addr; -+ VM_OBJECT_LOCK(pMemFreeBSD->pObject); -+ addr = VM_PAGE_TO_PHYS(vm_page_lookup(pMemFreeBSD->pObject, iPage)); -+ VM_OBJECT_UNLOCK(pMemFreeBSD->pObject); -+ return addr; - } --#else -- case RTR0MEMOBJTYPE_LOW: --#endif -+ -+ case RTR0MEMOBJTYPE_PHYS: -+ return pMemFreeBSD->Core.u.Cont.Phys + ptoa(iPage); -+ -+ case RTR0MEMOBJTYPE_CONT: -+ return pMemFreeBSD->Core.u.Phys.PhysBase + ptoa(iPage); -+ - case RTR0MEMOBJTYPE_RES_VIRT: - default: - return NIL_RTHCPHYS; + VM_OBJECT_UNLOCK(pObject); + return rcNoMem; +-- +1.7.11.5 + diff --git a/emulators/virtualbox-ose-kmod-legacy/files/patch-src-VBox-Runtime-r0drv-freebsd-memobj-r0drv-freebsd_VM_MAP_FIND.c b/emulators/virtualbox-ose-kmod-legacy/files/patch-src-VBox-Runtime-r0drv-freebsd-memobj-r0drv-freebsd_VM_MAP_FIND.c new file mode 100644 index 000000000000..6dfe0b99208e --- /dev/null +++ b/emulators/virtualbox-ose-kmod-legacy/files/patch-src-VBox-Runtime-r0drv-freebsd-memobj-r0drv-freebsd_VM_MAP_FIND.c @@ -0,0 +1,48 @@ +--- src/VBox/Runtime/r0drv/freebsd/memobj-r0drv-freebsd.c.orig 2013-09-06 12:30:30.000000000 +0000 ++++ src/VBox/Runtime/r0drv/freebsd/memobj-r0drv-freebsd.c 2013-09-21 18:12:53.000000000 +0000 +@@ -286,9 +286,15 @@ + pMemFreeBSD->pObject = vm_object_allocate(OBJT_PHYS, cPages); + + /* No additional object reference for auto-deallocation upon unmapping. */ ++#if __FreeBSD_version >= 1000055 ++ rc = vm_map_find(kernel_map, pMemFreeBSD->pObject, 0, ++ &MapAddress, pMemFreeBSD->Core.cb, 0, VMFS_ANY_SPACE, ++ fExecutable ? VM_PROT_ALL : VM_PROT_RW, VM_PROT_ALL, 0); ++#else + rc = vm_map_find(kernel_map, pMemFreeBSD->pObject, 0, + &MapAddress, pMemFreeBSD->Core.cb, VMFS_ANY_SPACE, + fExecutable ? VM_PROT_ALL : VM_PROT_RW, VM_PROT_ALL, 0); ++#endif + + if (rc == KERN_SUCCESS) + { +@@ -551,6 +557,9 @@ + 0, /* offset */ + &MapAddress, /* addr (IN/OUT) */ + cb, /* length */ ++#if __FreeBSD_version >= 1000055 ++ 0, /* max addr */ ++#endif + pvFixed == (void *)-1 ? VMFS_ANY_SPACE : VMFS_NO_SPACE, + /* find_space */ + VM_PROT_NONE, /* protection */ +@@ -628,6 +637,9 @@ + offSub, /* Start offset in the object */ + &Addr, /* Start address IN/OUT */ + cbSub, /* Size of the mapping */ ++#if __FreeBSD_version >= 1000055 ++ 0, /* Upper bound of mapping */ ++#endif + VMFS_ANY_SPACE, /* Whether a suitable address should be searched for first */ + ProtectionFlags, /* protection flags */ + VM_PROT_ALL, /* Maximum protection flags */ +@@ -704,6 +716,9 @@ + 0, /* Start offset in the object */ + &AddrR3, /* Start address IN/OUT */ + pMemToMap->cb, /* Size of the mapping */ ++#if __FreeBSD_version >= 1000055 ++ 0, /* Upper bound of the mapping */ ++#endif + R3PtrFixed == (RTR3PTR)-1 ? VMFS_ANY_SPACE : VMFS_NO_SPACE, + /* Whether a suitable address should be searched for first */ + ProtectionFlags, /* protection flags */ diff --git a/emulators/virtualbox-ose-kmod-legacy/files/patch-src-VBox-Runtime-r0drv-freebsd-memobj-r0drv-freebsd_VM_OBJECT_RENAME.c b/emulators/virtualbox-ose-kmod-legacy/files/patch-src-VBox-Runtime-r0drv-freebsd-memobj-r0drv-freebsd_VM_OBJECT_RENAME.c index e4118df03498..82d7d1c297d6 100644 --- a/emulators/virtualbox-ose-kmod-legacy/files/patch-src-VBox-Runtime-r0drv-freebsd-memobj-r0drv-freebsd_VM_OBJECT_RENAME.c +++ b/emulators/virtualbox-ose-kmod-legacy/files/patch-src-VBox-Runtime-r0drv-freebsd-memobj-r0drv-freebsd_VM_OBJECT_RENAME.c @@ -1,6 +1,8 @@ ---- src/VBox/Runtime/r0drv/freebsd/memobj-r0drv-freebsd.c.orig 2013-05-10 15:16:34.000000000 +0200 -+++ src/VBox/Runtime/r0drv/freebsd/memobj-r0drv-freebsd.c 2013-05-10 12:43:20.000000000 +0200 -@@ -165,7 +165,11 @@ +$FreeBSD$ + +--- src/VBox/Runtime/r0drv/freebsd/memobj-r0drv-freebsd.c 2013-03-20 19:19:36.795745576 -0700 ++++ src/VBox/Runtime/r0drv/freebsd/memobj-r0drv-freebsd.c 2013-03-20 19:15:35.164791970 -0700 +@@ -162,7 +162,11 @@ case RTR0MEMOBJTYPE_PHYS: case RTR0MEMOBJTYPE_PHYS_NC: { @@ -12,41 +14,40 @@ vm_page_t pPage = vm_page_find_least(pMemFreeBSD->pObject, 0); #if __FreeBSD_version < 900000 /* See http://lists.freebsd.org/pipermail/freebsd-current/2012-November/037963.html */ -@@ -177,8 +181,14 @@ - { - vm_page_unwire(pPage, 0); - } -+#if __FreeBSD_version < 900000 +@@ -177,7 +181,12 @@ + #if __FreeBSD_version < 900000 vm_page_unlock_queues(); -+#endif + #endif +#if __FreeBSD_version >= 1000030 + VM_OBJECT_WUNLOCK(pMemFreeBSD->pObject); +#else VM_OBJECT_UNLOCK(pMemFreeBSD->pObject); +#endif ++ vm_object_deallocate(pMemFreeBSD->pObject); break; } -@@ -205,9 +215,17 @@ - flags |= VM_ALLOC_WIRED; - while (1) +@@ -205,10 +214,18 @@ + + while (cTries <= 1) { +#if __FreeBSD_version >= 1000030 + VM_OBJECT_WLOCK(pObject); +#else VM_OBJECT_LOCK(pObject); +#endif - pPages = vm_page_alloc_contig(pObject, iPIndex, flags, cPages, 0, VmPhysAddrHigh, uAlignment, 0, VM_MEMATTR_DEFAULT); + pPages = vm_page_alloc_contig(pObject, iPIndex, fFlags, cPages, 0, + VmPhysAddrHigh, uAlignment, 0, VM_MEMATTR_DEFAULT); +#if __FreeBSD_version >= 1000030 + VM_OBJECT_WUNLOCK(pObject); +#else VM_OBJECT_UNLOCK(pObject); +#endif - if (pPages || tries >= 1) + if (pPages) break; - vm_pageout_grow_cache(tries, 0, VmPhysAddrHigh); -@@ -226,7 +244,11 @@ - } + vm_pageout_grow_cache(cTries, 0, VmPhysAddrHigh); +@@ -228,7 +245,11 @@ + if (!pPages) return pPages; +#if __FreeBSD_version >= 1000030 @@ -57,7 +58,7 @@ for (vm_pindex_t iPage = 0; iPage < cPages; iPage++) { vm_page_t pPage = pPages + iPage; -@@ -238,7 +260,11 @@ +@@ -240,7 +261,11 @@ atomic_add_int(&cnt.v_wire_count, 1); } } @@ -69,7 +70,7 @@ return pPages; #endif } -@@ -261,7 +287,11 @@ +@@ -264,7 +289,11 @@ if (!pPage) { /* Free all allocated pages */ @@ -81,23 +82,19 @@ while (iPage-- > 0) { pPage = vm_page_lookup(pObject, iPage); -@@ -271,9 +301,15 @@ - if (fWire) - vm_page_unwire(pPage, 0); - vm_page_free(pPage); -+#if __FreeBSD_version < 900000 +@@ -278,7 +307,11 @@ vm_page_unlock_queues(); -+#endif + #endif } +#if __FreeBSD_version >= 1000030 + VM_OBJECT_WUNLOCK(pObject); +#else VM_OBJECT_UNLOCK(pObject); +#endif - return VERR_NO_MEMORY; + return rcNoMem; } } -@@ -406,9 +442,17 @@ +@@ -411,9 +444,17 @@ if (fContiguous) { Assert(enmType == RTR0MEMOBJTYPE_PHYS); @@ -115,7 +112,7 @@ pMemFreeBSD->Core.u.Phys.fAllocated = true; } -@@ -813,9 +857,17 @@ +@@ -823,9 +864,17 @@ case RTR0MEMOBJTYPE_PHYS_NC: { RTHCPHYS addr; diff --git a/emulators/virtualbox-ose-kmod-legacy/files/patch-src-VBox-Runtime-r0drv-freebsd-semfastmutex-r0drv-freebsd.c b/emulators/virtualbox-ose-kmod-legacy/files/patch-src-VBox-Runtime-r0drv-freebsd-semfastmutex-r0drv-freebsd.c deleted file mode 100644 index 2f04d3adfafd..000000000000 --- a/emulators/virtualbox-ose-kmod-legacy/files/patch-src-VBox-Runtime-r0drv-freebsd-semfastmutex-r0drv-freebsd.c +++ /dev/null @@ -1,15 +0,0 @@ -- Fix INVARIANTS warning: -acquiring duplicate lock of same type: "IPRT Fast Mutex Semaphore" - -Submitted by: avg ---- src/VBox/Runtime/r0drv/freebsd/semfastmutex-r0drv-freebsd.c.orig 2011-11-04 12:19:54.000000000 +0100 -+++ src/VBox/Runtime/r0drv/freebsd/semfastmutex-r0drv-freebsd.c 2011-12-06 23:12:49.233297685 +0100 -@@ -66,7 +66,7 @@ - if (pThis) - { - pThis->u32Magic = RTSEMFASTMUTEX_MAGIC; -- sx_init(&pThis->SxLock, "IPRT Fast Mutex Semaphore"); -+ sx_init_flags(&pThis->SxLock, "IPRT Fast Mutex Semaphore", SX_DUPOK); - - *phFastMtx = pThis; - return VINF_SUCCESS; diff --git a/emulators/virtualbox-ose-kmod-legacy/files/patch-src-VBox-Runtime-r0drv-freebsd-sleepqueue-r0drv-freebsd.h b/emulators/virtualbox-ose-kmod-legacy/files/patch-src-VBox-Runtime-r0drv-freebsd-sleepqueue-r0drv-freebsd.h new file mode 100644 index 000000000000..e1ae4d7ea855 --- /dev/null +++ b/emulators/virtualbox-ose-kmod-legacy/files/patch-src-VBox-Runtime-r0drv-freebsd-sleepqueue-r0drv-freebsd.h @@ -0,0 +1,20 @@ +Without this patch any waits for periods shorter than a single tick return +immediately leading to a lot of unnecessary spinning. For example, I observe that +my guest's idle loop does a lot of sleeps with periods slightly shorter than 1 ms +(1/hz), e.g. 900us. All that waiting turns into pure spinning and VirtualBox eats +100% of a core. +The patch improves the situation significantly. Also, it (approximately) follows +what tvtohz does. + +Submitted by: Andriy Gapon <avg@FreeBSD.org> +--- src/VBox/Runtime/r0drv/freebsd/sleepqueue-r0drv-freebsd.h.orig 2012-12-19 19:27:29.000000000 +0100 ++++ src/VBox/Runtime/r0drv/freebsd/sleepqueue-r0drv-freebsd.h 2012-12-20 12:07:48.941861966 +0100 +@@ -82,6 +82,8 @@ + uint64_t cTicks = ASMMultU64ByU32DivByU32(uTimeout, hz, UINT32_C(1000000000)); + if (cTicks >= INT_MAX) + return RTSEMWAIT_FLAGS_INDEFINITE; ++ else if (cTicks == 0 && uTimeout > 0) ++ pWait->iTimeout = 1; + else + pWait->iTimeout = (int)cTicks; + #endif diff --git a/emulators/virtualbox-ose-kmod-legacy/files/patch-src-VBox-Runtime-r0drv-freebsd-the-freebsd-kernel.h b/emulators/virtualbox-ose-kmod-legacy/files/patch-src-VBox-Runtime-r0drv-freebsd-the-freebsd-kernel.h index a60b817cb21f..24acae278364 100644 --- a/emulators/virtualbox-ose-kmod-legacy/files/patch-src-VBox-Runtime-r0drv-freebsd-the-freebsd-kernel.h +++ b/emulators/virtualbox-ose-kmod-legacy/files/patch-src-VBox-Runtime-r0drv-freebsd-the-freebsd-kernel.h @@ -1,5 +1,7 @@ ---- src/VBox/Runtime/r0drv/freebsd/the-freebsd-kernel.h.orig 2012-12-19 20:51:59.000000000 +0100 -+++ src/VBox/Runtime/r0drv/freebsd/the-freebsd-kernel.h 2013-05-10 12:40:19.000000000 +0200 +$FreeBSD$ + +--- src/VBox/Runtime/r0drv/freebsd/the-freebsd-kernel.h 2012-12-19 10:27:29.000000000 -0800 ++++ src/VBox/Runtime/r0drv/freebsd/the-freebsd-kernel.h 2013-03-20 19:10:15.854804053 -0700 @@ -50,6 +50,9 @@ #include <sys/unistd.h> #include <sys/kthread.h> diff --git a/emulators/virtualbox-ose-kmod-legacy/files/vboxnet.in b/emulators/virtualbox-ose-kmod-legacy/files/vboxnet.in index cf4225486a30..073ee3764176 100644 --- a/emulators/virtualbox-ose-kmod-legacy/files/vboxnet.in +++ b/emulators/virtualbox-ose-kmod-legacy/files/vboxnet.in @@ -4,8 +4,7 @@ # # PROVIDE: vboxnet -# REQUIRE: FILESYSTEMS -# BEFORE: netif +# REQUIRE: FILESYSTEMS NETWORKING ldconfig # KEYWORD: nojail # @@ -41,6 +40,9 @@ vboxnet_start() return 1 fi fi + + # initialize configured host-only interfaces + %%PREFIX%%/bin/VBoxManage list hostonlyifs >/dev/null } vboxnet_stop() diff --git a/emulators/virtualbox-ose-kmod-legacy/pkg-descr b/emulators/virtualbox-ose-kmod-legacy/pkg-descr index 0b1e16c034af..d10019c03792 100644 --- a/emulators/virtualbox-ose-kmod-legacy/pkg-descr +++ b/emulators/virtualbox-ose-kmod-legacy/pkg-descr @@ -4,4 +4,4 @@ feature rich, high performance product for enterprise customers, it is also the only professional solution that is freely available as Open Source Software under the terms of the GNU General Public License. -WWW: http://www.virtualbox.org/ +WWW: http://www.virtualbox.org/ diff --git a/emulators/virtualbox-ose-legacy/Makefile b/emulators/virtualbox-ose-legacy/Makefile index 1698ddf77b5a..4e9c6d58443a 100644 --- a/emulators/virtualbox-ose-legacy/Makefile +++ b/emulators/virtualbox-ose-legacy/Makefile @@ -2,8 +2,7 @@ # $FreeBSD$ PORTNAME= virtualbox-ose -DISTVERSION= 4.1.24 -PORTREVISION= 1 +DISTVERSION= 4.2.20 CATEGORIES= emulators MASTER_SITES= http://download.virtualbox.org/virtualbox/${DISTVERSION}/ \ http://tmp.chruetertee.ch/ \ @@ -13,7 +12,6 @@ PKGNAMESUFFIX= -legacy DISTFILES= VirtualBox-${DISTVERSION}${EXTRACT_SUFX} ${GADISTFILES} EXTRACT_ONLY= VirtualBox-${DISTVERSION}${EXTRACT_SUFX} -#for discussion please use emulation@FreeBSD.org MAINTAINER= vbox@FreeBSD.org COMMENT= A general-purpose full virtualizer for x86 hardware @@ -26,10 +24,10 @@ BUILD_DEPENDS= yasm:${PORTSDIR}/devel/yasm \ kmk:${PORTSDIR}/devel/kBuild \ gtar:${PORTSDIR}/archivers/gtar \ cdrecord:${PORTSDIR}/sysutils/cdrtools -LIB_DEPENDS= png15:${PORTSDIR}/graphics/png \ - xslt.2:${PORTSDIR}/textproc/libxslt \ - curl:${PORTSDIR}/ftp/curl -RUN_DEPENDS= /boot/modules/vboxdrv.ko:${PORTSDIR}/emulators/virtualbox-ose-kmod-legacy \ +LIB_DEPENDS= libpng.so:${PORTSDIR}/graphics/png \ + libxslt.so:${PORTSDIR}/textproc/libxslt \ + libcurl.so:${PORTSDIR}/ftp/curl +RUN_DEPENDS= ${KMODDIR}/vboxdrv.ko:${PORTSDIR}/emulators/virtualbox-ose-kmod-legacy \ cdrecord:${PORTSDIR}/sysutils/cdrtools WRKSRC= ${WRKDIR}/VirtualBox-${PORTVERSION} @@ -50,18 +48,20 @@ CONFIGURE_ARGS+=--with-gcc="${CC}" --with-g++="${CXX}" --passive-mesa USE_LDCONFIG= ${PREFIX}/lib/virtualbox CONFLICTS= bcc-[0-9]* -CONFLICTS_INSTALL= virtualbox-ose-[3,4]* virtualbox-ose-devel-[3,4]* virtualbox-ose-additions-[3,4]* virtualbox-ose-additions-devel-[3,4]* +CONFLICTS_INSTALL= virtualbox-ose-4* virtualbox-ose-devel-4* virtualbox-ose-additions-4* virtualbox-ose-additions-devel-4* VBOXUSER?= vboxusers VBOXWSUSER?= vboxusers VBOXGROUP?= vboxusers USERS= ${VBOXUSER} GROUPS= ${VBOXGROUP} -VBOX_FRONTENDS= VBoxHeadless +VBOX_FRONTENDS= VBoxAutostart VBoxHeadless VBOX_GUEST_VER= ${PORTVERSION} OPTIONS_DEFINE= QT4 DEBUG GUESTADDITIONS DBUS PULSEAUDIO UDPTUNNEL VDE VNC WEBSERVICE NLS X11 -OPTIONS_DEFAULT= QT4 DBUS X11 UDPTUNNEL +OPTIONS_DEFAULT= QT4 DBUS X11 UDPTUNNEL VNC +OPTIONS_SUB= X11 QT4 GUESTADDITIONS VNC NLS WEBSERVICE +DEBUG_DESC= Debug symbols, additional logs and assertions QT4_DESC= Build with QT4 Frontend GUESTADDITIONS_DESC= Build with Guest Additions UDPTUNNEL_DESC= Build with UDP tunnel support @@ -69,19 +69,42 @@ VDE_DESC= Build with VDE support VNC_DESC= Build with VNC support WEBSERVICE_DESC= Build Webservice +PULSEAUDIO_LIB_DEPENDS= libpulse.so:${PORTSDIR}/audio/pulseaudio +PULSEAUDIO_CONFIGURE_OFF= --disable-pulse + +DBUS_LIB_DEPENDS= libdbus-1.so:${PORTSDIR}/devel/dbus +DBUS_CONFIGURE_OFF= --disable-dbus + +VNC_LIB_DEPENDS= libvncserver.so:${PORTSDIR}/net/libvncserver +VNC_CONFIGURE_ON= --enable-vnc + +VDE_RUN_DEPENDS= vde_switch:${PORTSDIR}/net/vde2 +VDE_CONFIGURE_ON= --enable-vde + +# bmake doesn't know about unsetenv=true +.if defined(.PARSEDIR) +ENV= +.export ENV +.else +.SHELL: path="/bin/sh" unsetenv=true +.endif + NO_STAGE= yes .include <bsd.port.options.mk> +KMODDIR= /boot/modules + PLIST_SUB+= PYTHON_VER=${PYTHON_VER} \ PYTHON_VERU=${PYTHON_VER:S/./_/} \ GUEST_VER=${VBOX_GUEST_VER} -SUB_LIST+= VBOXUSER=${VBOXUSER} -USE_RC_SUBR+= vboxheadless +SUB_LIST+= VBOXUSER=${VBOXUSER} \ + VBOXWSUSER=${VBOXWSUSER} +USE_RC_SUBR+= vboxheadless vboxwatchdog KMK_BUILDTYPE= release KMK_CONFIG= VBOX_LIBPATH_X11=${LOCALBASE} VBOX_FREEBSD_SRC=${SRC_BASE}/sys -KMK_FLAGS= +KMK_FLAGS= -j 1 .if empty(PORT_OPTIONS:MQT4) && !empty(PORT_OPTIONS:MNLS) BROKEN= NLS support requires QT4 frontend. Run 'make config' again! @@ -95,10 +118,8 @@ BROKEN= QT4 frontend requires X11 support. Run 'make config' again! USE_SDL= sdl USE_XORG= xcursor xmu inputproto xinerama VBOX_FRONTENDS+=VBoxBFE VBoxSDL -PLIST_SUB+= X11="" .else CONFIGURE_ARGS+=--build-headless -PLIST_SUB+= X11="@comment " .endif .if ${PORT_OPTIONS:MQT4} @@ -106,10 +127,8 @@ QT_NONSTANDARD= yes USE_QT4= gui network moc_build uic_build rcc_build linguist INSTALLS_ICONS= yes VBOX_FRONTENDS+=VirtualBox VBoxTestOGL -PLIST_SUB+= QT4="" .else CONFIGURE_ARGS+=--disable-qt4 -PLIST_SUB+= QT4="@comment " .endif .if ${PORT_OPTIONS:MGUESTADDITIONS} @@ -117,51 +136,17 @@ GUESTADDITIONS= VBoxGuestAdditions_${VBOX_GUEST_VER}.iso GADISTFILES= ${GUESTADDITIONS}:guestadditions RESTRICTED= for personal use only RESTRICTED_FILES= ${GUESTADDITIONS} -PLIST_SUB+= GUESTADDITIONS="" -.else -PLIST_SUB+= GUESTADDITIONS="@comment " .endif .if ${PORT_OPTIONS:MDEBUG} -KMK_FLAGS+= BUILD_TYPE=debug KMK_BUILDTYPE= debug -.endif - -.if ${PORT_OPTIONS:MDBUS} -LIB_DEPENDS+= dbus-1.3:${PORTSDIR}/devel/dbus -.else -CONFIGURE_ARGS+=--disable-dbus -.endif - -.if ${PORT_OPTIONS:MPULSEAUDIO} -LIB_DEPENDS+= pulse.0:${PORTSDIR}/audio/pulseaudio -.else -CONFIGURE_ARGS+=--disable-pulse -.endif - -.if ${PORT_OPTIONS:MVNC} -LIB_DEPENDS+= vncserver.0:${PORTSDIR}/net/libvncserver -.endif - -.if ${PORT_OPTIONS:MNLS} -PLIST_SUB+= NLS="" -.else -PLIST_SUB+= NLS="@comment " -.endif - -.if ${PORT_OPTIONS:MVDE} -RUN_DEPENDS+= vde_switch:${PORTSDIR}/net/vde2 -CONFIGURE_ARGS+=--enable-vde +KMK_FLAGS+= BUILD_TYPE=debug .endif .if ${PORT_OPTIONS:MWEBSERVICE} BUILD_DEPENDS+= soapcpp2:${PORTSDIR}/devel/gsoap VBOX_WEB= vboxwebsrv webtest USE_RC_SUBR+= vboxwebsrv -SUB_LIST+= VBOXWSUSER=${VBOXWSUSER} -PLIST_SUB+= WEB="" -.else -PLIST_SUB+= WEB="@comment " .endif .if ${ARCH} == i386 @@ -172,15 +157,9 @@ KMK_ARCH= freebsd.${ARCH} PLIST_SUB+= I386="@comment " .endif -.include <bsd.port.pre.mk> - -.if ${OSVERSION} < 802000 -BROKEN= Does not compile on FreeBSD < 8.2 -.endif +PLIST_SUB+= ARCH="${KMK_ARCH}" -.if ${OSVERSION} > 900012 -EXTRA_PATCHES+= ${FILESDIR}/extrapatch-include-iprt-string.h -.endif +.include <bsd.port.pre.mk> .if ${OSVERSION} < 900000 && ${OSVERSION} > 801500 EXTRA_PATCHES+= ${FILESDIR}/extrapatch-src-VBox-Devices-PC-vbox.dsl @@ -198,7 +177,7 @@ pre-everything:: post-patch: @${ECHO} 'VBOX_PATH_APP_PRIVATE_ARCH = ${PREFIX}/lib/virtualbox' > ${WRKSRC}/LocalConfig.kmk @${ECHO} 'VBOX_PATH_SHARED_LIBS = ${PREFIX}/lib/virtualbox' >> ${WRKSRC}/LocalConfig.kmk - @${ECHO} 'VBOX_WITH_RUNPATH = ${PREFIX}/lib/virtualbox' >> ${WRKSRC}/LocalConfig.kmk + @var=${_GCC_RUNTIME}; ${ECHO} "VBOX_WITH_RUNPATH = $${var:+$${var}:}${PREFIX}/lib/virtualbox" >> ${WRKSRC}/LocalConfig.kmk @${ECHO} 'VBOX_PATH_APP_PRIVATE = ${DATADIR}' >> ${WRKSRC}/LocalConfig.kmk @${ECHO} 'VBOX_PATH_APP_DOCS = ${DOCSDIR}' >> ${WRKSRC}/LocalConfig.kmk @${ECHO} 'VBOX_WITH_INSTALLER = 1' >> ${WRKSRC}/LocalConfig.kmk @@ -212,10 +191,7 @@ post-patch: @${ECHO} 'VBOX_WITH_ADDITIONS=' >> ${WRKSRC}/LocalConfig.kmk @${ECHO} 'VBOX_WITH_X11_ADDITIONS=' >> ${WRKSRC}/LocalConfig.kmk .if ${PORT_OPTIONS:MVNC} - @${ECHO} 'VBOX_WITH_VNC = 1' >> ${WRKSRC}/LocalConfig.kmk -.endif -.if ${OSVERSION} < 800069 - @${ECHO} 'VBOX_WITH_USB=' >> ${WRKSRC}/LocalConfig.kmk + @${ECHO} 'VBOX_WITH_EXTPACK_VNC = 1' >> ${WRKSRC}/LocalConfig.kmk .endif .if ${PORT_OPTIONS:MUDPTUNNEL} @${ECHO} 'VBOX_WITH_UDPTUNNEL = 1' >> ${WRKSRC}/LocalConfig.kmk @@ -274,8 +250,13 @@ do-install: ${CHMOD} 0711 ${PREFIX}/lib/virtualbox/${f} .endfor +.if ${PORT_OPTIONS:MVNC} + ${MKDIR} ${PREFIX}/lib/virtualbox/ExtensionPacks + ${CP} -a ${WRKSRC}/out/${KMK_ARCH}/${KMK_BUILDTYPE}/bin/ExtensionPacks/VNC ${PREFIX}/lib/virtualbox/ExtensionPacks +.endif + .if ${PORT_OPTIONS:MWEBSERVICE} - ${MKDIR} -p ${DATADIR}/sdk/bindings/webservice + ${MKDIR} ${DATADIR}/sdk/bindings/webservice .for f in vboxweb.wsdl vboxwebService.wsdl ${INSTALL_DATA} ${WRKSRC}/out/${KMK_ARCH}/${KMK_BUILDTYPE}/bin/sdk/bindings/webservice/${f} ${DATADIR}/sdk/bindings/webservice/ .endfor @@ -304,7 +285,9 @@ post-install: @${FIND} ${PREFIX}/lib/virtualbox -type d -print0 | ${XARGS} -0 ${CHMOD} 755 .if ${PORT_OPTIONS:MQT4} + ${MKDIR} ${PREFIX}/share/pixmaps/ ${INSTALL_DATA} ${WRKSRC}/src/VBox/Frontends/VirtualBox/images/OSE/VirtualBox_48px.png ${PREFIX}/share/pixmaps/VBox.png + ${MKDIR} ${PREFIX}/share/applications/ ${INSTALL_DATA} ${WRKSRC}/src/VBox/Installer/freebsd/virtualbox.desktop ${PREFIX}/share/applications/virtualbox.desktop .endif @${CAT} ${PKGMESSAGE} diff --git a/emulators/virtualbox-ose-legacy/distinfo b/emulators/virtualbox-ose-legacy/distinfo index 9b658d14b28f..28aa1dc9d1d9 100644 --- a/emulators/virtualbox-ose-legacy/distinfo +++ b/emulators/virtualbox-ose-legacy/distinfo @@ -1,4 +1,4 @@ -SHA256 (VirtualBox-4.1.24.tar.bz2) = 74008b8e8942045668c1b7d06b0a4bb5fe8464066e343e3a2e1ba30b94ce8a7f -SIZE (VirtualBox-4.1.24.tar.bz2) = 74612732 -SHA256 (VBoxGuestAdditions_4.1.24.iso) = 6db32584eb4e2ace0fd5fbbd9d63bdb8f50f0c28821d03dafd0ed1018d133cc7 -SIZE (VBoxGuestAdditions_4.1.24.iso) = 53532672 +SHA256 (VirtualBox-4.2.20.tar.bz2) = 193aa3ce7c0e700fe6a12b64bf462ce633a856f1e831ee4a337cc3439b21df61 +SIZE (VirtualBox-4.2.20.tar.bz2) = 77050211 +SHA256 (VBoxGuestAdditions_4.2.20.iso) = 2fb3aa0f370d503b0e77725dbec76b989a251f613abee378f53c1fed9d6edf01 +SIZE (VBoxGuestAdditions_4.2.20.iso) = 59664384 diff --git a/emulators/virtualbox-ose-legacy/files/extrapatch-include-iprt-string.h b/emulators/virtualbox-ose-legacy/files/extrapatch-include-iprt-string.h deleted file mode 100644 index c22eebe25952..000000000000 --- a/emulators/virtualbox-ose-legacy/files/extrapatch-include-iprt-string.h +++ /dev/null @@ -1,10 +0,0 @@ ---- include/iprt/string.h.orig 2010-04-28 01:02:16.000000000 +0200 -+++ include/iprt/string.h 2010-06-17 16:20:14.000000000 +0200 -@@ -60,7 +60,6 @@ - #if (defined(RT_OS_DARWIN) && defined(KERNEL)) \ - || (defined(RT_OS_FREEBSD) && defined(_KERNEL)) - RT_C_DECLS_BEGIN --void *memchr(const void *pv, int ch, size_t cb); - char *strpbrk(const char *pszStr, const char *pszChars); - RT_C_DECLS_END - #endif diff --git a/emulators/virtualbox-ose-legacy/files/patch-Config.kmk b/emulators/virtualbox-ose-legacy/files/patch-Config.kmk new file mode 100644 index 000000000000..4c5387eeaee2 --- /dev/null +++ b/emulators/virtualbox-ose-legacy/files/patch-Config.kmk @@ -0,0 +1,58 @@ +--- Config.kmk.orig 2013-10-15 13:01:31.000000000 +0200 ++++ Config.kmk 2013-10-20 14:43:19.015746151 +0200 +@@ -3387,16 +3387,16 @@ + $(VBOX_GCC_WARN) -Wpointer-arith -Winline $(VBOX_GCC_Wno-pointer-sign) $(VBOX_GCC_fdiagnostics-show-option) \ + -Wstrict-prototypes -Wmissing-prototypes -Wstrict-prototypes \ + -Wimplicit-function-declaration -Werror-implicit-function-declaration \ +- -O2 -fformat-extensions -ffreestanding -fno-strict-aliasing -fno-common -finline-limit=8000 \ ++ -O2 -ffreestanding -fno-strict-aliasing -fno-common -finline-limit=8000 \ + $(VBOX_GCC_fno-stack-protector) $(VBOX_GCC_R0_OPT) $(VBOX_GCC_R0_FP) \ + -nostdinc -std=c99 +-TEMPLATE_VBOXR0DRV_CFLAGS.x86 = -m32 -mno-align-long-strings -mpreferred-stack-boundary=2 -mno-mmx -mno-3dnow -mno-sse -mno-sse2 ++TEMPLATE_VBOXR0DRV_CFLAGS.x86 = -m32 -mpreferred-stack-boundary=2 -mno-mmx -mno-3dnow -mno-sse -mno-sse2 + TEMPLATE_VBOXR0DRV_CFLAGS.amd64 = -m64 --param inline-unit-growth=100 --param large-function-growth=1000 \ + -fno-omit-frame-pointer -mcmodel=kernel -mno-red-zone -mfpmath=387 -mno-sse -mno-sse2 -mno-mmx \ + -mno-3dnow -msoft-float -fno-asynchronous-unwind-tables -Wundef + TEMPLATE_VBOXR0DRV_CXXFLAGS = -fno-exceptions -fno-rtti \ + $(VBOX_GCC_WARN) -Wpointer-arith -Winline \ +- -O2 -fno-format-extensions -fno-strict-aliasing -fno-common -finline-limit=8000 \ ++ -O2 -fno-strict-aliasing -fno-common -finline-limit=8000 \ + $(VBOX_GCC_fno-stack-protector) $(VBOX_GCC_R0_OPT) $(VBOX_GCC_R0_FP) \ + -nostdinc + TEMPLATE_VBOXR0DRV_CXXFLAGS.x86 = $(TEMPLATE_VBOXR0DRV_CFLAGS.x86) +@@ -3630,8 +3630,6 @@ + /usr/X11R6/include \ + /usr/local/include + TEMPLATE_VBOXR3EXE_LIBPATH += \ +- /usr/lib \ +- /usr/X11R6/lib \ + /usr/local/lib + else ifeq ($(KBUILD_TARGET),solaris) + TEMPLATE_VBOXR3EXE_TOOL = GXX3PLAIN +@@ -4206,8 +4204,6 @@ + /usr/X11R6/include \ + /usr/local/include + TEMPLATE_VBOXMAINEXE_LIBPATH += \ +- /usr/lib \ +- /usr/X11R6/lib \ + /usr/local/lib + else ifeq ($(KBUILD_TARGET),solaris) + TEMPLATE_VBOXMAINEXE_TOOL = GXX3PLAIN +@@ -4673,8 +4669,6 @@ + /usr/X11R6/include \ + /usr/local/include + TEMPLATE_VBOXQT4GUIEXE_LIBPATH += \ +- /usr/lib \ +- /usr/X11R6/lib \ + /usr/local/lib + endif + ifeq ($(KBUILD_TARGET),solaris) +@@ -4869,8 +4863,6 @@ + /usr/X11R6/include \ + /usr/local/include + TEMPLATE_VBOXBLDPROG_LIBPATH += \ +- /usr/lib \ +- /usr/X11R6/lib \ + /usr/local/lib + else ifeq ($(KBUILD_HOST),solaris) + TEMPLATE_VBOXBLDPROG_TOOL = GXX3PLAIN diff --git a/emulators/virtualbox-ose-legacy/files/patch-configure b/emulators/virtualbox-ose-legacy/files/patch-configure index d47c69b30074..4bea77d203cc 100644 --- a/emulators/virtualbox-ose-legacy/files/patch-configure +++ b/emulators/virtualbox-ose-legacy/files/patch-configure @@ -1,10 +1,21 @@ ---- configure.orig 2011-05-30 17:11:26.000000000 +0200 -+++ configure 2011-06-06 10:01:12.000000000 +0200 -@@ -1920,7 +1920,7 @@ +--- configure.orig 2012-03-16 10:34:01.000000000 +0100 ++++ configure 2012-03-24 18:52:57.271018829 +0100 +@@ -135,6 +135,8 @@ + LIBPULSE="-L/usr/local/lib" + INCPNG="-I/usr/local/include" + LIBPNG="-L/usr/local/lib -lpng" ++ INCVNCSERVER="-I/usr/local/include" ++ LIBVNCSERVER="-L/usr/local/lib" + else + INCCURL="" + LIBCURL="-lcurl" +@@ -1837,8 +1839,8 @@ + echo "compiling the following source file:" >> $LOG cat $ODIR.tmp_src.cc >> $LOG echo "using the following command line:" >> $LOG - echo "$CXX -O -Wall -o $ODIR.tmp_out $ODIR.tmp_src.cc -I$p/include/$d $p/$b/lib$d.so" >> $LOG +- echo "$CXX -O -Wall -o $ODIR.tmp_out $ODIR.tmp_src.cc -I$p/include/$d $p/$b/lib$d.so" >> $LOG - $CXX -O -Wall -o $ODIR.tmp_out $ODIR.tmp_src.cc -I$p/include/$d $p/$b/lib$d.so >> $LOG 2>&1 ++ echo "$CXX -O -Wall -o $ODIR.tmp_out $ODIR.tmp_src.cc -I$p/include/$d $p/$b/lib$d.so -pthread" >> $LOG + $CXX -O -Wall -o $ODIR.tmp_out $ODIR.tmp_src.cc -I$p/include/$d $p/$b/lib$d.so -pthread >> $LOG 2>&1 if [ $? -eq 0 ]; then found=1 diff --git a/emulators/virtualbox-ose-legacy/files/patch-include-iprt-types.h b/emulators/virtualbox-ose-legacy/files/patch-include-iprt-types.h deleted file mode 100644 index 4c2070e3bb10..000000000000 --- a/emulators/virtualbox-ose-legacy/files/patch-include-iprt-types.h +++ /dev/null @@ -1,11 +0,0 @@ ---- include/iprt/types.h.orig 2012-03-05 10:48:48.000000000 +0100 -+++ include/iprt/types.h 2012-03-05 11:21:25.000000000 +0100 -@@ -82,6 +82,8 @@ - # include <stddef.h> - # define _UINT64_T_DECLARED - # define _INT64_T_DECLARED -+# define _UINTPTR_T_DECLARED -+# define _INTPTR_T_DECLARED - # include <sys/types.h> - - # elif defined(RT_OS_LINUX) && defined(__KERNEL__) diff --git a/emulators/virtualbox-ose-legacy/files/patch-src-VBox-Devices-Audio-ossaudio.c b/emulators/virtualbox-ose-legacy/files/patch-src-VBox-Devices-Audio-ossaudio.c new file mode 100644 index 000000000000..652430cb222e --- /dev/null +++ b/emulators/virtualbox-ose-legacy/files/patch-src-VBox-Devices-Audio-ossaudio.c @@ -0,0 +1,19 @@ +Fix recording with OSS Audio backend to record at a proper volume + +Obtained from: https://www.virtualbox.org/ticket/10695 +--- src/VBox/Devices/Audio/ossaudio.c.orig 2012-12-19 19:26:32.000000000 +0100 ++++ src/VBox/Devices/Audio/ossaudio.c 2012-12-20 12:23:18.476851732 +0100 +@@ -795,13 +795,8 @@ + hw->info.align + 1); + } + read_samples += nread >> hwshift; +-#ifndef VBOX + hw->conv (hw->conv_buf + bufs[i].add, p, nread >> hwshift, + &nominal_volume); +-#else +- hw->conv (hw->conv_buf + bufs[i].add, p, nread >> hwshift, +- &pcm_in_volume); +-#endif + } + + if (bufs[i].len - nread) { diff --git a/emulators/virtualbox-ose-legacy/files/patch-src-VBox-Devices-Bus-DevPciIch9.cpp b/emulators/virtualbox-ose-legacy/files/patch-src-VBox-Devices-Bus-DevPciIch9.cpp new file mode 100644 index 000000000000..6354f1e1ca65 --- /dev/null +++ b/emulators/virtualbox-ose-legacy/files/patch-src-VBox-Devices-Bus-DevPciIch9.cpp @@ -0,0 +1,22 @@ +Fix ich9 bios to correctly configure pci bridge1 and pci bridge2 + +avg: I think that it is a valid report, the patch is not perfect, but +avg: it fixes the problem for most configurations and demonstrates the problem well +avg: the explanation for them is that FreeBSD (unlike Linux and maybe other OSes) +avg: entirely relies on platform doing correct bus numbering +avg: currently we can not do any re-numbering/corrections + +See: http://article.gmane.org/gmane.os.freebsd.devel.emulation/10438 +Submitted by: Gustau Perez i Querol <gperez@entel.upc.edu> +--- src/VBox/Devices/Bus/DevPciIch9.cpp.orig 2012-06-15 21:22:15.000000000 +0200 ++++ src/VBox/Devices/Bus/DevPciIch9.cpp 2012-09-02 14:17:49.804118887 +0200 +@@ -1812,7 +1812,8 @@ + PICH9PCIBUS pChildBus = PDMINS_2_DATA(pBridge->pDevIns, PICH9PCIBUS); + ich9pciInitBridgeTopology(pGlobals, pChildBus); + } +- PCIDevSetByte(pBridgeDev, VBOX_PCI_SUBORDINATE_BUS, pGlobals->uBus); ++ PCIDevSetByte(pBridgeDev, VBOX_PCI_PRIMARY_BUS, 0); ++ PCIDevSetByte(pBridgeDev, VBOX_PCI_SUBORDINATE_BUS, (pGlobals->uBus)-1); + Log2(("ich9pciInitBridgeTopology: for bus %p: primary=%d secondary=%d subordinate=%d\n", + pBus, + PCIDevGetByte(pBridgeDev, VBOX_PCI_PRIMARY_BUS), diff --git a/emulators/virtualbox-ose-legacy/files/patch-src-VBox-Frontends-VBoxManage-VBoxInternalManage.cpp b/emulators/virtualbox-ose-legacy/files/patch-src-VBox-Frontends-VBoxManage-VBoxInternalManage.cpp deleted file mode 100644 index 00e3d32c29d5..000000000000 --- a/emulators/virtualbox-ose-legacy/files/patch-src-VBox-Frontends-VBoxManage-VBoxInternalManage.cpp +++ /dev/null @@ -1,25 +0,0 @@ -- Add support for files to VBoxManage createrawvmdk. Currently -it only supports character devices so it failes like this: - -VBoxManage internalcommands createrawvmdk -filename test.vmdk -rawdisk /vbox/HardDisks/test.img -VBoxManage: error: File '/vbox/HardDisks/test.img' is no character device -VBoxManage: error: The raw disk vmdk file was not created - -Submitted by: Pawel Jakub Dawidek <pjd@FreeBSD.org> ---- src/VBox/Frontends/VBoxManage/VBoxInternalManage.cpp.orig 2011-12-13 11:18:43.424439415 +0100 -+++ src/VBox/Frontends/VBoxManage/VBoxInternalManage.cpp 2011-12-13 11:22:01.554438862 +0100 -@@ -1140,9 +1140,13 @@ - goto out; - } - } -+ else if (S_ISREG(DevStat.st_mode)) -+ { -+ cbSize = DevStat.st_size; -+ } - else - { -- RTMsgError("File '%s' is no character device", rawdisk.c_str()); -+ RTMsgError("File '%s' is neither character device nor regular file", rawdisk.c_str()); - vrc = VERR_INVALID_PARAMETER; - goto out; - } diff --git a/emulators/virtualbox-ose-legacy/files/patch-src-VBox-Frontends-VirtualBox-Makefile.kmk b/emulators/virtualbox-ose-legacy/files/patch-src-VBox-Frontends-VirtualBox-Makefile.kmk new file mode 100644 index 000000000000..7723674c7961 --- /dev/null +++ b/emulators/virtualbox-ose-legacy/files/patch-src-VBox-Frontends-VirtualBox-Makefile.kmk @@ -0,0 +1,13 @@ +--- src/VBox/Frontends/VirtualBox/Makefile.kmk.orig 2013-10-16 21:47:09.588793988 +0400 ++++ src/VBox/Frontends/VirtualBox/Makefile.kmk 2013-10-16 21:47:37.458794265 +0400 +@@ -175,10 +175,6 @@ + # Necessary for the hdd backend enumeration + VirtualBox_LIBS = $(LIB_DDU) + +-if1of ($(KBUILD_TARGET), linux freebsd netbsd openbsd) +- VirtualBox_LIBS += dl +-endif +- + # This library is required for multi-monitor support + VirtualBox_LIBS.linux += Xinerama + VirtualBox_LIBS.solaris += Xinerama diff --git a/emulators/virtualbox-ose-legacy/files/patch-src-VBox-HostDrivers-Makefile.kmk b/emulators/virtualbox-ose-legacy/files/patch-src-VBox-HostDrivers-Makefile.kmk deleted file mode 100644 index 06c4a71db458..000000000000 --- a/emulators/virtualbox-ose-legacy/files/patch-src-VBox-HostDrivers-Makefile.kmk +++ /dev/null @@ -1,27 +0,0 @@ ---- src/VBox/HostDrivers/Makefile.kmk.orig 2010-03-04 12:59:54.000000000 +0100 -+++ src/VBox/HostDrivers/Makefile.kmk 2010-03-09 12:54:09.000000000 +0100 -@@ -40,7 +40,7 @@ - endif - endif - -- if1of ($(KBUILD_TARGET),linux freebsd) -+ if1of ($(KBUILD_TARGET),linux) - # - # Install the Makefile for module compliation on Linux and FreeBSD hosts - # -@@ -51,6 +51,7 @@ - HostDrivers-src_SOURCES.freebsd = freebsd/Makefile - endif - -+if 0 - if1of ($(KBUILD_TARGET),freebsd) - # - # Install the export_modules script for tar'ing the module sources on FreeBSD hosts -@@ -60,6 +61,7 @@ - HostDrivers-sh_MODE = a+rx,u+w - HostDrivers-sh_SOURCES.freebsd = freebsd/export_modules - endif -+endif - endif # !defined(VBOX_ONLY_DOCS) && !defined(VBOX_ONLY_TESTSUITE) - - # Let kBuild generate the rules. diff --git a/emulators/virtualbox-ose-legacy/files/patch-src-VBox-HostServices-auth-pam-VBoxAuthPAM.c b/emulators/virtualbox-ose-legacy/files/patch-src-VBox-HostServices-auth-pam-VBoxAuthPAM.c deleted file mode 100644 index 1344f3f2bd60..000000000000 --- a/emulators/virtualbox-ose-legacy/files/patch-src-VBox-HostServices-auth-pam-VBoxAuthPAM.c +++ /dev/null @@ -1,15 +0,0 @@ -- Fix path for libpam.so on FreeBSD - -Submitted by: Landon Fuller <landonf at plausible.coop> -Sponsored by: Plausible Labs Cooperative, Inc. ---- src/VBox/HostServices/auth/pam/VBoxAuthPAM.c.orig 2012-04-03 14:11:56.000000000 +0200 -+++ src/VBox/HostServices/auth/pam/VBoxAuthPAM.c 2012-04-05 12:44:48.000000000 +0200 -@@ -62,6 +62,8 @@ - /* The name of the PAM library */ - # ifdef RT_OS_SOLARIS - # define PAM_LIB_NAME "libpam.so.1" -+# elif defined(RT_OS_FREEBSD) -+# define PAM_LIB_NAME "libpam.so" - # else - # define PAM_LIB_NAME "libpam.so.0" - # endif diff --git a/emulators/virtualbox-ose-legacy/files/patch-src-VBox-Main-scr-server-freebsd-PerformanceFreeBSD.cpp b/emulators/virtualbox-ose-legacy/files/patch-src-VBox-Main-scr-server-freebsd-PerformanceFreeBSD.cpp new file mode 100644 index 000000000000..9ef5b64d7175 --- /dev/null +++ b/emulators/virtualbox-ose-legacy/files/patch-src-VBox-Main-scr-server-freebsd-PerformanceFreeBSD.cpp @@ -0,0 +1,13 @@ +--- src/VBox/Main/src-server/freebsd/PerformanceFreeBSD.cpp.orig 2012-10-19 19:51:26.256773940 +0400 ++++ src/VBox/Main/src-server/freebsd/PerformanceFreeBSD.cpp 2012-10-19 19:51:49.835771918 +0400 +@@ -109,5 +109,10 @@ + return E_NOTIMPL; + } + ++int getDiskListByFs(const char *name, DiskList& list) ++{ ++ return VERR_NOT_IMPLEMENTED; ++} ++ + } /* namespace pm */ + diff --git a/emulators/virtualbox-ose-legacy/files/patch-src-VBox-Main-src-server-MachineImpl.cpp b/emulators/virtualbox-ose-legacy/files/patch-src-VBox-Main-src-server-MachineImpl.cpp deleted file mode 100644 index fce7b85eefa3..000000000000 --- a/emulators/virtualbox-ose-legacy/files/patch-src-VBox-Main-src-server-MachineImpl.cpp +++ /dev/null @@ -1,13 +0,0 @@ -- Remove debugging fprintf in MachineImpl.cpp to fix build with GCC 4.6 - -Submitted by: Andriy Gapon <avg at FreeBSD.org> ---- src/VBox/Main/src-server/MachineImpl.cpp.orig 2012-04-03 14:12:01.000000000 +0200 -+++ src/VBox/Main/src-server/MachineImpl.cpp 2012-04-13 10:49:25.000000000 +0200 -@@ -6643,7 +6643,6 @@ - - Utf8Str idStr = mData->mUuid.toString(); - const char * args[] = {szPath, "--comment", mUserData->s.strName.c_str(), "--startvm", idStr.c_str(), 0 }; -- fprintf(stderr, "SDL=%s\n", szPath); - vrc = RTProcCreate(szPath, args, env, 0, &pid); - } - #else /* !VBOX_WITH_VBOXSDL */ diff --git a/emulators/virtualbox-ose-legacy/files/patch-src-VBox-Main-src-server-freebsd-HostHardwareFreeBSD.cpp b/emulators/virtualbox-ose-legacy/files/patch-src-VBox-Main-src-server-freebsd-HostHardwareFreeBSD.cpp new file mode 100644 index 000000000000..c77c65da5b21 --- /dev/null +++ b/emulators/virtualbox-ose-legacy/files/patch-src-VBox-Main-src-server-freebsd-HostHardwareFreeBSD.cpp @@ -0,0 +1,10 @@ +--- src/VBox/Main/src-server/freebsd/HostHardwareFreeBSD.cpp.orig 2012-12-19 19:27:17.000000000 +0100 ++++ src/VBox/Main/src-server/freebsd/HostHardwareFreeBSD.cpp 2012-12-20 14:55:59.501850255 +0100 +@@ -40,6 +40,7 @@ + # include <sys/stat.h> + # include <unistd.h> + # include <sys/ioctl.h> ++# include <stdio.h> + # include <fcntl.h> + # include <cam/cam.h> + # include <cam/cam_ccb.h> diff --git a/emulators/virtualbox-ose-legacy/files/patch-src-VBox-Main-src-server-freebsd-NetIf-freebsd.cpp b/emulators/virtualbox-ose-legacy/files/patch-src-VBox-Main-src-server-freebsd-NetIf-freebsd.cpp index bf6264a3b578..e55f2d2bb100 100644 --- a/emulators/virtualbox-ose-legacy/files/patch-src-VBox-Main-src-server-freebsd-NetIf-freebsd.cpp +++ b/emulators/virtualbox-ose-legacy/files/patch-src-VBox-Main-src-server-freebsd-NetIf-freebsd.cpp @@ -1,26 +1,10 @@ -This patch adds support for IFT_L2VLAN interfaces in the -FreeBSD implementation of NetIfList(), treating them -identically as IFT_ETHER interfaces. - -Submitted by: Landon J Fuller <landonf at plausible dot coop> -Sponsored by: Plausible Labs Cooperative, Inc ---- src/VBox/Main/src-server/freebsd/NetIf-freebsd.cpp.orig 2012-04-10 11:28:41.552067907 -0400 -+++ src/VBox/Main/src-server/freebsd/NetIf-freebsd.cpp 2012-04-10 11:28:45.872069027 -0400 -@@ -268,7 +268,7 @@ - pNext += pIfAddrMsg->ifam_msglen; - } +--- src/VBox/Main/src-server/freebsd/NetIf-freebsd.cpp.orig 2012-12-19 19:27:17.000000000 +0100 ++++ src/VBox/Main/src-server/freebsd/NetIf-freebsd.cpp 2012-12-20 14:55:59.492850918 +0100 +@@ -44,6 +44,7 @@ + #include <netinet/in.h> -- if (pSdl->sdl_type == IFT_ETHER) -+ if (pSdl->sdl_type == IFT_ETHER || pSdl->sdl_type == IFT_L2VLAN) - { - struct ifreq IfReq; - strcpy(IfReq.ifr_name, pNew->szShortName); -@@ -373,7 +373,7 @@ - pNext += pIfAddrMsg->ifam_msglen; - } + #include <stdio.h> ++#include <stdlib.h> + #include <unistd.h> + #include <errno.h> -- if (!fSkip && pSdl->sdl_type == IFT_ETHER) -+ if (!fSkip && (pSdl->sdl_type == IFT_ETHER || pSdl->sdl_type == IFT_L2VLAN)) - { - size_t cbNameLen = pSdl->sdl_nlen + 1; - memcpy(pInfo->MACAddress.au8, LLADDR(pSdl), sizeof(pInfo->MACAddress.au8)); diff --git a/emulators/virtualbox-ose-legacy/files/patch-src-VBox-Main-webservice-websrv-wsdl.xsl b/emulators/virtualbox-ose-legacy/files/patch-src-VBox-Main-webservice-websrv-wsdl.xsl deleted file mode 100644 index 760b76cc01c3..000000000000 --- a/emulators/virtualbox-ose-legacy/files/patch-src-VBox-Main-webservice-websrv-wsdl.xsl +++ /dev/null @@ -1,254 +0,0 @@ -Fix building with libxslt newer than 1.1.26. - -Obtained from: https://www.virtualbox.org/ticket/10940 ---- src/VBox/Main/webservice/websrv-wsdl.xsl 2012-10-26 18:24:53.000000000 +0200 -+++ src/VBox/Main/webservice/websrv-wsdl.xsl 2012-12-17 10:44:59.000001310 +0100 -@@ -93,6 +93,7 @@ - targetNamespace="http://schemas.xmlsoap.org/wsdl/" - xmlns:xsl="http://www.w3.org/1999/XSL/Transform" - xmlns:xsd="http://www.w3.org/2001/XMLSchema" -+ xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" - xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" - xmlns:vbox="http://www.virtualbox.org/" - xmlns:exsl="http://exslt.org/common" -@@ -460,7 +461,7 @@ - <xsl:param name="_params" /> - <xsl:param name="_valuetype" /> <!-- optional, for attribute setter messages --> - -- <message> -+ <wsdl:message> - <xsl:attribute name="name"><xsl:value-of select="concat($_ifname, $G_classSeparator, $_methodname, $G_methodRequest)" /></xsl:attribute> - - <xsl:call-template name="convertTypeAndEmitPartOrElement"> -@@ -469,10 +470,10 @@ - <xsl:with-param name="name" select="'parameters'" /> - <xsl:with-param name="type" select="$G_typeIsGlobalRequestElementMarker" /> - <xsl:with-param name="safearray" select="'no'" /> -- <xsl:with-param name="elname" select="'part'" /> <!-- "part" or "element" --> -+ <xsl:with-param name="elname" select="'wsdl:part'" /> <!-- "part" or "element" --> - <xsl:with-param name="attrname" select="'element'" /> <!-- attrib of part of element: <part type=...> or <part element=...> or <element type=...> --> - </xsl:call-template> -- </message> -+ </wsdl:message> - </xsl:template> - - <!-- -@@ -485,7 +486,7 @@ - <xsl:param name="_params" /> <!-- set of parameter elements --> - <xsl:param name="_resulttype" /> <!-- for attribute getter methods only --> - -- <message> -+ <wsdl:message> - <xsl:attribute name="name"><xsl:copy-of select="$_ifname" /><xsl:value-of select="$G_classSeparator" /><xsl:value-of select="$_methodname" /><xsl:copy-of select="$G_methodResponse" /></xsl:attribute> - - <!-- <xsl:variable name="cOutParams" select="count($_params[@dir='out']) + count($_params[@dir='return'])" /> --> -@@ -495,10 +496,10 @@ - <xsl:with-param name="name" select="'parameters'" /> - <xsl:with-param name="type" select="$G_typeIsGlobalResponseElementMarker" /> - <xsl:with-param name="safearray" select="'no'" /> -- <xsl:with-param name="elname" select="'part'" /> <!-- "part" or "element" --> -+ <xsl:with-param name="elname" select="'wsdl:part'" /> <!-- "part" or "element" --> - <xsl:with-param name="attrname" select="'element'" /> <!-- attrib of part of element: <part type=...> or <part element=...> or <element type=...> --> - </xsl:call-template> -- </message> -+ </wsdl:message> - </xsl:template> - - <!-- -@@ -543,13 +544,13 @@ - <xsl:with-param name="_methodname" select="$attrSetter" /> - <xsl:with-param name="_params" select="/.." /> <!-- empty set --> - <xsl:with-param name="_valuetype" select="$attrtype" /> -- <xsl:with-param name="elname" select="'part'" /> <!-- "part" or "element" --> -+ <xsl:with-param name="elname" select="'wsdl:part'" /> <!-- "part" or "element" --> - </xsl:call-template> - <xsl:call-template name="emitResultMessage"> - <xsl:with-param name="_ifname" select="$ifname" /> - <xsl:with-param name="_methodname" select="$attrSetter" /> - <xsl:with-param name="_params" select="/.." /> <!-- empty set --> -- <xsl:with-param name="elname" select="'part'" /> <!-- "part" or "element" --> -+ <xsl:with-param name="elname" select="'wsdl:part'" /> <!-- "part" or "element" --> - </xsl:call-template> - </xsl:template> - -@@ -566,7 +567,7 @@ - - <xsl:call-template name="debugMsg"><xsl:with-param name="msg" select="concat('....emitInOutOperation ', $_ifname, '::', $_methodname)" /></xsl:call-template> - -- <operation> -+ <wsdl:operation> - <xsl:attribute name="name"> - <xsl:value-of select="concat($_ifname, '_', $_methodname)" /> - </xsl:attribute> -@@ -577,7 +578,7 @@ - <xsl:attribute name="style"><xsl:value-of select="$G_basefmt" /></xsl:attribute> - </soap:operation> - </xsl:if> -- <input> -+ <wsdl:input> - <xsl:choose> - <xsl:when test="$_fSoap"> - <soap:body> -@@ -589,10 +590,10 @@ - <xsl:attribute name="message">vbox:<xsl:copy-of select="$_ifname" /><xsl:value-of select="$G_classSeparator" /><xsl:value-of select="$_methodname" /><xsl:copy-of select="$G_methodRequest" /></xsl:attribute> - </xsl:otherwise> - </xsl:choose> -- </input> -+ </wsdl:input> - <xsl:choose> - <xsl:when test="$_resulttype"> -- <output> -+ <wsdl:output> - <xsl:choose> - <xsl:when test="$_fSoap"> - <soap:body> -@@ -604,11 +605,11 @@ - <xsl:attribute name="message">vbox:<xsl:copy-of select="$_ifname" /><xsl:value-of select="$G_classSeparator" /><xsl:value-of select="$_methodname" /><xsl:copy-of select="$G_methodResponse" /></xsl:attribute> - </xsl:otherwise> - </xsl:choose> -- </output> -+ </wsdl:output> - </xsl:when> - <xsl:otherwise> - <!-- <xsl:if test="count($_params[@dir='out'] | $_params[@dir='return']) > 0"> --> -- <output> -+ <wsdl:output> - <xsl:choose> - <xsl:when test="$_fSoap"> - <soap:body> -@@ -620,29 +621,29 @@ - <xsl:attribute name="message">vbox:<xsl:copy-of select="$_ifname" /><xsl:value-of select="$G_classSeparator" /><xsl:value-of select="$_methodname" /><xsl:copy-of select="$G_methodResponse" /></xsl:attribute> - </xsl:otherwise> - </xsl:choose> -- </output> -+ </wsdl:output> - <!-- </xsl:if> --> - </xsl:otherwise> - </xsl:choose> - <xsl:choose> - <xsl:when test="not($_fSoap)"> -- <fault name="InvalidObjectFault" message="vbox:InvalidObjectFaultMsg" /> -- <fault name="RuntimeFault" message="vbox:RuntimeFaultMsg" /> -+ <wsdl:fault name="InvalidObjectFault" message="vbox:InvalidObjectFaultMsg" /> -+ <wsdl:fault name="RuntimeFault" message="vbox:RuntimeFaultMsg" /> - </xsl:when> - <xsl:otherwise> -- <fault name="InvalidObjectFault"> -+ <wsdl:fault name="InvalidObjectFault"> - <soap:fault name="InvalidObjectFault"> - <xsl:attribute name="use"><xsl:value-of select="$G_parmfmt" /></xsl:attribute> - </soap:fault> -- </fault> -- <fault name="RuntimeFault"> -+ </wsdl:fault> -+ <wsdl:fault name="RuntimeFault"> - <soap:fault name="RuntimeFault"> - <xsl:attribute name="use"><xsl:value-of select="$G_parmfmt" /></xsl:attribute> - </soap:fault> -- </fault> -+ </wsdl:fault> - </xsl:otherwise> - </xsl:choose> -- </operation> -+ </wsdl:operation> - </xsl:template> - - <!-- -@@ -742,7 +743,7 @@ - <xsl:with-param name="_wsmap" select="$wsmap" /> - <xsl:with-param name="_methodname" select="$methodname" /> - <xsl:with-param name="_params" select="param" /> -- <xsl:with-param name="elname" select="'part'" /> <!-- "part" or "element" --> -+ <xsl:with-param name="elname" select="'wsdl:part'" /> <!-- "part" or "element" --> - </xsl:call-template> - <!-- emit a second "result" message only if the method has "out" arguments or a return value --> - <!-- <xsl:if test="(count(param[@dir='out'] | param[@dir='return']) > 0)"> --> -@@ -751,7 +752,7 @@ - <xsl:with-param name="_wsmap" select="$wsmap" /> - <xsl:with-param name="_methodname" select="@name" /> - <xsl:with-param name="_params" select="param" /> -- <xsl:with-param name="elname" select="'part'" /> <!-- "part" or "element" --> -+ <xsl:with-param name="elname" select="'wsdl:part'" /> <!-- "part" or "element" --> - </xsl:call-template> - <!-- </xsl:if> --> - </xsl:otherwise> -@@ -956,10 +957,9 @@ - and emit complexTypes for all method arguments and return values. - --> - <xsl:template match="library"> -- <definitions -+ <wsdl:definitions - name="VirtualBox" - xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"> -- <xsl:attribute name="xmlns">http://schemas.xmlsoap.org/wsdl/</xsl:attribute> - <xsl:attribute name="targetNamespace"><xsl:value-of select="$G_targetNamespace" /></xsl:attribute> - <!-- at top of WSDL file, dump a <types> section with user-defined types --> - <xsl:comment> -@@ -969,7 +969,7 @@ - * - ****************************************************** - </xsl:comment> -- <types> -+ <wsdl:types> - <xsd:schema> - <xsl:attribute name="targetNamespace"><xsl:value-of select='$G_targetNamespace' /></xsl:attribute> - -@@ -1193,14 +1193,14 @@ - </xsd:schema> - - -- </types> -+ </wsdl:types> - -- <message name="InvalidObjectFaultMsg"> -- <part name="fault" element="vbox:InvalidObjectFault" /> -- </message> -- <message name="RuntimeFaultMsg"> -- <part name="fault" element="vbox:RuntimeFault" /> -- </message> -+ <wsdl:message name="InvalidObjectFaultMsg"> -+ <wsdl:part name="fault" element="vbox:InvalidObjectFault" /> -+ </wsdl:message> -+ <wsdl:message name="RuntimeFaultMsg"> -+ <wsdl:part name="fault" element="vbox:RuntimeFault" /> -+ </wsdl:message> - - <xsl:comment> - ****************************************************** -@@ -1241,7 +1241,7 @@ - ****************************************************** - </xsl:comment> - -- <portType> -+ <wsdl:portType> - <xsl:attribute name="name"><xsl:copy-of select="'vbox'" /><xsl:value-of select="$G_portTypeSuffix" /></xsl:attribute> - - <xsl:for-each select="//interface"> -@@ -1261,7 +1261,7 @@ - </xsl:call-template> - </xsl:if> - </xsl:for-each> -- </portType> -+ </wsdl:portType> - - <xsl:comment> - ****************************************************** -@@ -1271,7 +1271,7 @@ - ****************************************************** - </xsl:comment> - -- <binding> -+ <wsdl:binding> - <xsl:attribute name="name"><xsl:value-of select="concat('vbox', $G_bindingSuffix)" /></xsl:attribute> - <xsl:attribute name="type"><xsl:value-of select="concat('vbox:vbox', $G_portTypeSuffix)" /></xsl:attribute> - -@@ -1297,9 +1297,9 @@ - </xsl:call-template> - </xsl:if> - </xsl:for-each> -- </binding> -+ </wsdl:binding> - -- </definitions> -+ </wsdl:definitions> - </xsl:template> diff --git a/emulators/virtualbox-ose-legacy/files/patch-src-VBox-Runtime-Makefile.kmk b/emulators/virtualbox-ose-legacy/files/patch-src-VBox-Runtime-Makefile.kmk new file mode 100644 index 000000000000..32325a580314 --- /dev/null +++ b/emulators/virtualbox-ose-legacy/files/patch-src-VBox-Runtime-Makefile.kmk @@ -0,0 +1,11 @@ +--- src/VBox/Runtime/Makefile.kmk.orig 2013-06-21 16:27:18.000000000 +0400 ++++ src/VBox/Runtime/Makefile.kmk 2013-06-30 14:57:33.248215681 +0400 +@@ -844,7 +844,7 @@ + r3/posix/RTMemProtect-posix.cpp \ + r3/posix/RTPathUserHome-posix.cpp \ + r3/posix/RTSystemQueryOSInfo-posix.cpp \ +- r3/posix/RTSystemQueryTotalRam-posix.cpp \ ++ r3/freebsd/RTSystemQueryTotalRam-freebsd.cpp \ + r3/posix/RTTimeNow-posix.cpp \ + r3/posix/RTTimeSet-posix.cpp \ + r3/posix/dir-posix.cpp \ diff --git a/emulators/virtualbox-ose-legacy/files/patch-src-VBox-Runtime-r0drv-freebsd-alloc-r0drv-freebsd.c b/emulators/virtualbox-ose-legacy/files/patch-src-VBox-Runtime-r0drv-freebsd-alloc-r0drv-freebsd.c new file mode 100644 index 000000000000..f8b9743c21c8 --- /dev/null +++ b/emulators/virtualbox-ose-legacy/files/patch-src-VBox-Runtime-r0drv-freebsd-alloc-r0drv-freebsd.c @@ -0,0 +1,16 @@ +--- src/VBox/Runtime/r0drv/freebsd/alloc-r0drv-freebsd.c 2013-09-06 06:30:30.000000000 -0600 ++++ src/VBox/Runtime/r0drv/freebsd/alloc-r0drv-freebsd.c 2013-09-18 12:01:45.000000000 -0600 +@@ -79,8 +79,13 @@ + return VERR_NO_EXEC_MEMORY; + + /* Addr contains a start address vm_map_find will start searching for suitable space at. */ ++#if __FreeBSD_version >= 1000055 ++ int rc = vm_map_find(kernel_map, pVmObject, 0, &Addr, ++ cbAllocated, 0, VMFS_ANY_SPACE, VM_PROT_ALL, VM_PROT_ALL, 0); ++#else + int rc = vm_map_find(kernel_map, pVmObject, 0, &Addr, + cbAllocated, TRUE, VM_PROT_ALL, VM_PROT_ALL, 0); ++#endif + if (rc == KERN_SUCCESS) + { + rc = vm_map_wire(kernel_map, Addr, Addr + cbAllocated, diff --git a/emulators/virtualbox-ose-legacy/files/patch-src-VBox-Runtime-r0drv-freebsd-memobj-r0drv-freebsd.c b/emulators/virtualbox-ose-legacy/files/patch-src-VBox-Runtime-r0drv-freebsd-memobj-r0drv-freebsd.c index 9c63505651b0..b666b7ed0362 100644 --- a/emulators/virtualbox-ose-legacy/files/patch-src-VBox-Runtime-r0drv-freebsd-memobj-r0drv-freebsd.c +++ b/emulators/virtualbox-ose-legacy/files/patch-src-VBox-Runtime-r0drv-freebsd-memobj-r0drv-freebsd.c @@ -1,53 +1,56 @@ From Alan L. Cox on FreeBSD-current: - I just glanced at the virtualbox code for a couple minutes. For + I just glanced at the virtualbox code for a couple minutes. For FreeBSD 9 and 10, these lock acquires are completely unnecessary, and - have been since FreeBSD 9.0. Just delete them. They may be equally + have been since FreeBSD 9.0. Just delete them. They may be equally unnecessary under FreeBSD 8, but I didn't look carefully enough to answer that question. [1] http://lists.freebsd.org/pipermail/freebsd-current/2012-November/037963.html +--- + src/VBox/Runtime/r0drv/freebsd/memobj-r0drv-freebsd.c | 9 +++++++++ + 1 file changed, 9 insertions(+) ---- src/VBox/Runtime/r0drv/freebsd/memobj-r0drv-freebsd.c.orig 2012-12-19 20:51:59.000000000 +0100 -+++ src/VBox/Runtime/r0drv/freebsd/memobj-r0drv-freebsd.c 2012-12-20 15:14:56.283850834 +0100 -@@ -136,7 +136,10 @@ - (vm_offset_t)pMemFreeBSD->Core.pv + pMemFreeBSD->Core.cb); - AssertMsg(rc == KERN_SUCCESS, ("%#x", rc)); - +diff --git a/src/VBox/Runtime/r0drv/freebsd/memobj-r0drv-freebsd.c b/src/VBox/Runtime/r0drv/freebsd/memobj-r0drv-freebsd.c +index 5c90cf3..1176b51 100644 +--- src/VBox/Runtime/r0drv/freebsd/memobj-r0drv-freebsd.c ++++ src/VBox/Runtime/r0drv/freebsd/memobj-r0drv-freebsd.c +@@ -164,14 +164,19 @@ DECLHIDDEN(int) rtR0MemObjNativeFree(RTR0MEMOBJ pMem) + { + VM_OBJECT_LOCK(pMemFreeBSD->pObject); + vm_page_t pPage = vm_page_find_least(pMemFreeBSD->pObject, 0); +#if __FreeBSD_version < 900000 + /* See http://lists.freebsd.org/pipermail/freebsd-current/2012-November/037963.html */ vm_page_lock_queues(); +#endif - for (uint32_t iPage = 0; iPage < pMemFreeBSD->u.Phys.cPages; iPage++) + for (vm_page_t pPage = vm_page_find_least(pMemFreeBSD->pObject, 0); + pPage != NULL; + pPage = vm_page_next(pPage)) { - vm_page_t pPage = pMemFreeBSD->u.Phys.apPages[iPage]; -@@ -191,7 +194,9 @@ - case RTR0MEMOBJTYPE_PHYS: - case RTR0MEMOBJTYPE_PHYS_NC: - { + vm_page_unwire(pPage, 0); + } +#if __FreeBSD_version < 900000 - vm_page_lock_queues(); + vm_page_unlock_queues(); +#endif - for (uint32_t iPage = 0; iPage < pMemFreeBSD->u.Phys.cPages; iPage++) + VM_OBJECT_UNLOCK(pMemFreeBSD->pObject); + vm_object_deallocate(pMemFreeBSD->pObject); + break; +@@ -263,11 +268,15 @@ static int rtR0MemObjFreeBSDPhysAllocHelper(vm_object_t pObject, u_long cPages, + while (iPage-- > 0) { - vm_page_t pPage = pMemFreeBSD->u.Phys.apPages[iPage]; -@@ -266,7 +271,9 @@ - while (iPage-- > 0) - { - pPage = pMemFreeBSD->u.Phys.apPages[iPage]; + pPage = vm_page_lookup(pObject, iPage); +#if __FreeBSD_version < 900000 - vm_page_lock_queues(); + vm_page_lock_queues(); +#endif + if (fWire) vm_page_unwire(pPage, 0); - vm_page_free(pPage); - vm_page_unlock_queues(); -@@ -448,7 +455,9 @@ - while (iPage-- > 0) - { - pPage = pMemFreeBSD->u.Phys.apPages[iPage]; + vm_page_free(pPage); +#if __FreeBSD_version < 900000 - vm_page_lock_queues(); + vm_page_unlock_queues(); +#endif - vm_page_unwire(pPage, 0); - vm_page_free(pPage); - vm_page_unlock_queues(); + } + VM_OBJECT_UNLOCK(pObject); + return rcNoMem; +-- +1.7.11.5 + diff --git a/emulators/virtualbox-ose-legacy/files/patch-src-VBox-Runtime-r0drv-freebsd-memobj-r0drv-freebsd_VM_MAP_FIND.c b/emulators/virtualbox-ose-legacy/files/patch-src-VBox-Runtime-r0drv-freebsd-memobj-r0drv-freebsd_VM_MAP_FIND.c new file mode 100644 index 000000000000..6dfe0b99208e --- /dev/null +++ b/emulators/virtualbox-ose-legacy/files/patch-src-VBox-Runtime-r0drv-freebsd-memobj-r0drv-freebsd_VM_MAP_FIND.c @@ -0,0 +1,48 @@ +--- src/VBox/Runtime/r0drv/freebsd/memobj-r0drv-freebsd.c.orig 2013-09-06 12:30:30.000000000 +0000 ++++ src/VBox/Runtime/r0drv/freebsd/memobj-r0drv-freebsd.c 2013-09-21 18:12:53.000000000 +0000 +@@ -286,9 +286,15 @@ + pMemFreeBSD->pObject = vm_object_allocate(OBJT_PHYS, cPages); + + /* No additional object reference for auto-deallocation upon unmapping. */ ++#if __FreeBSD_version >= 1000055 ++ rc = vm_map_find(kernel_map, pMemFreeBSD->pObject, 0, ++ &MapAddress, pMemFreeBSD->Core.cb, 0, VMFS_ANY_SPACE, ++ fExecutable ? VM_PROT_ALL : VM_PROT_RW, VM_PROT_ALL, 0); ++#else + rc = vm_map_find(kernel_map, pMemFreeBSD->pObject, 0, + &MapAddress, pMemFreeBSD->Core.cb, VMFS_ANY_SPACE, + fExecutable ? VM_PROT_ALL : VM_PROT_RW, VM_PROT_ALL, 0); ++#endif + + if (rc == KERN_SUCCESS) + { +@@ -551,6 +557,9 @@ + 0, /* offset */ + &MapAddress, /* addr (IN/OUT) */ + cb, /* length */ ++#if __FreeBSD_version >= 1000055 ++ 0, /* max addr */ ++#endif + pvFixed == (void *)-1 ? VMFS_ANY_SPACE : VMFS_NO_SPACE, + /* find_space */ + VM_PROT_NONE, /* protection */ +@@ -628,6 +637,9 @@ + offSub, /* Start offset in the object */ + &Addr, /* Start address IN/OUT */ + cbSub, /* Size of the mapping */ ++#if __FreeBSD_version >= 1000055 ++ 0, /* Upper bound of mapping */ ++#endif + VMFS_ANY_SPACE, /* Whether a suitable address should be searched for first */ + ProtectionFlags, /* protection flags */ + VM_PROT_ALL, /* Maximum protection flags */ +@@ -704,6 +716,9 @@ + 0, /* Start offset in the object */ + &AddrR3, /* Start address IN/OUT */ + pMemToMap->cb, /* Size of the mapping */ ++#if __FreeBSD_version >= 1000055 ++ 0, /* Upper bound of the mapping */ ++#endif + R3PtrFixed == (RTR3PTR)-1 ? VMFS_ANY_SPACE : VMFS_NO_SPACE, + /* Whether a suitable address should be searched for first */ + ProtectionFlags, /* protection flags */ diff --git a/emulators/virtualbox-ose-legacy/files/patch-src-VBox-Runtime-r3-freebsd-RTSystemQueryTotalRam-freebsd.cpp b/emulators/virtualbox-ose-legacy/files/patch-src-VBox-Runtime-r3-freebsd-RTSystemQueryTotalRam-freebsd.cpp new file mode 100644 index 000000000000..4ecdf4265fa7 --- /dev/null +++ b/emulators/virtualbox-ose-legacy/files/patch-src-VBox-Runtime-r3-freebsd-RTSystemQueryTotalRam-freebsd.cpp @@ -0,0 +1,83 @@ +--- ./src/VBox/Runtime/r3/freebsd/RTSystemQueryTotalRam-freebsd.cpp.ORIG 2013-06-30 09:27:59.000000000 +0200 ++++ ./src/VBox/Runtime/r3/freebsd/RTSystemQueryTotalRam-freebsd.cpp 2013-06-30 09:51:29.000000000 +0200 +@@ -0,0 +1,80 @@ ++/* $Id: RTSystemQueryTotalRam-freebsd.cpp $ */ ++/** @file ++ * IPRT - RTSystemQueryTotalRam, FreeBSD style ++ */ ++ ++/* ++ * Copyright (C) 2013 Martin Birgmeier, Oracle Corporation ++ * ++ * This file is part of VirtualBox Open Source Edition (OSE), as ++ * available from http://www.virtualbox.org. This file is free software; ++ * you can redistribute it and/or modify it under the terms of the GNU ++ * General Public License (GPL) as published by the Free Software ++ * Foundation, in version 2 as it comes in the "COPYING" file of the ++ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the ++ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. ++ * ++ * The contents of this file may alternatively be used under the terms ++ * of the Common Development and Distribution License Version 1.0 ++ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the ++ * VirtualBox OSE distribution, in which case the provisions of the ++ * CDDL are applicable instead of those of the GPL. ++ * ++ * You may elect to license modified versions of this file under the ++ * terms and conditions of either the GPL or the CDDL or both. ++ */ ++ ++ ++/******************************************************************************* ++* Header Files * ++*******************************************************************************/ ++#include <iprt/system.h> ++#include "internal/iprt.h" ++ ++#include <iprt/err.h> ++#include <iprt/assert.h> ++#include <iprt/string.h> ++ ++/* FreeBSD */ ++#include <sys/types.h> ++#include <sys/sysctl.h> ++#include <sys/errno.h> ++ ++RTDECL(int) RTSystemQueryTotalRam(uint64_t *pcb) ++{ ++ int mib[2]; ++ size_t pcblen = sizeof(*pcb); ++ ++ AssertPtrReturn(pcb, VERR_INVALID_POINTER); ++ ++ mib[0] = CTL_HW; ++ mib[1] = HW_PHYSMEM; /* HW_REALMEM is also possible, but ++ includes non-main memory as well */ ++ *pcb = 0; ++ if (sysctl(mib, 2, pcb, &pcblen, NULL, 0) == 0) { ++ if (pcblen == sizeof(*pcb) || pcblen == sizeof(uint32_t)) ++ return VINF_SUCCESS; ++ else ++ return VERR_NO_MEMORY; /* XXX */ ++ } ++ return RTErrConvertFromErrno(errno); ++} ++ ++RTDECL(int) RTSystemQueryAvailableRam(uint64_t *pcb) ++{ ++ int mib[2]; ++ size_t pcblen = sizeof(*pcb); ++ ++ AssertPtrReturn(pcb, VERR_INVALID_POINTER); ++ ++ mib[0] = CTL_HW; ++ mib[1] = HW_USERMEM; ++ *pcb = 0; ++ if (sysctl(mib, 2, pcb, &pcblen, NULL, 0) == 0) { ++ if (pcblen == sizeof(*pcb) || pcblen == sizeof(uint32_t)) ++ return VINF_SUCCESS; ++ else ++ return VERR_NO_MEMORY; /* XXX */ ++ } ++ return RTErrConvertFromErrno(errno); ++} diff --git a/emulators/virtualbox-ose-legacy/files/vboxwatchdog.in b/emulators/virtualbox-ose-legacy/files/vboxwatchdog.in new file mode 100644 index 000000000000..17be9c243bb5 --- /dev/null +++ b/emulators/virtualbox-ose-legacy/files/vboxwatchdog.in @@ -0,0 +1,53 @@ +#!/bin/sh + +# $FreeBSD$ +# +# PROVIDE: vboxwatchdog +# REQUIRE: LOGIN +# KEYWORD: shutdown +# +# Add the following line to /etc/rc.conf[.local] to enable vboxwatchdog +# +# vboxwatchdog_enable (bool): Set to "NO" by default. +# Set it to "YES" to enable vboxwatchdog. +# vboxwatchdog_user (str): User account to run with. +# vboxwatchdog_flags (str): Custom flags for VBoxWatchdog. + +. /etc/rc.subr + +name=vboxwatchdog +rcvar=vboxwatchdog_enable + +command="%%PREFIX%%/bin/VBoxBalloonCtrl" +pidfile="/var/run/${name}.pid" + +start_cmd="${name}_start" + +vboxwatchdog_start() +{ + local pid + + HOME=$(/usr/sbin/pw usershow -7 -n "${vboxwatchdog_user}" | /usr/bin/cut -d: -f6) + pid=$(check_pidfile $pidfile $command) + + if [ -n "${pid}" ]; then + echo "${name} already running? (pid=${pid})." + return 1 + fi + + # prevent inheriting this setting to VBoxSVC + unset VBOX_RELEASE_LOG_DEST + + echo -n "Starting ${name}" + /usr/bin/install -o ${vboxwatchdog_user} -g wheel -m 644 /dev/null ${pidfile} + /usr/sbin/daemon -f -p ${pidfile} -u ${vboxwatchdog_user} ${command} ${vboxwatchdog_flags} + echo '.' +} + +load_rc_config $name + +: ${vboxwatchdog_enable="NO"} +: ${vboxwatchdog_user="%%VBOXUSER%%"} +: ${vboxwatchdog_flags="-b"} + +run_rc_command "$1" diff --git a/emulators/virtualbox-ose-legacy/pkg-descr b/emulators/virtualbox-ose-legacy/pkg-descr index 0b1e16c034af..d10019c03792 100644 --- a/emulators/virtualbox-ose-legacy/pkg-descr +++ b/emulators/virtualbox-ose-legacy/pkg-descr @@ -4,4 +4,4 @@ feature rich, high performance product for enterprise customers, it is also the only professional solution that is freely available as Open Source Software under the terms of the GNU General Public License. -WWW: http://www.virtualbox.org/ +WWW: http://www.virtualbox.org/ diff --git a/emulators/virtualbox-ose-legacy/pkg-plist b/emulators/virtualbox-ose-legacy/pkg-plist index 8a1b7a2ad1fe..9347ddf05083 100644 --- a/emulators/virtualbox-ose-legacy/pkg-plist +++ b/emulators/virtualbox-ose-legacy/pkg-plist @@ -1,3 +1,4 @@ +bin/VBoxAutostart bin/VBoxBalloonCtrl %%X11%%bin/VBoxBFE bin/VBoxHeadless @@ -9,12 +10,13 @@ bin/VBoxSVC %%QT4%%bin/VBoxTestOGL bin/VBoxXPCOMIPCD %%QT4%%bin/VirtualBox -%%WEB%%bin/vboxwebsrv -%%WEB%%bin/webtest +%%WEBSERVICE%%bin/vboxwebsrv +%%WEBSERVICE%%bin/webtest %%X11%%lib/virtualbox/VBoxBFE %%X11%%lib/virtualbox/VBoxBFE.so lib/virtualbox/DBGCPlugInDiggers.so lib/virtualbox/VBoxAuth.so +lib/virtualbox/VBoxAutostart lib/virtualbox/VBoxAuthSimple.so lib/virtualbox/VBoxBalloonCtrl %%QT4%%lib/virtualbox/VBoxDbg.so @@ -28,6 +30,7 @@ lib/virtualbox/VBoxGuestControlSvc.so lib/virtualbox/VBoxGuestPropSvc.so lib/virtualbox/VBoxHeadless lib/virtualbox/VBoxHeadless.so +lib/virtualbox/VBoxHostChannel.so %%X11%%lib/virtualbox/VBoxKeyboard.so lib/virtualbox/VBoxManage lib/virtualbox/VBoxNetAdpCtl @@ -49,6 +52,7 @@ lib/virtualbox/VBoxSharedClipboard.so %%X11%%lib/virtualbox/VBoxSharedCrOpenGL.so lib/virtualbox/VBoxSharedFolders.so lib/virtualbox/VBoxVMM.so +lib/virtualbox/VBoxVMMPreload.so lib/virtualbox/VBoxXPCOM.so lib/virtualbox/VBoxXPCOMC.so lib/virtualbox/VBoxXPCOMIPCD @@ -63,24 +67,29 @@ lib/virtualbox/VBoxDDR0.r0 %%GUESTADDITIONS%%lib/virtualbox/additions/VBoxGuestAdditions_%%GUEST_VER%%.iso lib/virtualbox/VBoxPython%%PYTHON_VERU%%.so lib/virtualbox/VMMR0.r0 -%%WEB%%lib/virtualbox/vboxwebsrv -%%WEB%%lib/virtualbox/webtest +%%WEBSERVICE%%lib/virtualbox/vboxwebsrv +%%WEBSERVICE%%lib/virtualbox/webtest lib/virtualbox/components/VirtualBox_XPCOM.xpt lib/virtualbox/components/VBoxXPCOMIPCC.so lib/virtualbox/components/VBoxSVCM.so lib/virtualbox/components/VBoxC.so lib/virtualbox/components/VBoxXPCOMBase.xpt -%%NLS%%%%DATADIR%%/nls/VirtualBox_ar.qm +%%VNC%%lib/virtualbox/ExtensionPacks/VNC/%%ARCH%%/VBoxVNC.so +%%VNC%%lib/virtualbox/ExtensionPacks/VNC/%%ARCH%%/VBoxVNCMain.so +%%VNC%%lib/virtualbox/ExtensionPacks/VNC/ExtPack-license.html +%%VNC%%lib/virtualbox/ExtensionPacks/VNC/ExtPack-license.rtf +%%VNC%%lib/virtualbox/ExtensionPacks/VNC/ExtPack-license.txt +%%VNC%%lib/virtualbox/ExtensionPacks/VNC/ExtPack.xml %%NLS%%%%DATADIR%%/nls/VirtualBox_bg.qm %%NLS%%%%DATADIR%%/nls/VirtualBox_ca.qm %%NLS%%%%DATADIR%%/nls/VirtualBox_ca_VA.qm %%NLS%%%%DATADIR%%/nls/VirtualBox_cs.qm %%NLS%%%%DATADIR%%/nls/VirtualBox_da.qm %%NLS%%%%DATADIR%%/nls/VirtualBox_de.qm -%%NLS%%%%DATADIR%%/nls/VirtualBox_el.qm %%NLS%%%%DATADIR%%/nls/VirtualBox_en.qm %%NLS%%%%DATADIR%%/nls/VirtualBox_es.qm %%NLS%%%%DATADIR%%/nls/VirtualBox_eu.qm +%%NLS%%%%DATADIR%%/nls/VirtualBox_fa_IR.qm %%NLS%%%%DATADIR%%/nls/VirtualBox_fi.qm %%NLS%%%%DATADIR%%/nls/VirtualBox_fr.qm %%NLS%%%%DATADIR%%/nls/VirtualBox_gl_ES.qm @@ -104,17 +113,16 @@ lib/virtualbox/components/VBoxXPCOMBase.xpt %%NLS%%%%DATADIR%%/nls/VirtualBox_uk.qm %%NLS%%%%DATADIR%%/nls/VirtualBox_zh_CN.qm %%NLS%%%%DATADIR%%/nls/VirtualBox_zh_TW.qm -%%NLS%%%%DATADIR%%/nls/qt_ar.qm %%NLS%%%%DATADIR%%/nls/qt_bg.qm %%NLS%%%%DATADIR%%/nls/qt_ca.qm %%NLS%%%%DATADIR%%/nls/qt_ca_VA.qm %%NLS%%%%DATADIR%%/nls/qt_cs.qm %%NLS%%%%DATADIR%%/nls/qt_da.qm %%NLS%%%%DATADIR%%/nls/qt_de.qm -%%NLS%%%%DATADIR%%/nls/qt_el.qm %%NLS%%%%DATADIR%%/nls/qt_en.qm %%NLS%%%%DATADIR%%/nls/qt_es.qm %%NLS%%%%DATADIR%%/nls/qt_eu.qm +%%NLS%%%%DATADIR%%/nls/qt_fa_IR.qm %%NLS%%%%DATADIR%%/nls/qt_fi.qm %%NLS%%%%DATADIR%%/nls/qt_fr.qm %%NLS%%%%DATADIR%%/nls/qt_gl_ES.qm @@ -234,14 +242,15 @@ lib/virtualbox/components/VBoxXPCOMBase.xpt %%DATADIR%%/idl/VirtualBox_XPCOM.idl %%DATADIR%%/samples/tstVBoxAPILinux.cpp %%DATADIR%%/samples/Makefile -%%WEB%%%%DATADIR%%/sdk/bindings/webservice/vboxweb.wsdl -%%WEB%%%%DATADIR%%/sdk/bindings/webservice/vboxwebService.wsdl +%%WEBSERVICE%%%%DATADIR%%/sdk/bindings/webservice/vboxweb.wsdl +%%WEBSERVICE%%%%DATADIR%%/sdk/bindings/webservice/vboxwebService.wsdl include/virtualbox/VBoxCAPI_v2_2.h include/virtualbox/VBoxCAPI_v3_0.h include/virtualbox/VBoxCAPI_v3_1.h include/virtualbox/VBoxCAPI_v3_2.h include/virtualbox/VBoxCAPI_v4_0.h include/virtualbox/VBoxCAPI_v4_1.h +include/virtualbox/VBoxCAPI_v4_2.h include/virtualbox/VirtualBox_XPCOM.h include/virtualbox/ipcIClientObserver.h include/virtualbox/ipcIDConnectService.h @@ -610,13 +619,17 @@ include/virtualbox/xpcom/xpcom-config.h @dirrm include/virtualbox/nsprpub @dirrm include/virtualbox/ipcd @dirrm include/virtualbox +%%VNC%%@dirrm lib/virtualbox/ExtensionPacks/VNC/%%ARCH%% +%%VNC%%@dirrm lib/virtualbox/ExtensionPacks/VNC +%%VNC%%@dirrmtry lib/virtualbox/ExtensionPacks %%NLS%%@dirrm %%DATADIR%%/nls -%%WEB%%@dirrm %%DATADIR%%/sdk/bindings/webservice -%%WEB%%@dirrm %%DATADIR%%/sdk/bindings -%%WEB%%@dirrm %%DATADIR%%/sdk +%%WEBSERVICE%%@dirrm %%DATADIR%%/sdk/bindings/webservice +%%WEBSERVICE%%@dirrm %%DATADIR%%/sdk/bindings +%%WEBSERVICE%%@dirrm %%DATADIR%%/sdk @dirrm %%DATADIR%%/samples @dirrm %%DATADIR%%/idl -@dirrm %%DATADIR%% +@dirrmtry %%DATADIR%% +%%QT4%%@dirrmtry share/applications @dirrm lib/virtualbox/components %%GUESTADDITIONS%%@dirrm lib/virtualbox/additions -@dirrm lib/virtualbox +@dirrmtry lib/virtualbox |