aboutsummaryrefslogtreecommitdiff
path: root/emulators
diff options
context:
space:
mode:
authorJuergen Lock <nox@FreeBSD.org>2014-09-20 09:51:04 +0000
committerJuergen Lock <nox@FreeBSD.org>2014-09-20 09:51:04 +0000
commit64fc039b060b2dd7fd171229c584366314219b6b (patch)
tree26e9d1f13adaf4c635360aa6a6cd5f40696dd889 /emulators
parent7eafff56c32b3a327a2d6f3cab6f3a5e55c2ba19 (diff)
downloadports-64fc039b060b2dd7fd171229c584366314219b6b.tar.gz
ports-64fc039b060b2dd7fd171229c584366314219b6b.zip
Notes
Diffstat (limited to 'emulators')
-rw-r--r--emulators/kqemu-kmod-devel/Makefile5
-rw-r--r--emulators/kqemu-kmod-devel/files/patch-z-common-kernel.c63
-rw-r--r--emulators/kqemu-kmod-devel/files/patch-z-kqemu-freebsd.c44
3 files changed, 107 insertions, 5 deletions
diff --git a/emulators/kqemu-kmod-devel/Makefile b/emulators/kqemu-kmod-devel/Makefile
index bca3af9de98b..ce04b2aa65f0 100644
--- a/emulators/kqemu-kmod-devel/Makefile
+++ b/emulators/kqemu-kmod-devel/Makefile
@@ -50,11 +50,6 @@ MAKE_CMD_ARGS+= ARCH=x86_64
CFLAGS+= ${DEBUG_FLAGS}
-# Not sure about the exact OSVERSION:
-.if ${OSVERSION} > 1000015
-BROKEN= KPI changes in 10 and up, use bhyve or vbox
-.endif
-
post-patch:
# Apply extra patches from the qemu-devel list; in the unlikely case that
# these cause regressions please define WITHOUT_EXTRA_PATCHES and post
diff --git a/emulators/kqemu-kmod-devel/files/patch-z-common-kernel.c b/emulators/kqemu-kmod-devel/files/patch-z-common-kernel.c
new file mode 100644
index 000000000000..197a6498b908
--- /dev/null
+++ b/emulators/kqemu-kmod-devel/files/patch-z-common-kernel.c
@@ -0,0 +1,63 @@
+--- common/kernel.c.orig
++++ common/kernel.c
+@@ -341,7 +341,7 @@ static void kqemu_del_state(struct kqemu
+ }
+ }
+
+-struct kqemu_global_state *kqemu_global_init(int max_locked_pages)
++struct kqemu_global_state * CDECL kqemu_global_init(int max_locked_pages)
+ {
+ struct kqemu_global_state *g;
+
+@@ -354,13 +354,13 @@ struct kqemu_global_state *kqemu_global_
+ return g;
+ }
+
+-void kqemu_global_delete(struct kqemu_global_state *g)
++void CDECL kqemu_global_delete(struct kqemu_global_state *g)
+ {
+ /* XXX: free all existing states ? */
+ kqemu_vfree(g);
+ }
+
+-struct kqemu_state *kqemu_init(struct kqemu_init *d,
++struct kqemu_state * CDECL kqemu_init(struct kqemu_init *d,
+ struct kqemu_global_state *g)
+ {
+ struct kqemu_state *s;
+@@ -756,7 +756,7 @@ struct kqemu_state *kqemu_init(struct kq
+ return NULL;
+ }
+
+-int kqemu_set_phys_mem(struct kqemu_state *s,
++int CDECL kqemu_set_phys_mem(struct kqemu_state *s,
+ const struct kqemu_phys_mem *kphys_mem)
+ {
+ uint64_t start, size, end, addr;
+@@ -951,7 +951,7 @@ static void profile_dump(struct kqemu_st
+ }
+ #endif
+
+-void kqemu_delete(struct kqemu_state *s)
++void CDECL kqemu_delete(struct kqemu_state *s)
+ {
+ uint8_t *s1;
+ struct kqemu_ram_page *rp;
+@@ -990,7 +990,7 @@ void kqemu_delete(struct kqemu_state *s)
+ kqemu_vfree(s1);
+ }
+
+-struct kqemu_cpu_state *kqemu_get_cpu_state(struct kqemu_state *s)
++struct kqemu_cpu_state * CDECL kqemu_get_cpu_state(struct kqemu_state *s)
+ {
+ return &s->cpu_state;
+ }
+@@ -1063,7 +1063,7 @@ static void apic_restore_nmi(struct kqem
+ }\
+ }
+
+-long kqemu_exec(struct kqemu_state *s)
++long CDECL kqemu_exec(struct kqemu_state *s)
+ {
+ const struct monitor_code_header *m = (void *)monitor_code;
+ void (*kernel2monitor)(struct kqemu_state *s) =
diff --git a/emulators/kqemu-kmod-devel/files/patch-z-kqemu-freebsd.c b/emulators/kqemu-kmod-devel/files/patch-z-kqemu-freebsd.c
new file mode 100644
index 000000000000..3839f51de5c6
--- /dev/null
+++ b/emulators/kqemu-kmod-devel/files/patch-z-kqemu-freebsd.c
@@ -0,0 +1,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 */