Changeset View
Changeset View
Standalone View
Standalone View
head/emulators/open-vm-tools/files/patch-vmmemctl-os.c
--- modules/freebsd/vmmemctl/os.c.orig 2013-09-23 10:51:10.000000000 -0500 | --- modules/freebsd/vmmemctl/os.c.orig 2013-09-23 08:51:10.000000000 -0700 | ||||
+++ modules/freebsd/vmmemctl/os.c 2014-04-23 15:51:43.823041178 -0500 | +++ modules/freebsd/vmmemctl/os.c 2017-02-20 21:19:02.000000000 -0800 | ||||
@@ -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> | ||||
+#include <sys/rwlock.h> | +#include <sys/rwlock.h> | ||||
#include <sys/sysctl.h> | #include <sys/sysctl.h> | ||||
#include <vm/vm.h> | #include <vm/vm.h> | ||||
@@ -223,7 +225,11 @@ static __inline__ unsigned long os_ffz(u | @@ -223,7 +225,11 @@ | ||||
unsigned long | unsigned long | ||||
OS_ReservedPageGetLimit(void) | OS_ReservedPageGetLimit(void) | ||||
{ | { | ||||
+#if __FreeBSD_version < 1100015 | +#if __FreeBSD_version < 1100015 | ||||
return cnt.v_page_count; | return cnt.v_page_count; | ||||
+#else | +#else | ||||
+ return vm_cnt.v_page_count; | + return vm_cnt.v_page_count; | ||||
+#endif | +#endif | ||||
} | } | ||||
@@ -295,7 +301,13 @@ OS_ReservedPageGetHandle(PA64 pa) // | @@ -295,7 +301,13 @@ | ||||
Mapping | Mapping | ||||
OS_MapPageHandle(PageHandle handle) // IN | OS_MapPageHandle(PageHandle handle) // IN | ||||
{ | { | ||||
+ | + | ||||
+#if __FreeBSD_version >= 1000042 | +#if __FreeBSD_version >= 1000042 | ||||
+ vm_offset_t res = kva_alloc(PAGE_SIZE); | + vm_offset_t res = kva_alloc(PAGE_SIZE); | ||||
+#else | +#else | ||||
vm_offset_t res = kmem_alloc_nofault(kernel_map, PAGE_SIZE); | vm_offset_t res = kmem_alloc_nofault(kernel_map, PAGE_SIZE); | ||||
+#endif | +#endif | ||||
+ | + | ||||
vm_page_t page = (vm_page_t)handle; | vm_page_t page = (vm_page_t)handle; | ||||
if (!res) { | if (!res) { | ||||
@@ -352,7 +364,11 @@ void | @@ -352,7 +364,11 @@ | ||||
OS_UnmapPage(Mapping mapping) // IN | OS_UnmapPage(Mapping mapping) // IN | ||||
{ | { | ||||
pmap_qremove((vm_offset_t)mapping, 1); | pmap_qremove((vm_offset_t)mapping, 1); | ||||
+#if __FreeBSD_version >= 1000042 | +#if __FreeBSD_version >= 1000042 | ||||
+ kva_free((vm_offset_t)mapping, PAGE_SIZE); | + kva_free((vm_offset_t)mapping, PAGE_SIZE); | ||||
+#else | +#else | ||||
kmem_free(kernel_map, (vm_offset_t)mapping, PAGE_SIZE); | kmem_free(kernel_map, (vm_offset_t)mapping, PAGE_SIZE); | ||||
+#endif | +#endif | ||||
} | } | ||||
@@ -360,7 +376,11 @@ static void | @@ -360,7 +376,11 @@ | ||||
os_pmap_alloc(os_pmap *p) // IN | os_pmap_alloc(os_pmap *p) // IN | ||||
{ | { | ||||
/* number of pages (div. 8) */ | /* number of pages (div. 8) */ | ||||
+#if __FreeBSD_version < 1100015 | +#if __FreeBSD_version < 1100015 | ||||
p->size = (cnt.v_page_count + 7) / 8; | p->size = (cnt.v_page_count + 7) / 8; | ||||
+#else | +#else | ||||
+ p->size = (vm_cnt.v_page_count + 7) / 8; | + p->size = (vm_cnt.v_page_count + 7) / 8; | ||||
+#endif | +#endif | ||||
/* | /* | ||||
* expand to nearest word boundary | * expand to nearest word boundary | ||||
@@ -369,14 +389,23 @@ os_pmap_alloc(os_pmap *p) // IN | @@ -369,14 +389,23 @@ | ||||
p->size = (p->size + sizeof(unsigned long) - 1) & | p->size = (p->size + sizeof(unsigned long) - 1) & | ||||
~(sizeof(unsigned long) - 1); | ~(sizeof(unsigned long) - 1); | ||||
+#if __FreeBSD_version >= 1000042 | +#if __FreeBSD_version >= 1000042 | ||||
+ p->bitmap = (unsigned long *)kmem_malloc(kernel_arena, p->size, | + p->bitmap = (unsigned long *)kmem_malloc(kernel_arena, p->size, | ||||
+ M_WAITOK | M_ZERO); | + M_WAITOK | M_ZERO); | ||||
+#else | +#else | ||||
p->bitmap = (unsigned long *)kmem_alloc(kernel_map, p->size); | p->bitmap = (unsigned long *)kmem_alloc(kernel_map, p->size); | ||||
+#endif | +#endif | ||||
} | } | ||||
static void | static void | ||||
os_pmap_free(os_pmap *p) // IN | os_pmap_free(os_pmap *p) // IN | ||||
{ | { | ||||
+#if __FreeBSD_version >= 1000042 | +#if __FreeBSD_version >= 1000042 | ||||
+ kva_free((vm_offset_t)p->bitmap, p->size); | + kva_free((vm_offset_t)p->bitmap, p->size); | ||||
+#else | +#else | ||||
kmem_free(kernel_map, (vm_offset_t)p->bitmap, p->size); | kmem_free(kernel_map, (vm_offset_t)p->bitmap, p->size); | ||||
+#endif | +#endif | ||||
p->size = 0; | p->size = 0; | ||||
p->bitmap = NULL; | p->bitmap = NULL; | ||||
} | } | ||||
@@ -449,12 +478,31 @@ os_kmem_free(vm_page_t page) // IN | @@ -449,12 +478,31 @@ | ||||
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; | ||||
- } | - } | ||||
- os_pmap_putindex(pmap, page->pindex); | - os_pmap_putindex(pmap, page->pindex); | ||||
Show All 20 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 | ||||
} | } | ||||
@@ -466,8 +514,19 @@ os_kmem_alloc(int alloc_normal_failed) / | @@ -466,8 +514,19 @@ | ||||
os_state *state = &global_state; | os_state *state = &global_state; | ||||
os_pmap *pmap = &state->pmap; | os_pmap *pmap = &state->pmap; | ||||
+#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 | ||||
+ | + | ||||
pindex = os_pmap_getindex(pmap); | pindex = os_pmap_getindex(pmap); | ||||
if (pindex == (vm_pindex_t)-1) { | if (pindex == (vm_pindex_t)-1) { | ||||
+#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; | ||||
} | } | ||||
@@ -488,6 +547,11 @@ os_kmem_alloc(int alloc_normal_failed) / | @@ -488,6 +547,11 @@ | ||||
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; | ||||
} | } | ||||
@@ -824,7 +888,7 @@ | |||||
static 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, | |||||
BALLOON_NAME, CTLTYPE_STRING | CTLFLAG_RD, | |||||
0, 0, vmmemctl_sysctl, "A", | |||||
BALLOON_NAME_VERBOSE); |