mirror of
https://git.freebsd.org/ports.git
synced 2025-06-20 12:10:31 -04:00
151 lines
3.5 KiB
Text
151 lines
3.5 KiB
Text
--- vmmon-only/freebsd/hostif.c.orig Sat Apr 10 16:52:23 2004
|
|
+++ vmmon-only/freebsd/hostif.c Sat Apr 10 16:54:17 2004
|
|
@@ -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;
|
|
}
|
|
|
|
@@ -1006,8 +1038,12 @@
|
|
HostIF_APIC_Base(VMDriver *vm, Bool setVMPtr)
|
|
{
|
|
#if defined(SMP)
|
|
+#if __FreeBSD_version < 501114
|
|
return cpu_apic_address;
|
|
+#else
|
|
+ return 0; /* XXX */
|
|
+#endif
|
|
#else
|
|
return 0;
|
|
#endif
|
|
}
|
|
@@ -1035,8 +1070,12 @@
|
|
HostIF_IOAPIC_Base(VMDriver *vm)
|
|
{
|
|
#if defined(SMP)
|
|
+#if __FreeBSD_version < 501114
|
|
return io_apic_address[0]; /* XXX How about another APIC's */
|
|
#else
|
|
+ return 0; /* XXX */
|
|
+#endif
|
|
+#else
|
|
return 0;
|
|
#endif
|
|
}
|
|
@@ -1066,10 +1105,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 +1141,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;
|