--- vmmon-only/freebsd/hostif.c.orig	Mon Sep  2 19:19:50 2002
+++ vmmon-only/freebsd/hostif.c	Mon Sep  2 19:30:03 2002
@@ -55,7 +55,11 @@
 
 #include <vm/vm.h>
 #include <vm/vm_param.h>
+#if __FreeBSD_version >= 500018
+#include <sys/mutex.h>
+#else
 #include <sys/lock.h>
+#endif
 #include <vm/pmap.h>
 #include <vm/vm_map.h>
 #include <vm/vm_page.h>
@@ -107,7 +111,21 @@
 
 	paddr = (vm_offset_t)addr;
         m = PHYS_TO_VM_PAGE(paddr);
-        vm_page_wire(m);
+#if __FreeBSD_version >= 500038
+	GIANT_REQUIRED;
+	vm_page_lock_queues();
+	vm_page_wire(m);
+	vm_page_unlock_queues();
+#elif __FreeBSD_version >= 500021
+	GIANT_REQUIRED;
+	vm_page_wire(m);
+#elif __FreeBSD_version >= 500013
+	mtx_lock(&vm_mtx);
+	vm_page_wire(m);
+	mtx_unlock(&vm_mtx);
+#else
+	vm_page_wire(m);
+#endif
 	return 0;
 }     
 
@@ -120,7 +138,21 @@
 
 	paddr = (vm_offset_t)addr;
 	m = PHYS_TO_VM_PAGE(paddr);
+#if __FreeBSD_version >= 500038
+	GIANT_REQUIRED;
+	vm_page_lock_queues();
+	vm_page_unwire(m, 1);
+	vm_page_unlock_queues();
+#elif __FreeBSD_version >= 500021
+	GIANT_REQUIRED;
+	vm_page_unwire(m, 1);
+#elif __FreeBSD_version >= 500013
+	mtx_lock(&vm_mtx);
 	vm_page_unwire(m, 1);
+	mtx_unlock(&vm_mtx);
+#else
+	vm_page_unwire(m, 1);
+#endif
   	return 0;
 }
  
@@ -1066,10 +1098,33 @@
         return NULL;
   }
   paddr = vtophys(addr);
+#if __FreeBSD_version >= 500038
+  GIANT_REQUIRED;
+  ka->kaddr = kmem_alloc_pageable(kernel_map, PAGE_SIZE);
+  ka->map = PHYS_TO_VM_PAGE(paddr);
+  vm_page_lock_queues();
+  vm_page_wire(ka->map);
+  vm_page_unlock_queues();
+  pmap_qenter(ka->kaddr, &ka->map, 1);
+#elif __FreeBSD_version >= 500021
+  GIANT_REQUIRED;
+  ka->kaddr = kmem_alloc_pageable(kernel_map, PAGE_SIZE);
+  ka->map = PHYS_TO_VM_PAGE(paddr);
+  vm_page_wire(ka->map);
+  pmap_kenter(ka->kaddr, paddr);
+#elif __FreeBSD_version >= 500013
+  mtx_lock(&vm_mtx);
+  ka->kaddr = kmem_alloc_pageable(kernel_map, PAGE_SIZE);
+  ka->map = PHYS_TO_VM_PAGE(paddr);
+  vm_page_wire(ka->map);
+  pmap_kenter(ka->kaddr, paddr);
+  mtx_unlock(&vm_mtx);
+#else
   ka->kaddr = kmem_alloc_pageable(kernel_map, PAGE_SIZE);
   ka->map = PHYS_TO_VM_PAGE(paddr);
   vm_page_wire(ka->map); 
   pmap_kenter(ka->kaddr, paddr);	
+#endif
   return ka->kaddr;
 }
 
@@ -1079,9 +1134,29 @@
   if (ka->map==NULL)
 	  return 0;
 
-  vm_page_unwire(ka->map, 1); 
-  pmap_kremove(ka->kaddr);	
+#if __FreeBSD_version >= 500038
+  GIANT_REQUIRED;
+  vm_page_lock_queues();
+  vm_page_unwire(ka->map, 1);
+  vm_page_unlock_queues();
+  pmap_qremove(ka->kaddr, 1);
   kmem_free(kernel_map, ka->kaddr, PAGE_SIZE);
+#elif __FreeBSD_version >= 500021
+  GIANT_REQUIRED;
+  vm_page_unwire(ka->map, 1);
+  pmap_kremove(ka->kaddr);
+  kmem_free(kernel_map, ka->kaddr, PAGE_SIZE);
+#elif __FreeBSD_version >= 500013
+  mtx_lock(&vm_mtx);
+  vm_page_unwire(ka->map, 1);
+  pmap_kremove(ka->kaddr);
+  kmem_free(kernel_map, ka->kaddr, PAGE_SIZE);
+  mtx_unlock(&vm_mtx);
+#else
+  vm_page_unwire(ka->map, 1);
+  pmap_kremove(ka->kaddr);
+  kmem_free(kernel_map, ka->kaddr, PAGE_SIZE);
+#endif
   ka->kaddr = 0;
   ka->map = NULL;
   return 0;
