ports/emulators/kqemu-kmod-devel/files/patch-z-kqemu-freebsd.c
Juergen Lock 64fc039b06 - Finally import syrinx' fix for 10.0+, it seems to work no worse
than kqemu worked before. [1]
- Fix build on 10/i386.

PR:		184984 [1]
Submitted by:	syrinx [1]
2014-09-20 09:51:04 +00:00

44 lines
1.2 KiB
C

--- kqemu-freebsd.c~ 2014-02-07 20:00:33.656255395 +0200
+++ kqemu-freebsd.c 2014-02-08 08:43:19.209100708 +0200
@@ -105,17 +105,29 @@
*/
struct kqemu_page *CDECL kqemu_alloc_zeroed_page(unsigned long *ppage_index)
{
+#if __FreeBSD_version < 1000030
pmap_t pmap;
+#endif
vm_offset_t va;
vm_paddr_t pa;
+#if __FreeBSD_version >= 1000030
+ va = kmem_malloc(kernel_arena, PAGE_SIZE, M_ZERO | M_WAITOK);
+#else
va = kmem_alloc(kernel_map, PAGE_SIZE);
+#endif
+
if (va == 0) {
kqemu_log("kqemu_alloc_zeroed_page: NULL\n");
return NULL;
}
+
+#if __FreeBSD_version >= 1000030
+ pa = vtophys(va);
+#else
pmap = vm_map_pmap(kernel_map);
pa = pmap_extract(pmap, va);
+#endif
/* kqemu_log("kqemu_alloc_zeroed_page: %08x\n", pa); */
*ppage_index = pa >> PAGE_SHIFT;
return (struct kqemu_page *)va;
@@ -125,7 +137,11 @@
{
if (kqemu_debug > 0)
kqemu_log("kqemu_free_page(%p)\n", page);
+#if __FreeBSD_version >= 1000030
+ kmem_free(kernel_arena, (vm_offset_t) page, PAGE_SIZE);
+#else
kmem_free(kernel_map, (vm_offset_t) page, PAGE_SIZE);
+#endif
}
/* return kernel address of the physical page page_index */