freebsd-ports/emulators/virtualbox-ose/files/patch-src-VBox-Runtime-r0drv-freebsd-memobj-r0drv-freebsd.c
Bernhard Froehlich 1feafdfaa6 - Update to 4.2.6
- Remove custom FreeBSD compiler flags that are only supported by our old
  base GCC 4.2 [1]
- Fix building with ports GCC 4.6 [1]
- Fix build on 10-CURRENT after removal of vm_page_lock_queues() in r242941 [2]
- Improve waits for periods shorter than a single tick [1]
- Fix dependency check when building with custom KMODDIR [3]
- Fix recording with OSS Audio backend to record at a proper volume [4]
- Initialize host-only interfaces at boot time so that other scripts and
  daemons can properly use them [2]
- Fix build if $ENV not ash-compatible [5]
- Fix ich9 bios to correctly configure pci bridge1 and pci bridge2 [6]
- Add VLAN trunking support to vboxnetflt [7]

PR:		ports/171730 [1], ports/167521 [5]
Submitted by:	Andriy Gapon <avg@FreeBSD.org> [1]
Submitted by:	Ed Maste <emaste@FreeBSD.org> [2]
Submitted by:	Kurt Jaeger <fbsd-ports@opsec.eu> [5]
Submitted by:	Gustau Perez i Querol <gperez@entel.upc.edu> [6]
Submitted by:	Landon J Fuller <landonf at plausible.coop> [7]
Reported by:	Daniel Braniss <danny@cs.huji.ac.il> [3]
Obtained from:	https://www.virtualbox.org/ticket/10695 [4]
See:		http://article.gmane.org/gmane.os.freebsd.devel.emulation/10438 [6]
2013-01-03 13:40:28 +00:00

56 lines
2.2 KiB
C

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();
+#endif
for (vm_page_t pPage = vm_page_find_least(pMemFreeBSD->pObject, 0);
pPage != NULL;
pPage = vm_page_next(pPage))
{
vm_page_unwire(pPage, 0);
}
+#if __FreeBSD_version < 900000
vm_page_unlock_queues();
+#endif
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)
{
pPage = vm_page_lookup(pObject, iPage);
+#if __FreeBSD_version < 900000
vm_page_lock_queues();
+#endif
if (fWire)
vm_page_unwire(pPage, 0);
vm_page_free(pPage);
+#if __FreeBSD_version < 900000
vm_page_unlock_queues();
+#endif
}
VM_OBJECT_UNLOCK(pObject);
return rcNoMem;
--
1.7.11.5