]> git.ipfire.org Git - thirdparty/open-vm-tools.git/commitdiff
Accomodate kmem_malloc() and kmem_free() changes in FreeBSD 12
authorOliver Kurth <okurth@vmware.com>
Fri, 26 Oct 2018 17:44:57 +0000 (10:44 -0700)
committerOliver Kurth <okurth@vmware.com>
Fri, 26 Oct 2018 17:44:57 +0000 (10:44 -0700)
The kmem_alloc() and kmem_free() APIs have been changed in the
upcoming FreeBSD 12.0 release.   The change was to drop the now
unused arena parameter from both functions.

This fix defines and uses several macros whose definitions are
specific to FreeBSD version 10, 11 and 12 kernel memory API changes.

Github open-vm-tools pull request from Josh Paetzel.
https://github.com/vmware/open-vm-tools/pull/286

open-vm-tools/AUTHORS
open-vm-tools/modules/freebsd/vmmemctl/os.c

index 9f433866a918e76040f8f4a115556c207e67cfd1..6c64a50057978d57786063c639f92afd76b299ff 100644 (file)
@@ -39,3 +39,6 @@ Steve Wills     Fix vmmemctl.ko driver build for supported FreeBSD releases.
 
 John Eismeier   Propose fix some spelling.
                 - https://github.com/vmware/open-vm-tools/pull/264
+
+Josh Paetzel    Additional changes to vmmemctl.ko for FreeBSD 12.0 API changes.
+                - https://github.com/vmware/open-vm-tools/pull/286
index 0894abfb622bab5f608f33b470bc34e7282d49f4..2cfdfa84522c035c410e916dc6afc2684323aa98 100644 (file)
@@ -109,6 +109,36 @@ MALLOC_DEFINE(M_VMMEMCTL, BALLOON_NAME, "vmmemctl metadata");
    #define VM_SYS_PAGES vm_cnt.v_page_count
 #endif
 
+/*
+ * The kmem_malloc() and kmem_free() APIs changed at different times during
+ * the FreeBSD 12.0 ALPHA snapshot releases.  The difference in the
+ * __FreeBSD_version values for FreeBSD 12.0 in the following macros are
+ * consistent with when each API was changed.
+ */
+#if __FreeBSD_version < 1000000
+   #define KVA_ALLOC(size) kmem_alloc_nofault(kernel_map, size)
+   #define KVA_FREE(offset, size) kmem_free(kernel_map, offset, size)
+#else
+   #define KVA_ALLOC(size) kva_alloc(size);
+   #define KVA_FREE(offset, size) kva_free(offset, size)
+#endif
+
+#if __FreeBSD_version < 1000000
+   #define KMEM_ALLOC(size) kmem_alloc(kernel_map, size)
+#elif  __FreeBSD_version < 1200080
+   #define KMEM_ALLOC(size) kmem_malloc(kernel_arena, size, M_WAITOK | M_ZERO)
+#else
+   #define KMEM_ALLOC(size) kmem_malloc(size, M_WAITOK | M_ZERO)
+#endif
+
+#if __FreeBSD_version < 1000000
+   #define KMEM_FREE(offset, size) kmem_free(kernel_map, offset, size)
+#elif __FreeBSD_version < 1200083
+   #define KMEM_FREE(offset, size) kmem_free(kernel_arena, offset, size)
+#else
+   #define KMEM_FREE(offset, size) kmem_free(offset, size)
+#endif
+
 /*
  * Globals
  */
@@ -322,11 +352,7 @@ OS_ReservedPageGetHandle(PA64 pa)     // IN
 Mapping
 OS_MapPageHandle(PageHandle handle)     // IN
 {
-#if __FreeBSD_version < 1000000
-   vm_offset_t res = kmem_alloc_nofault(kernel_map, PAGE_SIZE);
-#else
-   vm_offset_t res = kva_alloc(PAGE_SIZE);
-#endif
+   vm_offset_t res = KVA_ALLOC(PAGE_SIZE);
 
    vm_page_t page = (vm_page_t)handle;
 
@@ -384,11 +410,7 @@ void
 OS_UnmapPage(Mapping mapping)           // IN
 {
    pmap_qremove((vm_offset_t)mapping, 1);
-#if __FreeBSD_version < 1000000
-   kmem_free(kernel_map, (vm_offset_t)mapping, PAGE_SIZE);
-#else
-   kva_free((vm_offset_t)mapping, PAGE_SIZE);
-#endif
+   KVA_FREE((vm_offset_t)mapping, PAGE_SIZE);
 }
 
 
@@ -405,22 +427,14 @@ os_pmap_alloc(os_pmap *p) // IN
    p->size = (p->size + sizeof(unsigned long) - 1) &
                          ~(sizeof(unsigned long) - 1);
 
-#if __FreeBSD_version < 1000000
-   p->bitmap = (unsigned long *)kmem_alloc(kernel_map, p->size);
-#else
-   p->bitmap = (unsigned long *)kmem_malloc(kernel_arena, p->size, M_WAITOK | M_ZERO);
-#endif
+   p->bitmap = (unsigned long *)KMEM_ALLOC(p->size);
 }
 
 
 static void
 os_pmap_free(os_pmap *p) // IN
 {
-#if __FreeBSD_version < 1000000
-   kmem_free(kernel_map, (vm_offset_t)p->bitmap, p->size);
-#else
-   kmem_free(kernel_arena, (vm_offset_t)p->bitmap, p->size);
-#endif
+   KMEM_FREE((vm_offset_t)p->bitmap, p->size);
    p->size = 0;
    p->bitmap = NULL;
 }