Differential D12038 Diff 32171 head/emulators/open-vm-tools/files/patch-modules_freebsd_vmmemctl_os.c
Changeset View
Changeset View
Standalone View
Standalone View
head/emulators/open-vm-tools/files/patch-modules_freebsd_vmmemctl_os.c
--- modules/freebsd/vmmemctl/os.c.orig 2017-02-24 22:15:37 UTC | --- modules/freebsd/vmmemctl/os.c.orig 2017-02-24 14:15:37.000000000 -0800 | ||||
+++ modules/freebsd/vmmemctl/os.c | +++ modules/freebsd/vmmemctl/os.c 2017-08-15 13:54:03.813152000 -0700 | ||||
@@ -37,9 +37,11 @@ | @@ -37,9 +37,11 @@ | ||||
#include <sys/param.h> | #include <sys/param.h> | ||||
#include <sys/systm.h> | #include <sys/systm.h> | ||||
#include <sys/kernel.h> | #include <sys/kernel.h> | ||||
+#include <sys/lock.h> | +#include <sys/lock.h> | ||||
#include <sys/malloc.h> | #include <sys/malloc.h> | ||||
#include <sys/module.h> | #include <sys/module.h> | ||||
#include <sys/conf.h> | #include <sys/conf.h> | ||||
Show All 34 Lines | |||||
#endif | #endif | ||||
p->size = 0; | p->size = 0; | ||||
@@ -466,12 +477,36 @@ os_kmem_free(vm_page_t page) // IN | @@ -466,12 +477,36 @@ os_kmem_free(vm_page_t page) // IN | ||||
os_state *state = &global_state; | os_state *state = &global_state; | ||||
os_pmap *pmap = &state->pmap; | os_pmap *pmap = &state->pmap; | ||||
- if ( !vm_page_lookup(state->vmobject, page->pindex) ) { | - if ( !vm_page_lookup(state->vmobject, page->pindex) ) { | ||||
- return; | - return; | ||||
- } | |||||
+// if ( !vm_page_lookup(state->vmobject, page->pindex) ) { | +// if ( !vm_page_lookup(state->vmobject, page->pindex) ) { | ||||
+// return; | +// return; | ||||
+// } | +// } | ||||
+ | |||||
- os_pmap_putindex(pmap, page->pindex); | |||||
- vm_page_free(page); | |||||
+// os_pmap_putindex(pmap, page->pindex); | +// os_pmap_putindex(pmap, page->pindex); | ||||
+// vm_page_free(page); | +// vm_page_free(page); | ||||
+#if __FreeBSD_version > 1000029 | +#if __FreeBSD_version > 1000029 | ||||
+ VM_OBJECT_WLOCK(state->vmobject); | + VM_OBJECT_WLOCK(state->vmobject); | ||||
+#else | +#else | ||||
+ VM_OBJECT_LOCK(state->vmobject); | + VM_OBJECT_LOCK(state->vmobject); | ||||
+#endif | +#endif | ||||
+ if ( vm_page_lookup(state->vmobject, page->pindex) ) { | + if ( vm_page_lookup(state->vmobject, page->pindex) ) { | ||||
+ os_pmap_putindex(pmap, page->pindex); | + os_pmap_putindex(pmap, page->pindex); | ||||
+#if __FreeBSD_version >= 900000 | +#if __FreeBSD_version >= 900000 | ||||
+ vm_page_lock(page); | + vm_page_lock(page); | ||||
+#else | +#else | ||||
+ vm_page_lock_queues(); | + vm_page_lock_queues(); | ||||
+#endif | +#endif | ||||
+ vm_page_free(page); | + vm_page_free(page); | ||||
+#if __FreeBSD_version >= 900000 | +#if __FreeBSD_version >= 900000 | ||||
+ vm_page_unlock(page); | + vm_page_unlock(page); | ||||
+#else | +#else | ||||
+ vm_page_unlock_queues(); | + vm_page_unlock_queues(); | ||||
+#endif | +#endif | ||||
+ } | } | ||||
- | |||||
- os_pmap_putindex(pmap, page->pindex); | |||||
- vm_page_free(page); | |||||
+#if __FreeBSD_version > 1000029 | +#if __FreeBSD_version > 1000029 | ||||
+ VM_OBJECT_WUNLOCK(state->vmobject); | + VM_OBJECT_WUNLOCK(state->vmobject); | ||||
+#else | +#else | ||||
+ VM_OBJECT_UNLOCK(state->vmobject); | + VM_OBJECT_UNLOCK(state->vmobject); | ||||
+#endif | +#endif | ||||
} | } | ||||
Show All 12 Lines | |||||
+#if __FreeBSD_version > 1000029 | +#if __FreeBSD_version > 1000029 | ||||
+ VM_OBJECT_WUNLOCK(state->vmobject); | + VM_OBJECT_WUNLOCK(state->vmobject); | ||||
+#else | +#else | ||||
+ VM_OBJECT_UNLOCK(state->vmobject); | + VM_OBJECT_UNLOCK(state->vmobject); | ||||
+#endif | +#endif | ||||
return NULL; | return NULL; | ||||
} | } | ||||
@@ -504,6 +550,11 @@ os_kmem_alloc(int alloc_normal_failed) / | @@ -505,6 +551,11 @@ os_kmem_alloc(int alloc_normal_failed) / | ||||
if (!page) { | if (!page) { | ||||
os_pmap_putindex(pmap, pindex); | os_pmap_putindex(pmap, pindex); | ||||
} | |||||
+#if __FreeBSD_version > 1000029 | +#if __FreeBSD_version > 1000029 | ||||
+ VM_OBJECT_WUNLOCK(state->vmobject); | + VM_OBJECT_WUNLOCK(state->vmobject); | ||||
+#else | +#else | ||||
+ VM_OBJECT_UNLOCK(state->vmobject); | + VM_OBJECT_UNLOCK(state->vmobject); | ||||
+#endif | +#endif | ||||
} | |||||
return page; | return page; | ||||
} | |||||
@@ -847,7 +898,7 @@ vmmemctl_sysctl(SYSCTL_HANDLER_ARGS) | @@ -847,7 +898,7 @@ vmmemctl_sysctl(SYSCTL_HANDLER_ARGS) | ||||
static void | static void | ||||
vmmemctl_init_sysctl(void) | vmmemctl_init_sysctl(void) | ||||
{ | { | ||||
- oid = sysctl_add_oid(NULL, SYSCTL_STATIC_CHILDREN(_vm), OID_AUTO, | - oid = sysctl_add_oid(NULL, SYSCTL_STATIC_CHILDREN(_vm), OID_AUTO, | ||||
+ oid = SYSCTL_ADD_OID(NULL, SYSCTL_STATIC_CHILDREN(_vm), OID_AUTO, | + oid = SYSCTL_ADD_OID(NULL, SYSCTL_STATIC_CHILDREN(_vm), OID_AUTO, | ||||
BALLOON_NAME, CTLTYPE_STRING | CTLFLAG_RD, | BALLOON_NAME, CTLTYPE_STRING | CTLFLAG_RD, | ||||
0, 0, vmmemctl_sysctl, "A", | 0, 0, vmmemctl_sysctl, "A", | ||||
BALLOON_NAME_VERBOSE); | BALLOON_NAME_VERBOSE); |