ports/180499: [PATCH] fix emulators/open-vm-tools after r248084
Garrett Cooper
yaneurabeya at gmail.com
Fri Jul 12 17:10:00 UTC 2013
>Number: 180499
>Category: ports
>Synopsis: [PATCH] fix emulators/open-vm-tools after r248084
>Confidential: no
>Severity: non-critical
>Priority: low
>Responsible: freebsd-ports-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: sw-bug
>Submitter-Id: current-users
>Arrival-Date: Fri Jul 12 17:10:00 UTC 2013
>Closed-Date:
>Last-Modified:
>Originator: Garrett Cooper
>Release: 10-CURRENT
>Organization:
EMC Isilon
>Environment:
FreeBSD fuji-current.local 10.0-CURRENT FreeBSD 10.0-CURRENT #3 r+b278358-dirty: Sun Jun 9 16:05:39 PDT 2013 root at fuji-current.local:/usr/obj/usr/src/sys/FUJI-NOCOMPAT i386
>Description:
open-vm-tools doesn't compile post-r248084 See http://lists.freebsd.org/pipermail/freebsd-emulation/2013-July/010671.html for more details.
>How-To-Repeat:
>Fix:
https://github.com/yaneurabeya/freebsd-ports/blob/master/emulators/open-vm-tools/files/patch-vmmemctl-os.c
Patch attached with submission follows:
--- modules/freebsd/vmmemctl/os.c.orig 2011-09-21 11:25:15.000000000 -0700
+++ modules/freebsd/vmmemctl/os.c 2013-07-08 22:22:19.000000000 -0700
@@ -37,9 +37,11 @@
#include <sys/param.h>
#include <sys/systm.h>
#include <sys/kernel.h>
+#include <sys/lock.h>
#include <sys/malloc.h>
#include <sys/module.h>
#include <sys/conf.h>
+#include <sys/rwlock.h>
#include <sys/sysctl.h>
#include <vm/vm.h>
@@ -344,12 +346,31 @@
os_state *state = &global_state;
os_pmap *pmap = &state->pmap;
- if ( !vm_page_lookup(state->vmobject, page->pindex) ) {
- return;
- }
- os_pmap_putindex(pmap, page->pindex);
- vm_page_free(page);
+#if __FreeBSD_version > 1000029
+ VM_OBJECT_WLOCK(state->vmobject);
+#else
+ VM_OBJECT_LOCK(state->vmobject);
+#endif
+ if ( vm_page_lookup(state->vmobject, page->pindex) ) {
+ os_pmap_putindex(pmap, page->pindex);
+#if __FreeBSD_version >= 900000
+ vm_page_lock(page);
+#else
+ vm_page_lock_queues();
+#endif
+ vm_page_free(page);
+#if __FreeBSD_version >= 900000
+ vm_page_unlock(page);
+#else
+ vm_page_unlock_queues();
+#endif
+ }
+#if __FreeBSD_version > 1000029
+ VM_OBJECT_WUNLOCK(state->vmobject);
+#else
+ VM_OBJECT_UNLOCK(state->vmobject);
+#endif
}
@@ -361,8 +382,19 @@
os_state *state = &global_state;
os_pmap *pmap = &state->pmap;
+#if __FreeBSD_version > 1000029
+ VM_OBJECT_WLOCK(state->vmobject);
+#else
+ VM_OBJECT_LOCK(state->vmobject);
+#endif
+
pindex = os_pmap_getindex(pmap);
if (pindex == (vm_pindex_t)-1) {
+#if __FreeBSD_version > 1000029
+ VM_OBJECT_WUNLOCK(state->vmobject);
+#else
+ VM_OBJECT_UNLOCK(state->vmobject);
+#endif
return NULL;
}
@@ -383,6 +415,11 @@
if (!page) {
os_pmap_putindex(pmap, pindex);
}
+#if __FreeBSD_version > 1000029
+ VM_OBJECT_WUNLOCK(state->vmobject);
+#else
+ VM_OBJECT_UNLOCK(state->vmobject);
+#endif
return page;
}
>Release-Note:
>Audit-Trail:
>Unformatted:
More information about the freebsd-ports-bugs
mailing list