1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
--- 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 */
|