diff --git a/UPDATING b/UPDATING index e4891a76b77f..a099b91011e6 100644 --- a/UPDATING +++ b/UPDATING @@ -5,6 +5,16 @@ they are unavoidable. You should get into the habit of checking this file for changes each time you update your ports collection, before attempting any port upgrades. +20120221: + AFFECTS: users of emulators/virtualbox-ose + AUTHOR: decke@FreeBSD.org + + virtualbox-ose has been updated to 4.1.8 and requires the latest + devel/kBuild-devel now. It is only a build dependency so it is safe + to remove it before updating. + + # pkg_delete -f kBuild-\* + 20120220: AFFECTS: users of graphics/libungif AUTHOR: dinoex@FreeBSD.org diff --git a/emulators/virtualbox-ose-additions/Makefile b/emulators/virtualbox-ose-additions/Makefile index 7ba7226e6415..f47bfd9f00d7 100644 --- a/emulators/virtualbox-ose-additions/Makefile +++ b/emulators/virtualbox-ose-additions/Makefile @@ -6,7 +6,7 @@ # PORTNAME= virtualbox-ose -DISTVERSION= 4.0.14 +DISTVERSION= 4.1.8 CATEGORIES= emulators kld MASTER_SITES= http://tmp.chruetertee.ch/ \ http://freebsd.unixfreunde.de/sources/ \ @@ -19,7 +19,7 @@ COMMENT= VirtualBox additions for FreeBSD guests BUILD_DEPENDS= yasm:${PORTSDIR}/devel/yasm \ as86:${PORTSDIR}/devel/dev86 \ - kmk:${PORTSDIR}/devel/kBuild + kmk:${PORTSDIR}/devel/kBuild-devel LICENSE= GPLv2 LICENSE_FILE= ${WRKSRC}/COPYING @@ -38,11 +38,11 @@ CONFIGURE_ARGS+=--with-gcc="${CC}" --with-g++="${CXX}" --nofatal \ --build-headless CONFLICTS= bcc-[0-9]* +CONFLICTS_BUILD= kBuild-[0-9]* CONFLICTS_INSTALL= virtualbox-ose-additions-devel-[3,4]* virtualbox-ose-[3,4]* virtualbox-ose-devel-[3,4]* virtualbox-ose-legacy-[3,4]* OPTIONS= DEBUG "Build with debugging symbols" off \ X11 "Build with X11 support" on \ - HAL "Install HAL policy file for additions" on \ OPENGL "Build with OpenGL support" off .include @@ -70,20 +70,10 @@ VBOX_WITH_X11= 1 USE_XORG= xcursor xmu inputproto xrandr PLIST_SUB+= X11="" .else -.if !defined(WITHOUT_HAL) -BROKEN= HAL requires X11 support. Run 'make config' again! -.endif VBOX_WITH_X11= PLIST_SUB+= X11="@comment " .endif -.if !defined(WITHOUT_HAL) -LIB_DEPENDS+= hal.1:${PORTSDIR}/sysutils/hal -PLIST_SUB+= HAL="" -.else -PLIST_SUB+= HAL="@comment " -.endif - .if defined(WITHOUT_OPENGL) CONFIGURE_ARGS+=--disable-opengl .else @@ -108,7 +98,7 @@ EXTRA_PATCHES= ${FILESDIR}/extrapatch-include-iprt-string.h pre-everything:: .if ${ARCH} == "amd64" -.if !exists(/usr/lib32) +.if !exists(/usr/lib32/libc.so) @${ECHO} 'Requires 32-bit libraries installed under /usr/lib32.' @${ECHO} 'Do: cd /usr/src; make build32 install32; ldconfig -v -m -R /usr/lib32' @${FALSE} @@ -171,11 +161,6 @@ do-install: ${INSTALL_DATA} ${VBOX_BIN}/vboxmouse_drv_17.so ${INPUTDIR}/vboxmouse_drv.so .endif -.if !defined(WITHOUT_HAL) - ${INSTALL_DATA} ${WRKSRC}/src/VBox/Additions/linux/installer/90-vboxguest.fdi \ - ${PREFIX}/share/hal/fdi/policy/10osvendor/ -.endif - post-install: @${CAT} ${PKGMESSAGE} diff --git a/emulators/virtualbox-ose-additions/distinfo b/emulators/virtualbox-ose-additions/distinfo index 71c895634f35..8fa96aeacd70 100644 --- a/emulators/virtualbox-ose-additions/distinfo +++ b/emulators/virtualbox-ose-additions/distinfo @@ -1,2 +1,2 @@ -SHA256 (VirtualBox-4.0.14.tar.bz2) = d7719326ea2f4d492c6642cc3375665a1fcf53015d912292406a574283c02663 -SIZE (VirtualBox-4.0.14.tar.bz2) = 69959224 +SHA256 (VirtualBox-4.1.8.tar.bz2) = ef16d6729c9bcc298a33eff636549872dcfe291ac01bfa117cdf7aaf8a4004e0 +SIZE (VirtualBox-4.1.8.tar.bz2) = 73822230 diff --git a/emulators/virtualbox-ose-additions/files/patch-src-VBox-Additions-common-VBoxGuest-VBoxGuest-freebsd.c b/emulators/virtualbox-ose-additions/files/patch-src-VBox-Additions-common-VBoxGuest-VBoxGuest-freebsd.c deleted file mode 100644 index 8f517ac31ebb..000000000000 --- a/emulators/virtualbox-ose-additions/files/patch-src-VBox-Additions-common-VBoxGuest-VBoxGuest-freebsd.c +++ /dev/null @@ -1,11 +0,0 @@ ---- src/VBox/Additions/common/VBoxGuest/VBoxGuest-freebsd.c.orig 2011-04-21 10:29:52.000000000 +0000 -+++ src/VBox/Additions/common/VBoxGuest/VBoxGuest-freebsd.c 2011-04-27 20:52:04.000000000 +0000 -@@ -177,7 +177,7 @@ - iUnit, - UID_ROOT, - GID_WHEEL, -- 0644, -+ 0664, - "vboxguest%d", iUnit); - if (*ppDev) - { diff --git a/emulators/virtualbox-ose-additions/files/patch-src-VBox-Runtime-r0drv-freebsd-mp-r0drv-freebsd.c b/emulators/virtualbox-ose-additions/files/patch-src-VBox-Runtime-r0drv-freebsd-mp-r0drv-freebsd.c deleted file mode 100644 index c298f52fd501..000000000000 --- a/emulators/virtualbox-ose-additions/files/patch-src-VBox-Runtime-r0drv-freebsd-mp-r0drv-freebsd.c +++ /dev/null @@ -1,79 +0,0 @@ ---- src/VBox/Runtime/r0drv/freebsd/mp-r0drv-freebsd.c.orig 2011-05-16 12:33:52.000000000 -0400 -+++ src/VBox/Runtime/r0drv/freebsd/mp-r0drv-freebsd.c 2011-06-24 13:57:31.000000000 -0400 -@@ -163,17 +163,26 @@ RTDECL(int) RTMpOnOthers(PFNRTMPWORKER p - /* Will panic if no rendezvousing cpus, so check up front. */ - if (RTMpGetOnlineCount() > 1) - { --#if __FreeBSD_version >= 700000 -- cpumask_t Mask = ~(cpumask_t)curcpu; -+#if __FreeBSD_version >= 900000 -+ cpuset_t Mask; -+#elif __FreeBSD_version >= 700000 -+ cpumask_t Mask; - #endif -+ RTCPUID idCpu = curcpu; - RTMPARGS Args; - - Args.pfnWorker = pfnWorker; - Args.pvUser1 = pvUser1; - Args.pvUser2 = pvUser2; -- Args.idCpu = RTMpCpuId(); -+ Args.idCpu = idCpu; - Args.cHits = 0; - #if __FreeBSD_version >= 700000 -+ Mask = all_cpus; -+#if __FreeBSD_version >= 900000 -+ CPU_CLR(idCpu, &Mask); -+#else -+ Mask &= ~((cpumask_t)1 << idCpu); -+#endif - smp_rendezvous_cpus(Mask, NULL, rtmpOnOthersFreeBSDWrapper, smp_no_rendevous_barrier, &Args); - #else - smp_rendezvous(NULL, rtmpOnOthersFreeBSDWrapper, NULL, &Args); -@@ -203,8 +212,10 @@ static void rtmpOnSpecificFreeBSDWrapper - - RTDECL(int) RTMpOnSpecific(RTCPUID idCpu, PFNRTMPWORKER pfnWorker, void *pvUser1, void *pvUser2) - { --#if __FreeBSD_version >= 700000 -- cpumask_t Mask = 1 << idCpu; -+#if __FreeBSD_version >= 900000 -+ cpuset_t Mask; -+#elif __FreeBSD_version >= 700000 -+ cpumask_t Mask; - #endif - RTMPARGS Args; - -@@ -218,7 +229,11 @@ RTDECL(int) RTMpOnSpecific(RTCPUID idCpu - Args.idCpu = idCpu; - Args.cHits = 0; - #if __FreeBSD_version >= 700000 -+#if __FreeBSD_version >= 900000 -+ CPU_SETOF(idCpu, &Mask); -+#else - Mask = (cpumask_t)1 << idCpu; -+#endif - smp_rendezvous_cpus(Mask, NULL, rtmpOnSpecificFreeBSDWrapper, smp_no_rendevous_barrier, &Args); - #else - smp_rendezvous(NULL, rtmpOnSpecificFreeBSDWrapper, NULL, &Args); -@@ -242,13 +257,21 @@ static void rtmpFreeBSDPokeCallback(void - - RTDECL(int) RTMpPokeCpu(RTCPUID idCpu) - { -+#if __FreeBSD_version >= 900000 -+ cpuset_t Mask; -+#else - cpumask_t Mask; -+#endif - - /* Will panic if no rendezvousing cpus, so make sure the cpu is online. */ - if (!RTMpIsCpuOnline(idCpu)) - return VERR_CPU_NOT_FOUND; - -+#if __FreeBSD_version >= 900000 -+ CPU_SETOF(idCpu, &Mask); -+#else - Mask = (cpumask_t)1 << idCpu; -+#endif - smp_rendezvous_cpus(Mask, NULL, rtmpFreeBSDPokeCallback, smp_no_rendevous_barrier, NULL); - - return VINF_SUCCESS; diff --git a/emulators/virtualbox-ose-additions/pkg-plist b/emulators/virtualbox-ose-additions/pkg-plist index 5d9e70dff841..efe75a40fac5 100644 --- a/emulators/virtualbox-ose-additions/pkg-plist +++ b/emulators/virtualbox-ose-additions/pkg-plist @@ -7,7 +7,6 @@ sbin/VBoxService %%X11%%share/autostart/vboxclient.desktop %%X11%%lib/xorg/modules/drivers/vboxvideo_drv.so %%X11%%lib/xorg/modules/input/vboxmouse_drv.so -%%HAL%%share/hal/fdi/policy/10osvendor/90-vboxguest.fdi %%X11%%@dirrmtry share/autostart %%X11%%@dirrmtry lib/xorg/modules/drivers %%X11%%@dirrmtry lib/xorg/modules/input diff --git a/emulators/virtualbox-ose-kmod/Makefile b/emulators/virtualbox-ose-kmod/Makefile index 138883691cc2..b486461e835f 100644 --- a/emulators/virtualbox-ose-kmod/Makefile +++ b/emulators/virtualbox-ose-kmod/Makefile @@ -6,7 +6,7 @@ # PORTNAME= virtualbox-ose -DISTVERSION= 4.0.14 +DISTVERSION= 4.1.8 CATEGORIES= emulators kld MASTER_SITES= http://tmp.chruetertee.ch/ \ http://freebsd.unixfreunde.de/sources/ \ @@ -22,7 +22,7 @@ LICENSE_FILE= ${WRKSRC}/COPYING BUILD_DEPENDS= yasm:${PORTSDIR}/devel/yasm \ as86:${PORTSDIR}/devel/dev86 \ - kmk:${PORTSDIR}/devel/kBuild + kmk:${PORTSDIR}/devel/kBuild-devel UNIQUENAME= ${PORTNAME}${PKGNAMESUFFIX} WRKSRC= ${WRKDIR}/VirtualBox-${PORTVERSION}_OSE @@ -37,6 +37,7 @@ CONFIGURE_ARGS+=--with-gcc="${CC}" --with-g++="${CXX}" --nofatal \ --build-headless CONFLICTS= bcc-[0-9]* +CONFLICTS_BUILD= kBuild-[0-9]* CONFLICTS_INSTALL= virtualbox-ose-kmod-devel-[3,4]* virtualbox-ose-kmod-legacy-[3,4]* OPTIONS= DEBUG "Build with debugging symbols" off \ @@ -72,6 +73,10 @@ IGNORE= requires kernel sources .include +.if ${OSVERSION} < 800000 +BROKEN= Does not compile on FreeBSD 7.x +.endif + .if ${OSVERSION} < 800500 && defined(WITH_VIMAGE) IGNORE= newer kernel is required to build with VIMAGE .endif diff --git a/emulators/virtualbox-ose-kmod/distinfo b/emulators/virtualbox-ose-kmod/distinfo index 71c895634f35..8fa96aeacd70 100644 --- a/emulators/virtualbox-ose-kmod/distinfo +++ b/emulators/virtualbox-ose-kmod/distinfo @@ -1,2 +1,2 @@ -SHA256 (VirtualBox-4.0.14.tar.bz2) = d7719326ea2f4d492c6642cc3375665a1fcf53015d912292406a574283c02663 -SIZE (VirtualBox-4.0.14.tar.bz2) = 69959224 +SHA256 (VirtualBox-4.1.8.tar.bz2) = ef16d6729c9bcc298a33eff636549872dcfe291ac01bfa117cdf7aaf8a4004e0 +SIZE (VirtualBox-4.1.8.tar.bz2) = 73822230 diff --git a/emulators/virtualbox-ose-kmod/files/patch-src-VBox-HostDrivers-Support-freebsd-SUPDrv-freebsd.c b/emulators/virtualbox-ose-kmod/files/patch-src-VBox-HostDrivers-Support-freebsd-SUPDrv-freebsd.c index 9f891907b92d..8bc13932892d 100644 --- a/emulators/virtualbox-ose-kmod/files/patch-src-VBox-HostDrivers-Support-freebsd-SUPDrv-freebsd.c +++ b/emulators/virtualbox-ose-kmod/files/patch-src-VBox-HostDrivers-Support-freebsd-SUPDrv-freebsd.c @@ -1,5 +1,14 @@ ---- src/VBox/HostDrivers/Support/freebsd/SUPDrv-freebsd.c.orig 2011-11-04 07:19:39.000000000 -0400 -+++ src/VBox/HostDrivers/Support/freebsd/SUPDrv-freebsd.c 2011-11-29 17:34:56.000000000 -0500 +- Fix compile error: 'D_PSEUDO' undeclared here on 10-CURRENT + +Submitted by: Jung-uk Kim + +- 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 = { @@ -11,3 +20,12 @@ .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/files/patch-src-VBox-Runtime-r0drv-freebsd-memobj-r0drv-freebsd.c b/emulators/virtualbox-ose-kmod/files/patch-src-VBox-Runtime-r0drv-freebsd-memobj-r0drv-freebsd.c index 91bacd4eef20..e1b96ac7fa32 100644 --- a/emulators/virtualbox-ose-kmod/files/patch-src-VBox-Runtime-r0drv-freebsd-memobj-r0drv-freebsd.c +++ b/emulators/virtualbox-ose-kmod/files/patch-src-VBox-Runtime-r0drv-freebsd-memobj-r0drv-freebsd.c @@ -1,64 +1,867 @@ -Remove explicit initialization of m->flags and m->oflags because per -default vm_phys_alloc_contig() already initializes the page as unmanaged. -Chase move of PG_UNMANAGED flag from m->flags to m->oflags and renaming -to VPO_UNMANAGED for an additional assert. - -Reviewed by: kib -See: http://svnweb.freebsd.org/base?view=revision&revision=224746 ---- src/VBox/Runtime/r0drv/freebsd/memobj-r0drv-freebsd.c.orig 2011-11-04 07:19:54.000000000 -0400 -+++ src/VBox/Runtime/r0drv/freebsd/memobj-r0drv-freebsd.c 2011-11-29 18:13:32.000000000 -0500 -@@ -391,12 +391,18 @@ +--- src/VBox/Runtime/r0drv/freebsd/memobj-r0drv-freebsd.c.orig 2011-11-04 12:19:54.000000000 +0100 ++++ src/VBox/Runtime/r0drv/freebsd/memobj-r0drv-freebsd.c 2011-12-13 10:11:09.830245443 +0100 +@@ -5,6 +5,7 @@ - static void rtR0MemObjFreeBSDPhysPageInit(vm_page_t pPage, vm_pindex_t iPage) - { -+#if __FreeBSD_version <= 1000000 - 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); -+ -+#if __FreeBSD_version >= 900040 -+ Assert(pPage->oflags & VPO_UNMANAGED != 0); -+#else -+ Assert(pPage->flags & PG_UNMANAGED != 0); -+#endif -+#endif + /* + * Copyright (c) 2007 knut st. osmundsen ++ * Copyright (c) 2011 Andriy Gapon + * + * 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,21 @@ + case RTR0MEMOBJTYPE_PHYS: + case RTR0MEMOBJTYPE_PHYS_NC: + { ++ VM_OBJECT_LOCK(pMemFreeBSD->pObject); ++ vm_page_t pPage = vm_page_find_least(pMemFreeBSD->pObject, 0); + vm_page_lock_queues(); +- 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]; + vm_page_unwire(pPage, 0); +- vm_page_free(pPage); + } + 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 +189,163 @@ } -@@ -408,6 +414,9 @@ - int rc = VINF_SUCCESS; - uint32_t cPages = cb >> PAGE_SHIFT; - vm_paddr_t VmPhysAddrHigh; -+#if __FreeBSD_version >= 1000001 -+ int pFlags = VM_ALLOC_INTERRUPT | VM_ALLOC_NOOBJ | VM_ALLOC_WIRED; +-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; ++#if __FreeBSD_version > 1000000 ++ int flags = VM_ALLOC_INTERRUPT | VM_ALLOC_NOBUSY; ++ if (fWire) ++ flags |= VM_ALLOC_WIRED; ++ VM_OBJECT_LOCK(pObject); ++ pPages = vm_page_alloc_contig(pObject, iPIndex, flags, cPages, 0, VmPhysAddrHigh, uAlignment, 0, VM_MEMATTR_DEFAULT); ++ VM_OBJECT_UNLOCK(pObject); ++ return pPages; ++#else ++ pPages = vm_phys_alloc_contig(cPages, 0, VmPhysAddrHigh, uAlignment, 0); ++ 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) ++ { ++ pPage->wire_count = 1; ++ atomic_add_int(&cnt.v_wire_count, 1); ++ } ++ } ++ VM_OBJECT_UNLOCK(pObject); ++ return pPages; +#endif ++} + +- 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) ++static int FreeBSDPhysAllocHelper(vm_object_t pObject, u_long cPages, ++ vm_paddr_t VmPhysAddrHigh, u_long uAlignment, ++ bool fContiguous, bool fWire) ++{ ++ if (fContiguous) + { +- rc = VINF_SUCCESS; ++ if (FreeBSDContigPhysAllocHelper(pObject, 0, cPages, VmPhysAddrHigh, uAlignment, fWire) != NULL) ++ return VINF_SUCCESS; ++ else ++ return VERR_NO_MEMORY; ++ } + +- for (size_t iPage = 0; iPage < cPages; iPage++) ++ for (vm_pindex_t iPage = 0; iPage < cPages; iPage++) ++ { ++ vm_page_t pPage = FreeBSDContigPhysAllocHelper(pObject, iPage, 1, VmPhysAddrHigh, uAlignment, fWire); ++ if (!pPage) + { +- vm_page_t pPage; +- +- pPage = vm_page_alloc(NULL, iPage, +- VM_ALLOC_SYSTEM | +- VM_ALLOC_WIRED | VM_ALLOC_NOOBJ); +- +- if (!pPage) ++ /* Free all allocated pages */ ++ VM_OBJECT_LOCK(pObject); ++ 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); ++ vm_page_lock_queues(); ++ 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; + +- 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; + } ++ ++ vm_map_remove(kernel_map, MapAddress, MapAddress + pMemFreeBSD->Core.cb); + } + rc = VERR_NO_MEMORY; /** @todo fix translation (borrow from darwin) */ + ++ vm_object_deallocate(pMemFreeBSD->pObject); + rtR0MemObjDelete(&pMemFreeBSD->Core); + 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, 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, 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 +354,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]), -@@ -424,7 +433,11 @@ +- 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; - if (fContiguous) +- 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 __FreeBSD_version >= 1000001 -+ vm_page_t pPage = vm_page_alloc_contig(NULL, 0, pFlags, cPages, 0, VmPhysAddrHigh, uAlignment, 0, VM_MEMATTR_DEFAULT); -+#else - vm_page_t pPage = vm_phys_alloc_contig(cPages, 0, VmPhysAddrHigh, uAlignment, 0); -+#endif - - if (pPage) - for (uint32_t iPage = 0; iPage < cPages; iPage++) -@@ -440,7 +453,11 @@ - /* Allocate page by page */ - for (uint32_t iPage = 0; iPage < cPages; iPage++) +- if (enmType == RTR0MEMOBJTYPE_PHYS) ++ if (fContiguous) { -+#if __FreeBSD_version >= 1000001 -+ vm_page_t pPage = vm_page_alloc_contig(NULL, iPage, pFlags, 1, 0, VmPhysAddrHigh, uAlignment, 0, VM_MEMATTR_DEFAULT); -+#else - vm_page_t pPage = vm_phys_alloc_contig(1, 0, VmPhysAddrHigh, uAlignment, 0); -+#endif +- 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; + } - if (!pPage) +@@ -480,42 +396,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 +512,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 +569,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 +578,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 +660,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 +707,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 +759,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); + } + 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; diff --git a/emulators/virtualbox-ose-kmod/files/patch-src-VBox-Runtime-r0drv-freebsd-mp-r0drv-freebsd.c b/emulators/virtualbox-ose-kmod/files/patch-src-VBox-Runtime-r0drv-freebsd-mp-r0drv-freebsd.c deleted file mode 100644 index c298f52fd501..000000000000 --- a/emulators/virtualbox-ose-kmod/files/patch-src-VBox-Runtime-r0drv-freebsd-mp-r0drv-freebsd.c +++ /dev/null @@ -1,79 +0,0 @@ ---- src/VBox/Runtime/r0drv/freebsd/mp-r0drv-freebsd.c.orig 2011-05-16 12:33:52.000000000 -0400 -+++ src/VBox/Runtime/r0drv/freebsd/mp-r0drv-freebsd.c 2011-06-24 13:57:31.000000000 -0400 -@@ -163,17 +163,26 @@ RTDECL(int) RTMpOnOthers(PFNRTMPWORKER p - /* Will panic if no rendezvousing cpus, so check up front. */ - if (RTMpGetOnlineCount() > 1) - { --#if __FreeBSD_version >= 700000 -- cpumask_t Mask = ~(cpumask_t)curcpu; -+#if __FreeBSD_version >= 900000 -+ cpuset_t Mask; -+#elif __FreeBSD_version >= 700000 -+ cpumask_t Mask; - #endif -+ RTCPUID idCpu = curcpu; - RTMPARGS Args; - - Args.pfnWorker = pfnWorker; - Args.pvUser1 = pvUser1; - Args.pvUser2 = pvUser2; -- Args.idCpu = RTMpCpuId(); -+ Args.idCpu = idCpu; - Args.cHits = 0; - #if __FreeBSD_version >= 700000 -+ Mask = all_cpus; -+#if __FreeBSD_version >= 900000 -+ CPU_CLR(idCpu, &Mask); -+#else -+ Mask &= ~((cpumask_t)1 << idCpu); -+#endif - smp_rendezvous_cpus(Mask, NULL, rtmpOnOthersFreeBSDWrapper, smp_no_rendevous_barrier, &Args); - #else - smp_rendezvous(NULL, rtmpOnOthersFreeBSDWrapper, NULL, &Args); -@@ -203,8 +212,10 @@ static void rtmpOnSpecificFreeBSDWrapper - - RTDECL(int) RTMpOnSpecific(RTCPUID idCpu, PFNRTMPWORKER pfnWorker, void *pvUser1, void *pvUser2) - { --#if __FreeBSD_version >= 700000 -- cpumask_t Mask = 1 << idCpu; -+#if __FreeBSD_version >= 900000 -+ cpuset_t Mask; -+#elif __FreeBSD_version >= 700000 -+ cpumask_t Mask; - #endif - RTMPARGS Args; - -@@ -218,7 +229,11 @@ RTDECL(int) RTMpOnSpecific(RTCPUID idCpu - Args.idCpu = idCpu; - Args.cHits = 0; - #if __FreeBSD_version >= 700000 -+#if __FreeBSD_version >= 900000 -+ CPU_SETOF(idCpu, &Mask); -+#else - Mask = (cpumask_t)1 << idCpu; -+#endif - smp_rendezvous_cpus(Mask, NULL, rtmpOnSpecificFreeBSDWrapper, smp_no_rendevous_barrier, &Args); - #else - smp_rendezvous(NULL, rtmpOnSpecificFreeBSDWrapper, NULL, &Args); -@@ -242,13 +257,21 @@ static void rtmpFreeBSDPokeCallback(void - - RTDECL(int) RTMpPokeCpu(RTCPUID idCpu) - { -+#if __FreeBSD_version >= 900000 -+ cpuset_t Mask; -+#else - cpumask_t Mask; -+#endif - - /* Will panic if no rendezvousing cpus, so make sure the cpu is online. */ - if (!RTMpIsCpuOnline(idCpu)) - return VERR_CPU_NOT_FOUND; - -+#if __FreeBSD_version >= 900000 -+ CPU_SETOF(idCpu, &Mask); -+#else - Mask = (cpumask_t)1 << idCpu; -+#endif - smp_rendezvous_cpus(Mask, NULL, rtmpFreeBSDPokeCallback, smp_no_rendevous_barrier, NULL); - - return VINF_SUCCESS; diff --git a/emulators/virtualbox-ose-kmod/files/patch-src-VBox-Runtime-r0drv-freebsd-semfastmutex-r0drv-freebsd.c b/emulators/virtualbox-ose-kmod/files/patch-src-VBox-Runtime-r0drv-freebsd-semfastmutex-r0drv-freebsd.c new file mode 100644 index 000000000000..2f04d3adfafd --- /dev/null +++ b/emulators/virtualbox-ose-kmod/files/patch-src-VBox-Runtime-r0drv-freebsd-semfastmutex-r0drv-freebsd.c @@ -0,0 +1,15 @@ +- 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/Makefile b/emulators/virtualbox-ose/Makefile index 80968c4339cb..39eb33d6f219 100644 --- a/emulators/virtualbox-ose/Makefile +++ b/emulators/virtualbox-ose/Makefile @@ -6,8 +6,7 @@ # PORTNAME= virtualbox-ose -DISTVERSION= 4.0.14 -PORTREVISION= 1 +DISTVERSION= 4.1.8 CATEGORIES= emulators MASTER_SITES= http://tmp.chruetertee.ch/ \ http://freebsd.unixfreunde.de/sources/ \ @@ -23,7 +22,8 @@ COMMENT= A general-purpose full virtualizer for x86 hardware BUILD_DEPENDS= yasm:${PORTSDIR}/devel/yasm \ as86:${PORTSDIR}/devel/dev86 \ xsltproc:${PORTSDIR}/textproc/libxslt \ - kmk:${PORTSDIR}/devel/kBuild + kmk:${PORTSDIR}/devel/kBuild-devel \ + gtar:${PORTSDIR}/archivers/gtar LIB_DEPENDS= png.6:${PORTSDIR}/graphics/png \ xslt.2:${PORTSDIR}/textproc/libxslt \ curl.6:${PORTSDIR}/ftp/curl @@ -48,6 +48,7 @@ CONFIGURE_ARGS+=--with-gcc="${CC}" --with-g++="${CXX}" --passive-mesa USE_LDCONFIG= ${PREFIX}/lib/virtualbox CONFLICTS= bcc-[0-9]* +CONFLICTS_BUILD= kBuild-[0-9]* CONFLICTS_INSTALL= virtualbox-ose-devel-[3,4]* virtualbox-ose-legacy-[3,4]* virtualbox-ose-additions-[3,4]* virtualbox-ose-additions-devel-[3,4]* VBOXUSER?= vboxusers @@ -64,6 +65,7 @@ OPTIONS= QT4 "Build with QT4 Frontend" on \ DBUS "Build with D-Bus and HAL support" on \ PULSEAUDIO "Build with PulseAudio" off \ X11 "Build with X11 support" on \ + UDPTUNNEL "Build with UDP tunnel support" on \ VDE "Build with VDE support" off \ VNC "Build with VNC support" off \ WEBSERVICE "Build Webservice" off \ @@ -175,17 +177,21 @@ PLIST_SUB+= I386="@comment " .include +.if ${OSVERSION} < 800000 +BROKEN= Does not compile on FreeBSD 7.x +.endif + .if ${OSVERSION} > 900012 EXTRA_PATCHES+= ${FILESDIR}/extrapatch-include-iprt-string.h .endif -.if ${OSVERSION} > 900020 || ${OSVERSION} < 900000 && ${OSVERSION} > 801500 +.if ${OSVERSION} < 900000 && ${OSVERSION} > 801500 EXTRA_PATCHES+= ${FILESDIR}/extrapatch-src-VBox-Devices-PC-vbox.dsl .endif pre-everything:: .if ${ARCH} == "amd64" -.if !exists(/usr/lib32) +.if !exists(/usr/lib32/libc.so) @${ECHO} 'Requires 32-bit libraries installed under /usr/lib32.' @${ECHO} 'Do: cd /usr/src; make build32 install32; /etc/rc.d/ldconfig restart' @${FALSE} @@ -214,6 +220,9 @@ post-patch: .if ${OSVERSION} < 800069 @${ECHO} 'VBOX_WITH_USB=' >> ${WRKSRC}/LocalConfig.kmk .endif +.if defined(WITH_UDPTUNNEL) + @${ECHO} 'VBOX_WITH_UDPTUNNEL = 1' >> ${WRKSRC}/LocalConfig.kmk +.endif .if defined(WITH_WEBSERVICE) @${ECHO} 'VBOX_WITH_WEBSERVICES = 1' >> ${WRKSRC}/LocalConfig.kmk @${ECHO} 'VBOX_GSOAP_INSTALLED = 1' >> ${WRKSRC}/LocalConfig.kmk @@ -252,7 +261,7 @@ do-install: .endif ${MKDIR} ${PREFIX}/bin -.for f in VBoxManage VBoxNetAdpCtl VBoxNetDHCP VBoxSVC VBoxXPCOMIPCD ${VBOX_FRONTENDS} ${VBOX_WEB} +.for f in VBoxManage VBoxNetAdpCtl VBoxNetDHCP VBoxSVC VBoxXPCOMIPCD VBoxBalloonCtrl ${VBOX_FRONTENDS} ${VBOX_WEB} ${INSTALL_PROGRAM} ${WRKSRC}/out/${KMK_ARCH}/${KMK_BUILDTYPE}/bin/${f} ${PREFIX}/lib/virtualbox/ ${LN} -sf ${PREFIX}/lib/virtualbox/${f} ${PREFIX}/bin/ .endfor @@ -261,7 +270,7 @@ do-install: ${CHMOD} 4511 ${PREFIX}/lib/virtualbox/${f} .endfor -.for f in VBoxManage VBoxSVC VBoxXPCOMIPCD VBoxExtPackHelperApp +.for f in VBoxManage VBoxSVC VBoxXPCOMIPCD VBoxExtPackHelperApp VBoxBalloonCtrl ${CHMOD} 0711 ${PREFIX}/lib/virtualbox/${f} .endfor @@ -286,7 +295,7 @@ do-install: ${PYTHON_CMD} -mcompileall ${PYTHON_SITELIBDIR}/xpcom/ post-install: -.for f in VBoxManage VBoxNetDHCP VBoxSVC VBoxXPCOMIPCD VBoxExtPackHelperApp ${VBOX_FRONTENDS} +.for f in VBoxManage VBoxNetDHCP VBoxSVC VBoxXPCOMIPCD VBoxExtPackHelperApp VBoxBalloonCtrl ${VBOX_FRONTENDS} ${CHOWN} root:${VBOXGROUP} ${PREFIX}/lib/virtualbox/${f} .endfor diff --git a/emulators/virtualbox-ose/distinfo b/emulators/virtualbox-ose/distinfo index 2091ff253672..c5fdb542713d 100644 --- a/emulators/virtualbox-ose/distinfo +++ b/emulators/virtualbox-ose/distinfo @@ -1,4 +1,4 @@ -SHA256 (VirtualBox-4.0.14.tar.bz2) = d7719326ea2f4d492c6642cc3375665a1fcf53015d912292406a574283c02663 -SIZE (VirtualBox-4.0.14.tar.bz2) = 69959224 -SHA256 (VBoxGuestAdditions_4.0.14.iso) = 74db91001a62c3933ea47532d0dc297092f4ad97285f3dd34e1e29fbc1bb3a17 -SIZE (VBoxGuestAdditions_4.0.14.iso) = 40962048 +SHA256 (VirtualBox-4.1.8.tar.bz2) = ef16d6729c9bcc298a33eff636549872dcfe291ac01bfa117cdf7aaf8a4004e0 +SIZE (VirtualBox-4.1.8.tar.bz2) = 73822230 +SHA256 (VBoxGuestAdditions_4.1.8.iso) = 2265aa350de2d62021e91ae6bbd1438c291a74494778bb443926e9b7b962c63d +SIZE (VBoxGuestAdditions_4.1.8.iso) = 45471744 diff --git a/emulators/virtualbox-ose/files/patch-configure b/emulators/virtualbox-ose/files/patch-configure index 8b889ef38986..d47c69b30074 100644 --- a/emulators/virtualbox-ose/files/patch-configure +++ b/emulators/virtualbox-ose/files/patch-configure @@ -1,15 +1,6 @@ ---- configure.orig 2009-12-17 15:23:05.000000000 +0100 -+++ configure 2009-12-21 14:25:45.000000000 +0100 -@@ -107,7 +107,7 @@ - GENISOIMAGE="genisoimage" - MKISOFS="mkisofs" - INCCRYPTO="" --LIBCRYPTO="-lcrypto" -+LIBCRYPTO="-lcrypto -lssl" - LIBPTHREAD="-lpthread" - LIBCAP="-lcap" - GSOAP="" -@@ -1773,7 +1775,7 @@ +--- configure.orig 2011-05-30 17:11:26.000000000 +0200 ++++ configure 2011-06-06 10:01:12.000000000 +0200 +@@ -1920,7 +1920,7 @@ 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 diff --git a/emulators/virtualbox-ose/files/patch-src-VBox-Devices-Makefile.kmk b/emulators/virtualbox-ose/files/patch-src-VBox-Devices-Makefile.kmk deleted file mode 100644 index 2cdf6521b3db..000000000000 --- a/emulators/virtualbox-ose/files/patch-src-VBox-Devices-Makefile.kmk +++ /dev/null @@ -1,13 +0,0 @@ ---- src/VBox/Devices/Makefile.kmk.orig 2010-12-06 22:42:36.000000000 +0100 -+++ src/VBox/Devices/Makefile.kmk 2010-12-06 22:42:59.000000000 +0100 -@@ -22,7 +22,9 @@ - VBOX_PATH_DEVICES_SRC := $(PATH_SUB_CURRENT) - - # Include sub-makefiles. --include $(PATH_SUB_CURRENT)/testcase/Makefile.kmk -+ifdef VBOX_WITH_TESTCASES -+ include $(PATH_SUB_CURRENT)/testcase/Makefile.kmk -+endif - if defined(VBOX_WITH_INTEL_PXE) || defined(VBOX_ONLY_EXTPACKS) - include $(PATH_SUB_CURRENT)/PC/PXE/Makefile.kmk - else ifndef VBOX_WITHOUT_ETHERBOOT diff --git a/emulators/virtualbox-ose/files/patch-src-VBox-Devices-PC-vbox.dsl b/emulators/virtualbox-ose/files/patch-src-VBox-Devices-PC-vbox.dsl new file mode 100644 index 000000000000..56437ffcc02c --- /dev/null +++ b/emulators/virtualbox-ose/files/patch-src-VBox-Devices-PC-vbox.dsl @@ -0,0 +1,20 @@ +--- src/VBox/Devices/PC/vbox.dsl.orig 2011-04-28 10:00:53.000000000 +0200 ++++ src/VBox/Devices/PC/vbox.dsl 2011-07-25 19:36:06.000000000 +0200 +@@ -1161,7 +1161,7 @@ + // (all of low memory space) + ResourceProducer, // bit 0 of general flags is 0 + PosDecode, // positive Decode +- MinNotFixed, // Range is not fixed ++ MinFixed, // Range is not fixed + MaxFixed, // Range is fixed + Cacheable, + ReadWrite, +@@ -1170,7 +1170,7 @@ + + 0xffdfffff, // Max = 4GB - 2MB + 0x00000000, // Translation +- 0x00000000, // Range Length (calculated ++ 0xffe00000, // Range Length (calculated + // dynamically) + , // Optional field left blank + , // Optional field left blank diff --git a/emulators/virtualbox-ose/files/patch-src-VBox-Frontends-VBoxManage-VBoxInternalManage.cpp b/emulators/virtualbox-ose/files/patch-src-VBox-Frontends-VBoxManage-VBoxInternalManage.cpp new file mode 100644 index 000000000000..00e3d32c29d5 --- /dev/null +++ b/emulators/virtualbox-ose/files/patch-src-VBox-Frontends-VBoxManage-VBoxInternalManage.cpp @@ -0,0 +1,25 @@ +- 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 +--- 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/files/patch-src-VBox-Main-src-server-freebsd-HostHardwareFreeBSD.cpp b/emulators/virtualbox-ose/files/patch-src-VBox-Main-src-server-freebsd-HostHardwareFreeBSD.cpp deleted file mode 100644 index 69d6260ac6ff..000000000000 --- a/emulators/virtualbox-ose/files/patch-src-VBox-Main-src-server-freebsd-HostHardwareFreeBSD.cpp +++ /dev/null @@ -1,33 +0,0 @@ ---- src/VBox/Main/src-server/freebsd/HostHardwareFreeBSD.cpp.orig 2011-05-16 12:33:46.000000000 -0400 -+++ src/VBox/Main/src-server/freebsd/HostHardwareFreeBSD.cpp 2011-06-24 16:03:37.000000000 -0400 -@@ -35,6 +35,7 @@ - #include - - #ifdef RT_OS_FREEBSD -+# include - # include - # include - # include -@@ -186,11 +187,17 @@ static int getDVDInfoFromCAM(DriveInfoLi - DeviceMatchPattern.pattern.device_pattern.target_id = CAM_TARGET_WILDCARD; - DeviceMatchPattern.pattern.device_pattern.target_lun = CAM_LUN_WILDCARD; - DeviceMatchPattern.pattern.device_pattern.flags = DEV_MATCH_INQUIRY; -- DeviceMatchPattern.pattern.device_pattern.inq_pat.type = T_CDROM; -- DeviceMatchPattern.pattern.device_pattern.inq_pat.media_type = SIP_MEDIA_REMOVABLE | SIP_MEDIA_FIXED; -- DeviceMatchPattern.pattern.device_pattern.inq_pat.vendor[0] = '*'; /* Matches anything */ -- DeviceMatchPattern.pattern.device_pattern.inq_pat.product[0] = '*'; /* Matches anything */ -- DeviceMatchPattern.pattern.device_pattern.inq_pat.revision[0] = '*'; /* Matches anything */ -+#if __FreeBSD_version >= 900000 -+#define INQ_PAT data.inq_pat -+#else -+#define INQ_PAT inq_pat -+#endif -+ DeviceMatchPattern.pattern.device_pattern.INQ_PAT.type = T_CDROM; -+ DeviceMatchPattern.pattern.device_pattern.INQ_PAT.media_type = SIP_MEDIA_REMOVABLE | SIP_MEDIA_FIXED; -+ DeviceMatchPattern.pattern.device_pattern.INQ_PAT.vendor[0] = '*'; /* Matches anything */ -+ DeviceMatchPattern.pattern.device_pattern.INQ_PAT.product[0] = '*'; /* Matches anything */ -+ DeviceMatchPattern.pattern.device_pattern.INQ_PAT.revision[0] = '*'; /* Matches anything */ -+#undef INQ_PAT - DeviceCCB.cdm.num_patterns = 1; - DeviceCCB.cdm.pattern_buf_len = sizeof(struct dev_match_result); - DeviceCCB.cdm.patterns = &DeviceMatchPattern; diff --git a/emulators/virtualbox-ose/files/patch-src-VBox-Runtime-r3-freebsd-fileaio-freebsd.c b/emulators/virtualbox-ose/files/patch-src-VBox-Runtime-r3-freebsd-fileaio-freebsd.c deleted file mode 100644 index 671bb5552189..000000000000 --- a/emulators/virtualbox-ose/files/patch-src-VBox-Runtime-r3-freebsd-fileaio-freebsd.c +++ /dev/null @@ -1,16 +0,0 @@ -Runtime/fileaio-freebsd: Fix error check for aio_error - -Obtained-from: https://www.virtualbox.org/changeset/38332 - ---- src/VBox/Runtime/r3/freebsd/fileaio-freebsd.cpp.orig 2011-07-15 17:34:34.000000000 +0200 -+++ src/VBox/Runtime/r3/freebsd/fileaio-freebsd.cpp 2011-11-21 09:33:26.155092865 +0100 -@@ -416,7 +416,8 @@ - { - pReqInt = pahReqs[i]; - rcBSD = aio_error(&pReqInt->AioCB); -- if (rcBSD == EINVAL || rcBSD == EAGAIN) -+ if ( rcBSD == -1 -+ && errno == EINVAL) - { - /* Was not submitted. */ - RTFILEAIOREQ_SET_STATE(pReqInt, PREPARED); diff --git a/emulators/virtualbox-ose/files/patch-src-VBox-VMM-VMMR3-CPUM.cpp b/emulators/virtualbox-ose/files/patch-src-VBox-VMM-VMMR3-CPUM.cpp deleted file mode 100644 index 5bb1888abe18..000000000000 --- a/emulators/virtualbox-ose/files/patch-src-VBox-VMM-VMMR3-CPUM.cpp +++ /dev/null @@ -1,12 +0,0 @@ ---- src/VBox/VMM/VMMR3/CPUM.cpp (Revision 71439) -+++ src/VBox/VMM/VMMR3/CPUM.cpp (Revision 71440) -@@ -999,7 +999,8 @@ - */ - if (!fHWVirtExEnabled) - { -- Assert(pVM->cpum.s.aGuestCpuIdStd[4].eax == 0); -+ Assert( pVM->cpum.s.aGuestCpuIdStd[4].eax == 0 -+ || pVM->cpum.s.aGuestCpuIdStd[0].eax < 0x4); - pVM->cpum.s.aGuestCpuIdStd[4].eax = 0; - } - } diff --git a/emulators/virtualbox-ose/files/patch-src-recompiler-Sun-testmath.c b/emulators/virtualbox-ose/files/patch-src-recompiler-Sun-testmath.c new file mode 100644 index 000000000000..c4678be05189 --- /dev/null +++ b/emulators/virtualbox-ose/files/patch-src-recompiler-Sun-testmath.c @@ -0,0 +1,22 @@ +--- src/recompiler/Sun/testmath.c.orig 2011-01-14 21:15:07.000000000 +0100 ++++ src/recompiler/Sun/testmath.c 2011-08-05 13:54:49.000000000 +0200 +@@ -261,8 +261,6 @@ + #endif + set_cw(0x27f); + +- CHECK(logl(2.7182818284590452353602874713526625L), 1.0); +- + CHECK(remainderl(1.0L, 1.0L), 0.0); + CHECK(remainderl(1.0L, 1.5L), -0.5); + CHECK(remainderl(42.0L, 34.25L), 7.75); +@@ -315,10 +313,6 @@ + CHECK(tanl(0.0L), 0.0); + CHECK(tanl(0.7853981633974483096156608458198757L), 1.0); + +- CHECK(powl(0.0, 0.0), 1.0); +- CHECK(powl(2.0, 2.0), 4.0); +- CHECK(powl(3.0, 3.0), 27.0); +- + return cErrors; + } + diff --git a/emulators/virtualbox-ose/files/patch-src-recompiler-target-i386-cpu.h b/emulators/virtualbox-ose/files/patch-src-recompiler-target-i386-cpu.h deleted file mode 100644 index b8c3a9acb71a..000000000000 --- a/emulators/virtualbox-ose/files/patch-src-recompiler-target-i386-cpu.h +++ /dev/null @@ -1,11 +0,0 @@ ---- src/recompiler/target-i386/cpu.h.orig 2010-07-15 20:13:56.000000000 +0200 -+++ src/recompiler/target-i386/cpu.h 2010-11-01 12:23:16.000000000 +0100 -@@ -678,7 +678,7 @@ - user */ - struct APICState *apic_state; - #else -- uint32_t alignment2[3]; -+ uint32_t alignment2[2]; - /** Profiling tb_flush. */ - STAMPROFILE StatTbFlush; - #endif diff --git a/emulators/virtualbox-ose/pkg-plist b/emulators/virtualbox-ose/pkg-plist index 740c84ec3c9c..e92abc4fba2a 100644 --- a/emulators/virtualbox-ose/pkg-plist +++ b/emulators/virtualbox-ose/pkg-plist @@ -1,3 +1,4 @@ +bin/VBoxBalloonCtrl %%X11%%bin/VBoxBFE bin/VBoxHeadless bin/VBoxManage @@ -15,6 +16,7 @@ bin/VBoxXPCOMIPCD lib/virtualbox/DBGCPlugInDiggers.so lib/virtualbox/VBoxAuth.so lib/virtualbox/VBoxAuthSimple.so +lib/virtualbox/VBoxBalloonCtrl %%QT4%%lib/virtualbox/VBoxDbg.so lib/virtualbox/VBoxDD.so lib/virtualbox/VBoxDD2.so