diff options
author | nox <nox@FreeBSD.org> | 2014-09-20 17:51:04 +0800 |
---|---|---|
committer | nox <nox@FreeBSD.org> | 2014-09-20 17:51:04 +0800 |
commit | 00fc45ef5c5c79095d93e2602cd857d80dc8d72b (patch) | |
tree | 26e9d1f13adaf4c635360aa6a6cd5f40696dd889 | |
parent | 392c9453953a028d3058aa099363c756e611ff2f (diff) | |
download | freebsd-ports-gnome-00fc45ef5c5c79095d93e2602cd857d80dc8d72b.tar.gz freebsd-ports-gnome-00fc45ef5c5c79095d93e2602cd857d80dc8d72b.tar.zst freebsd-ports-gnome-00fc45ef5c5c79095d93e2602cd857d80dc8d72b.zip |
- 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]
-rw-r--r-- | emulators/kqemu-kmod-devel/Makefile | 5 | ||||
-rw-r--r-- | emulators/kqemu-kmod-devel/files/patch-z-common-kernel.c | 63 | ||||
-rw-r--r-- | emulators/kqemu-kmod-devel/files/patch-z-kqemu-freebsd.c | 44 |
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 */ |