freebsd-ports/emulators/vmware2/files/patch-be
Ian Dowse 8e07872e6a Catch up with some not-so-recent VM changes to make vmware2 work
again on -CURRENT. Without this, attempting to boot the virtual
machine causes an instant panic in the host.

Approved by: knu, vsilyaev@mindspring.com (maintainer)
2002-10-18 16:33:02 +00:00

125 lines
3 KiB
Text

--- 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;