aboutsummaryrefslogtreecommitdiff
path: root/emulators/qemu
diff options
context:
space:
mode:
authorNorikatsu Shigemura <nork@FreeBSD.org>2005-10-31 13:43:13 +0000
committerNorikatsu Shigemura <nork@FreeBSD.org>2005-10-31 13:43:13 +0000
commit6561fa6425bf0a92ecf2b89b9563241e1e2c4c75 (patch)
treecec39cdbab52d2e796aa2cb00fd4615b51b5e50f /emulators/qemu
parent7fcc885a6cad104b17a7b7e1fcf826edaa580e7c (diff)
downloadports-6561fa6425bf0a92ecf2b89b9563241e1e2c4c75.tar.gz
ports-6561fa6425bf0a92ecf2b89b9563241e1e2c4c75.zip
Notes
Diffstat (limited to 'emulators/qemu')
-rw-r--r--emulators/qemu/Makefile46
-rw-r--r--emulators/qemu/distinfo6
-rw-r--r--emulators/qemu/files/kqemu-freebsd-patch513
-rw-r--r--emulators/qemu/files/patch-Makefile.target9
-rw-r--r--emulators/qemu/files/patch-audio::audio.c12
-rw-r--r--emulators/qemu/pkg-plist2
6 files changed, 21 insertions, 567 deletions
diff --git a/emulators/qemu/Makefile b/emulators/qemu/Makefile
index 15f0d4c11b75..2187007317a7 100644
--- a/emulators/qemu/Makefile
+++ b/emulators/qemu/Makefile
@@ -6,17 +6,13 @@
#
PORTNAME= qemu
-PORTVERSION= 0.7.2s.20050909
-PORTREVISION= 2
+PORTVERSION= 0.7.2s.20051030
+PORTREVISION= 0
CATEGORIES= emulators
-MASTER_SITES= http://www.qemu.org/ \
- http://people.fruitsalad.org/nox/qemu/ \
- http://dad-answers.com/qemu/
-DISTNAME= ${PORTNAME}-snapshot-2005-09-09_23
-.if defined(WITH_KQEMU)
-DISTFILES= ${EXTRACT_ONLY} ${DISTKQEMU}
-.endif
-EXTRACT_ONLY= ${DISTNAME}${EXTRACT_SUFX}
+MASTER_SITES= http://www.qemu.org/:release \
+ http://people.fruitsalad.org/nox/qemu/:snapshot \
+ http://qemu.dad-answers.com/download/qemu/:snapshot
+DISTFILES= ${PORTNAME}-snapshot-2005-10-30_23${EXTRACT_SUFX}:snapshot
MAINTAINER= nox@jelal.kn-bremen.de
COMMENT= QEMU CPU Emulator
@@ -25,10 +21,8 @@ BUILD_DEPENDS+= texi2html:${PORTSDIR}/textproc/texi2html
.if defined(WITH_SAMBA)
RUN_DEPENDS+= ${LOCALBASE}/sbin/smbd:${PORTSDIR}/net/samba
.endif
-
.if defined(WITH_KQEMU)
-DISTKQEMU= kqemu-0.7.2.tar.gz
-EXTRA_PATCHES= ${FILESDIR}/kqemu-freebsd-patch
+BUILD_DEPENDS+= ${LOCALBASE}/include/kqemu/kqemu.h:${PORTSDIR}/emulators/kqemu-kmod
.endif
HAS_CONFIGURE= yes
@@ -43,13 +37,9 @@ MAKE_ENV+= BSD_MAKE=${MAKE}
MAN1= qemu.1 qemu-img.1
ONLY_FOR_ARCHS= amd64 i386
.if defined(WITH_KQEMU)
-NO_PACKAGE= Depends on kernel, and module not redistributable
CONFIGURE_ARGS+= --enable-kqemu
-PLIST_SUB= WITH_KQEMU=""
-PLIST_SUB+= KMODDIR=${KMODDIR:C/^\///}
.else
CONFIGURE_ARGS+= --disable-kqemu
-PLIST_SUB= WITH_KQEMU="@comment "
.endif
.include <bsd.port.pre.mk>
@@ -59,10 +49,6 @@ ARCH= x86_64
.endif
USE_GCC= 3.4
-.if defined(WITH_KQEMU) && !exists(${SRC_BASE}/sys/Makefile)
-IGNORE= kqemu requires kernel source to be installed
-.endif
-
pre-everything::
.if !defined(WITH_KQEMU)
@${ECHO_MSG} "Notice: you can build qemu with the (alpha!) kqemu accelerator kernel module"
@@ -74,11 +60,10 @@ pre-everything::
@${ECHO_MSG} "WITH_SAMBA."
.endif
-.if defined(WITH_KQEMU)
post-extract:
- @cd ${WRKSRC} && ${TAR} xfz ${_DISTDIR}/${DISTKQEMU}
- @${LN} -s Makefile.freebsd ${WRKSRC}/kqemu/BSDmakefile
-.endif
+ @${MKDIR} ${WRKSRC}/kqemu
+ @${TOUCH} ${WRKSRC}/kqemu/Makefile
+ @${ECHO} all: > ${WRKSRC}/kqemu/Makefile.freebsd
pre-patch:
@for A in ${ONLY_FOR_ARCHS}; do \
@@ -86,17 +71,6 @@ pre-patch:
done
post-install:
-.if defined(WITH_KQEMU)
- ${INSTALL_SCRIPT} ${WRKSRC}/kqemu/kqemu.ko ${KMODDIR}
- if mount |${GREP} ^devfs >/dev/null ; then \
- : ; \
- else \
- if [ ! -e /dev/kqemu ]; then\
- mknod /dev/kqemu c 250 0 ; \
- fi ; \
- ${CHMOD} 666 /dev/kqemu ; \
- fi
-.endif
@${CAT} ${PKGMESSAGE}
.include <bsd.port.post.mk>
diff --git a/emulators/qemu/distinfo b/emulators/qemu/distinfo
index a1230e11ee6c..f08c3a161c2f 100644
--- a/emulators/qemu/distinfo
+++ b/emulators/qemu/distinfo
@@ -1,4 +1,2 @@
-MD5 (qemu-snapshot-2005-09-09_23.tar.bz2) = db4ffeb081666c7352f5c0231e3f09c7
-SIZE (qemu-snapshot-2005-09-09_23.tar.bz2) = 1122120
-MD5 (kqemu-0.7.2.tar.gz) = 02cfdecda90458d6393781496ec6b48b
-SIZE (kqemu-0.7.2.tar.gz) = 79314
+MD5 (qemu-snapshot-2005-10-30_23.tar.bz2) = d41b56254cc8704aef80fd188e30e95a
+SIZE (qemu-snapshot-2005-10-30_23.tar.bz2) = 1162650
diff --git a/emulators/qemu/files/kqemu-freebsd-patch b/emulators/qemu/files/kqemu-freebsd-patch
deleted file mode 100644
index 18bc371df0dc..000000000000
--- a/emulators/qemu/files/kqemu-freebsd-patch
+++ /dev/null
@@ -1,513 +0,0 @@
-Index: qemu/kqemu/Makefile.freebsd
-@@ -5,6 +5,7 @@
- .elif ${MACHINE_ARCH} == "amd64"
- OBJS= kqemu-mod-x86_64.o
- .endif
-+CC= cc
- WERROR=
-
- .include <bsd.kmod.mk>
-Index: qemu/kqemu/kqemu-freebsd.c
-@@ -3,32 +3,55 @@
- #include <sys/param.h>
- #include <sys/systm.h>
- #include <sys/conf.h>
-+#include <sys/ctype.h>
-+#include <sys/fcntl.h>
- #include <sys/ioccom.h>
- #include <sys/malloc.h>
- #include <sys/module.h>
-+#if __FreeBSD_version >= 500000
- #include <sys/mutex.h>
-+#endif
- #include <sys/proc.h>
-+#include <sys/resourcevar.h>
-+#if __FreeBSD_version >= 500000
- #include <sys/sched.h>
-+#endif
- #include <sys/signalvar.h>
- #include <sys/kernel.h>
-+#include <sys/sysctl.h>
-+#include <sys/uio.h>
-+#if __FreeBSD_version < 500000
-+#include <sys/buf.h>
-+#endif
-+
- #include <vm/vm.h>
- #include <vm/vm_param.h>
- #include <vm/vm_extern.h>
- #include <vm/pmap.h>
- #include <vm/vm_map.h>
- #include <vm/vm_kern.h>
-+#include <vm/vm_page.h>
-+
- #include <machine/vmparam.h>
- #include <machine/stdarg.h>
-
- #include "kqemu-kernel.h"
-
-+#ifndef KQEMU_MAJOR
-+#define KQEMU_MAJOR 250
-+#endif
-+
- MALLOC_DECLARE(M_KQEMU);
- MALLOC_DEFINE(M_KQEMU, "kqemu", "kqemu buffers");
-
-+int kqemu_debug;
-+SYSCTL_INT(_debug, OID_AUTO, kqemu_debug, CTLFLAG_RW, &kqemu_debug, 0,
-+ "kqemu debug flag");
-+
- #define USER_BASE 0x1000
-
- /* lock the page at virtual address 'user_addr' and return its
-- physical page index. Return -1 if error */
-+ physical page index. Return NULL if error */
- struct kqemu_user_page *CDECL kqemu_lock_user_page(unsigned long *ppage_index,
- unsigned long user_addr)
- {
-@@ -37,14 +60,18 @@
- vm_paddr_t pa = 0;
- int ret;
- pmap_t pmap;
-+#if __FreeBSD_version >= 500000
- ret = vm_map_wire(&vm->vm_map, va, va+PAGE_SIZE, VM_MAP_WIRE_USER);
-+#else
-+ ret = vm_map_user_pageable(&vm->vm_map, va, va+PAGE_SIZE, FALSE);
-+#endif
- if (ret != KERN_SUCCESS) {
-- printf("kqemu_lock_user_page(%08lx) failed, ret=%d\n", user_addr, ret);
-+ kqemu_log("kqemu_lock_user_page(%08lx) failed, ret=%d\n", user_addr, ret);
- return NULL;
- }
- pmap = vm_map_pmap(&vm->vm_map);
- pa = pmap_extract(pmap, va);
-- // printf("kqemu_lock_user_page(%08lx) va=%08x pa=%08x\n", user_addr, va, pa);
-+ /* kqemu_log("kqemu_lock_user_page(%08lx) va=%08x pa=%08x\n", user_addr, va, pa); */
- *ppage_index = pa >> PAGE_SHIFT;
- return (struct kqemu_user_page *)va;
- }
-@@ -54,12 +81,16 @@
- struct vmspace *vm = curproc->p_vmspace;
- vm_offset_t va;
- int ret;
-- // printf("kqemu_unlock_user_page(%08lx)\n", page_index);
-+ /* kqemu_log("kqemu_unlock_user_page(%08lx)\n", page_index); */
- va = (vm_offset_t)page;
-+#if __FreeBSD_version >= 500000
- ret = vm_map_unwire(&vm->vm_map, va, va+PAGE_SIZE, VM_MAP_WIRE_USER);
-+#else
-+ ret = vm_map_user_pageable(&vm->vm_map, va, va+PAGE_SIZE, TRUE);
-+#endif
- #if 0
- if (ret != KERN_SUCCESS) {
-- printf("kqemu_unlock_user_page(%08lx) failed, ret=%d\n", page_index, ret);
-+ kqemu_log("kqemu_unlock_user_page(%08lx) failed, ret=%d\n", page_index, ret);
- }
- #endif
- }
-@@ -76,20 +107,21 @@
-
- va = kmem_alloc(kernel_map, PAGE_SIZE);
- if (va == 0) {
-- printf("kqemu_alloc_zeroed_page: NULL\n");
-- return -1;
-+ kqemu_log("kqemu_alloc_zeroed_page: NULL\n");
-+ return NULL;
- }
- pmap = vm_map_pmap(kernel_map);
- pa = pmap_extract(pmap, va);
-- // printf("kqemu_alloc_zeroed_page: %08x\n", pa);
-+ /* kqemu_log("kqemu_alloc_zeroed_page: %08x\n", pa); */
- *ppage_index = pa >> PAGE_SHIFT;
- return (struct kqemu_page *)va;
- }
-
- void CDECL kqemu_free_page(struct kqemu_page *page)
- {
-- // printf("kqemu_free_page(%08lx)\n", page_index);
-- /* XXX: do it */
-+ if (kqemu_debug > 0)
-+ kqemu_log("kqemu_free_page(%p)\n", page);
-+ kmem_free(kernel_map, (vm_offset_t) page, PAGE_SIZE);
- }
-
- /* return kernel address of the physical page page_index */
-@@ -103,42 +135,29 @@
- GB of physical memory */
- void * CDECL kqemu_vmalloc(unsigned int size)
- {
-- struct vmspace *vm = curproc->p_vmspace;
-- vm_offset_t va = USER_BASE;
-- int rv;
-- if (size % PAGE_SIZE != 0) {
-- printf("kqemu_vmalloc(%d) not a multiple of page size\n", size);
-- return NULL;
-- }
-- rv = vm_map_find(&vm->vm_map, NULL, 0, &va, size, 1,
-- VM_PROT_ALL, VM_PROT_ALL, 0);
-- if (rv != KERN_SUCCESS) {
-- printf("kqemu_vmalloc(%d) failed rv=%d\n", size, rv);
-- return NULL;
-- }
-- printf("kqemu_vmalloc(%d): %08x\n", size, va);
-- return (void *)va;
-+ void *ptr = malloc(size, M_KQEMU, M_WAITOK);
-+ if (kqemu_debug > 0)
-+ kqemu_log("kqemu_vmalloc(%d): %p\n", size, ptr);
-+ return ptr;
- }
-
- void CDECL kqemu_vfree(void *ptr)
- {
-- printf("kqemu_vfree(%p)\n", ptr);
-+ if (kqemu_debug > 0)
-+ kqemu_log("kqemu_vfree(%p)\n", ptr);
-+ free(ptr, M_KQEMU);
- }
-
- /* return the physical page index for a given virtual page */
- unsigned long CDECL kqemu_vmalloc_to_phys(const void *vaddr)
- {
-- struct vmspace *vm = curproc->p_vmspace;
-- vm_paddr_t pa;
-- pmap_t pmap;
--
-- pmap = vm_map_pmap(&vm->vm_map);
-- pa = pmap_extract(pmap, (vm_offset_t)vaddr);
-+ vm_paddr_t pa = vtophys(vaddr);
- if (pa == 0) {
-- printf("kqemu_vmalloc_to_phys(%p)->error\n", vaddr);
-+ kqemu_log("kqemu_vmalloc_to_phys(%p)->error\n", vaddr);
- return -1;
- }
-- printf("kqemu_vmalloc_to_phys(%p)->%08x\n", vaddr, pa);
-+ if (kqemu_debug > 0)
-+ kqemu_log("kqemu_vmalloc_to_phys(%p)->%08x\n", vaddr, pa);
- return pa >> PAGE_SHIFT;
- }
-
-@@ -154,16 +173,48 @@
- {
- }
-
-+#if __FreeBSD_version < 500000
-+static int
-+curpriority_cmp(struct proc *p)
-+{
-+ int c_class, p_class;
-+
-+ c_class = RTP_PRIO_BASE(curproc->p_rtprio.type);
-+ p_class = RTP_PRIO_BASE(p->p_rtprio.type);
-+ if (p_class != c_class)
-+ return (p_class - c_class);
-+ if (p_class == RTP_PRIO_NORMAL)
-+ return (((int)p->p_priority - (int)curpriority) / PPQ);
-+ return ((int)p->p_rtprio.prio - (int)curproc->p_rtprio.prio);
-+}
-+
-+/* return TRUE if a signal is pending (i.e. the guest must stop
-+ execution) */
-+int CDECL kqemu_schedule(void)
-+{
-+ struct proc *p = curproc;
-+ if (curpriority_cmp(p) > 0) {
-+ int s = splhigh();
-+ p->p_priority = MAXPRI;
-+ setrunqueue(p);
-+ p->p_stats->p_ru.ru_nvcsw++;
-+ mi_switch();
-+ splx(s);
-+ }
-+ return issignal(curproc) != 0;
-+}
-+#else
- /* return TRUE if a signal is pending (i.e. the guest must stop
- execution) */
- int CDECL kqemu_schedule(void)
- {
-- // printf("kqemu_schedule\n");
-+ /* kqemu_log("kqemu_schedule\n"); */
- mtx_lock_spin(&sched_lock);
- mi_switch(SW_VOL, NULL);
- mtx_unlock_spin(&sched_lock);
- return SIGPENDING(curthread);
- }
-+#endif
-
- static char log_buf[4096];
-
-@@ -176,47 +227,159 @@
- va_end(ap);
- }
-
-+#define KQEMU_MAX_INSTANCES 4
-+
- struct kqemu_instance {
-- // struct semaphore sem;
-+#if __FreeBSD_version >= 500000
-+ TAILQ_ENTRY(kqemu_instance) kqemu_ent;
-+ struct cdev *kqemu_dev;
-+#endif
-+ /* struct semaphore sem; */
- struct kqemu_state *state;
- };
-
-+static int kqemu_ref_count = 0;
-+static int max_locked_pages;
-+
-+#if __FreeBSD_version < 500000
-+static dev_t kqemu_dev;
-+#else
-+static struct clonedevs *kqemuclones;
-+static TAILQ_HEAD(,kqemu_instance) kqemuhead = TAILQ_HEAD_INITIALIZER(kqemuhead);
-+static eventhandler_tag clonetag;
-+#endif
-+
- static d_close_t kqemu_close;
- static d_open_t kqemu_open;
- static d_ioctl_t kqemu_ioctl;
-
- static struct cdevsw kqemu_cdevsw = {
-+#if __FreeBSD_version < 500000
-+ /* open */ kqemu_open,
-+ /* close */ kqemu_close,
-+ /* read */ noread,
-+ /* write */ nowrite,
-+ /* ioctl */ kqemu_ioctl,
-+ /* poll */ nopoll,
-+ /* mmap */ nommap,
-+ /* strategy */ nostrategy,
-+ /* name */ "kqemu",
-+ /* maj */ KQEMU_MAJOR,
-+ /* dump */ nodump,
-+ /* psize */ nopsize,
-+ /* flags */ 0,
-+ /* bmaj */ -1
-+#else
- .d_version = D_VERSION,
- .d_flags = D_NEEDGIANT,
- .d_open = kqemu_open,
- .d_ioctl = kqemu_ioctl,
- .d_close = kqemu_close,
- .d_name = "kqemu"
-+#endif
- };
-
--/* For use with make_dev(9)/destroy_dev(9). */
--static struct cdev *kqemu_dev;
-+#if __FreeBSD_version >= 500000
-+static void
-+#if __FreeBSD_version >= 600034
-+kqemu_clone(void *arg, struct ucred *cred, char *name, int namelen,
-+struct cdev **dev)
-+#else
-+kqemu_clone(void *arg, char *name, int namelen, struct cdev **dev)
-+#endif
-+{
-+ int unit, r;
-+ if (*dev != NULL)
-+ return;
-+
-+ if (strcmp(name, "kqemu") == 0)
-+ unit = -1;
-+ else if (dev_stdclone(name, NULL, "kqemu", &unit) != 1)
-+ return; /* Bad name */
-+ if (unit != -1 && unit > KQEMU_MAX_INSTANCES)
-+ return;
-+
-+ r = clone_create(&kqemuclones, &kqemu_cdevsw, &unit, dev, 0);
-+ if (r) {
-+ *dev = make_dev(&kqemu_cdevsw, unit2minor(unit),
-+ UID_ROOT, GID_WHEEL, 0660, "kqemu%d", unit);
-+ if (*dev != NULL) {
-+ (*dev)->si_flags |= SI_CHEAPCLONE;
-+ }
-+ }
-+}
-+#endif
-+
-+static void kqemu_destroy(struct kqemu_instance *ks)
-+{
-+#if __FreeBSD_version >= 500000
-+ struct cdev *dev = ks->kqemu_dev;
-+#endif
-+
-+ if (ks->state) {
-+ kqemu_delete(ks->state);
-+ ks->state = NULL;
-+ }
-+
-+#if __FreeBSD_version >= 500000
-+ dev->si_drv1 = NULL;
-+ TAILQ_REMOVE(&kqemuhead, ks, kqemu_ent);
-+ destroy_dev(dev);
-+#endif
-+ free(ks, M_KQEMU);
-+ --kqemu_ref_count;
-+}
-
- /* ARGSUSED */
- static int
-+#if __FreeBSD_version < 500000
-+kqemu_open(dev_t dev, int flags, int fmt __unused, struct proc *p)
-+{
-+#else
- kqemu_open(struct cdev *dev, int flags, int fmt __unused,
- struct thread *td)
- {
-+ struct proc *p = td->td_proc;
-+#endif
- struct kqemu_instance *ks;
-+
-+#if __FreeBSD_version >= 500000
-+ if (kqemu_ref_count >= KQEMU_MAX_INSTANCES)
-+#else
-+ if (dev->si_drv1 || kqemu_ref_count >= KQEMU_MAX_INSTANCES)
-+#endif
-+ return(EBUSY);
-+
-+ if ((flags & (FREAD|FWRITE)) == FREAD)
-+ return(EPERM);
-+
- ks = malloc(sizeof(struct kqemu_instance), M_KQEMU, M_WAITOK);
- if (ks == NULL) {
-- printf("malloc failed\n");
-+ kqemu_log("malloc failed\n");
- return ENOMEM;
- }
-- ks->state = NULL;
-+ memset(ks, 0, sizeof *ks);
-+#if __FreeBSD_version >= 500000
-+ ks->kqemu_dev = dev;
-+ TAILQ_INSERT_TAIL(&kqemuhead, ks, kqemu_ent);
-+#endif
-+ kqemu_ref_count++;
-+
- dev->si_drv1 = ks;
-+ if (kqemu_debug > 0)
-+ kqemu_log("opened by pid=%d\n", p->p_pid);
- return 0;
- }
-
- /* ARGSUSED */
- static int
-+#if __FreeBSD_version < 500000
-+kqemu_ioctl(dev_t dev, u_long cmd, caddr_t addr,
-+ int flags __unused, struct proc *p)
-+#else
- kqemu_ioctl(struct cdev *dev, u_long cmd, caddr_t addr,
- int flags __unused, struct thread *td)
-+#endif
- {
- int error = 0;
- int ret;
-@@ -231,8 +394,9 @@
- break;
- }
- d1 = *(struct kqemu_init *)addr;
-- printf("ram_base=%p ram_size=%ld\n", d1.ram_base, d1.ram_size);
-- s = kqemu_init(d, 16000);
-+ if (kqemu_debug > 0)
-+ kqemu_log("ram_base=%p ram_size=%ld\n", d1.ram_base, d1.ram_size);
-+ s = kqemu_init(d, max_locked_pages);
- if (s == NULL) {
- error = ENOMEM;
- break;
-@@ -248,9 +412,16 @@
- }
- ctx = kqemu_get_cpu_state(s);
- *ctx = *(struct kqemu_cpu_state *)addr;
-+#if __FreeBSD_version >= 500000
- DROP_GIANT();
-+#endif
- ret = kqemu_exec(s);
-+#if __FreeBSD_version >= 500000
- PICKUP_GIANT();
-+ td->td_retval[0] = ret;
-+#else
-+ p->p_retval[0] = ret;
-+#endif
- *(struct kqemu_cpu_state *)addr = *ctx;
- break;
- }
-@@ -265,10 +436,22 @@
-
- /* ARGSUSED */
- static int
-+#if __FreeBSD_version < 500000
-+kqemu_close(dev_t dev, int flags, int fmt __unused, struct proc *p)
-+{
-+#else
- kqemu_close(struct cdev *dev __unused, int flags, int fmt __unused,
- struct thread *td)
- {
-- return 0;
-+ struct proc *p = td->td_proc;
-+#endif
-+ struct kqemu_instance *ks = (struct kqemu_instance *) dev->si_drv1;
-+
-+ kqemu_destroy(ks);
-+
-+ if (kqemu_debug > 0)
-+ kqemu_log("closed by pid=%d\n", p->p_pid);
-+ return 0;
- }
-
- /* ARGSUSED */
-@@ -276,15 +459,55 @@
- kqemu_modevent(module_t mod __unused, int type, void *data __unused)
- {
- int error = 0;
-+#if __FreeBSD_version < 500000
-+ int rc;
-+#else
-+ struct kqemu_instance *ks;
-+#endif
-
- switch (type) {
- case MOD_LOAD:
- printf("kqemu version 0x%08x\n", KQEMU_VERSION);
-+ max_locked_pages = physmem / (2 * KQEMU_MAX_INSTANCES);
-+ if (max_locked_pages > 32768)
-+ max_locked_pages = 32768;
-+#if __FreeBSD_version < 500000
-+ if ((rc = cdevsw_add(&kqemu_cdevsw))) {
-+ kqemu_log("error registering cdevsw, rc=%d\n", rc);
-+ error = ENOENT;
-+ break;
-+ }
- kqemu_dev = make_dev(&kqemu_cdevsw, 0,
-- UID_ROOT, GID_WHEEL, 0666, "kqemu");
-+ UID_ROOT, GID_WHEEL, 0660, "kqemu");
-+#else
-+ clone_setup(&kqemuclones);
-+ clonetag = EVENTHANDLER_REGISTER(dev_clone, kqemu_clone, 0, 1000);
-+ if (!clonetag) {
-+ error = ENOMEM;
-+ break;
-+ }
-+#endif
-+ kqemu_log("KQEMU installed, max_instances=%d max_locked_mem=%dkB.\n",
-+ KQEMU_MAX_INSTANCES, max_locked_pages * 4);
-+
-+ kqemu_ref_count = 0;
- break;
- case MOD_UNLOAD:
-+ if (kqemu_ref_count > 0) {
-+ error = EBUSY;
-+ break;
-+ }
-+#if __FreeBSD_version < 500000
- destroy_dev(kqemu_dev);
-+ if ((rc = cdevsw_remove(&kqemu_cdevsw)))
-+ kqemu_log("error unregistering, rc=%d\n", rc);
-+#else
-+ EVENTHANDLER_DEREGISTER(dev_clone, clonetag);
-+ while ((ks = TAILQ_FIRST(&kqemuhead)) != NULL) {
-+ kqemu_destroy(ks);
-+ }
-+ clone_cleanup(&kqemuclones);
-+#endif
- break;
- case MOD_SHUTDOWN:
- break;
diff --git a/emulators/qemu/files/patch-Makefile.target b/emulators/qemu/files/patch-Makefile.target
new file mode 100644
index 000000000000..fe251c021ced
--- /dev/null
+++ b/emulators/qemu/files/patch-Makefile.target
@@ -0,0 +1,9 @@
+Index: qemu/Makefile.target
+@@ -18,6 +18,7 @@
+ DEFINES+=-I$(SRC_PATH)/linux-user -I$(SRC_PATH)/linux-user/$(TARGET_ARCH)
+ endif
+ CFLAGS=-Wall -O2 -g -fno-strict-aliasing
++CFLAGS+=-I${LOCALBASE}/include
+ #CFLAGS+=-Werror
+ LDFLAGS=-g
+ LIBS=
diff --git a/emulators/qemu/files/patch-audio::audio.c b/emulators/qemu/files/patch-audio::audio.c
deleted file mode 100644
index 0b50a522e6fd..000000000000
--- a/emulators/qemu/files/patch-audio::audio.c
+++ /dev/null
@@ -1,12 +0,0 @@
-Index: qemu/audio/audio.c
-@@ -28,6 +28,10 @@
-
- #include "audio/audio_int.h"
-
-+#ifndef INT16_MAX
-+#define INT16_MAX 0x7fff
-+#endif
-+
- #define dolog(...) AUD_log ("audio", __VA_ARGS__)
- #ifdef DEBUG
- #define ldebug(...) dolog (__VA_ARGS__)
diff --git a/emulators/qemu/pkg-plist b/emulators/qemu/pkg-plist
index 3b86795be162..791a15c2cd13 100644
--- a/emulators/qemu/pkg-plist
+++ b/emulators/qemu/pkg-plist
@@ -51,5 +51,3 @@ bin/qemu-system-x86_64
@dirrm %%DATADIR%%/keymaps
@dirrm %%DATADIR%%
%%PORTDOCS%%@dirrm %%DOCSDIR%%
-@cwd /
-%%WITH_KQEMU%%%%KMODDIR%%/kqemu.ko