From owner-freebsd-emulation@FreeBSD.ORG Sat Apr 1 22:25:30 2006 Return-Path: X-Original-To: freebsd-emulation@freebsd.org Delivered-To: freebsd-emulation@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id DB8BE16A400 for ; Sat, 1 Apr 2006 22:25:30 +0000 (UTC) (envelope-from qemu-l@saturn.kn-bremen.de) Received: from gwyn.kn-bremen.de (gwyn.kn-bremen.de [212.63.36.242]) by mx1.FreeBSD.org (Postfix) with ESMTP id D9CDC43D46 for ; Sat, 1 Apr 2006 22:25:20 +0000 (GMT) (envelope-from qemu-l@saturn.kn-bremen.de) Received: from gwyn.kn-bremen.de (gwyn [127.0.0.1]) by gwyn.kn-bremen.de (8.13.4/8.13.4/Debian-3) with ESMTP id k31MPIH4003987; Sun, 2 Apr 2006 00:25:18 +0200 Received: from saturn.kn-bremen.de (uucp@localhost) by gwyn.kn-bremen.de (8.13.4/8.13.4/Submit) with UUCP id k31MPIc9003985; Sun, 2 Apr 2006 00:25:18 +0200 Received: from saturn.kn-bremen.de (nox@localhost [127.0.0.1]) by saturn.kn-bremen.de (8.13.3/8.13.1) with ESMTP id k31MLqP7046120; Sun, 2 Apr 2006 00:21:52 +0200 (CEST) (envelope-from nox@saturn.kn-bremen.de) Received: (from nox@localhost) by saturn.kn-bremen.de (8.13.3/8.13.1/Submit) id k31MLq9h046119; Sun, 2 Apr 2006 00:21:52 +0200 (CEST) (envelope-from nox) From: Juergen Lock Date: Sun, 2 Apr 2006 00:21:52 +0200 To: freebsd-emulation@freebsd.org, qemu-devel@nongnu.org Message-ID: <20060401222151.GA45952@saturn.kn-bremen.de> Mail-Followup-To: freebsd-emulation@freebsd.org, qemu-devel@nongnu.org Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4.2.1i Cc: Subject: experimental FreeBSD {k,}qemu port update X-BeenThere: freebsd-emulation@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Development of Emulators of other operating systems List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 01 Apr 2006 22:25:30 -0000 Here is what I have tested on i386 with kqemu. I also tried -kernel-kqemu with a few linux 2.6 guests but only got panics, one screenshot of KANOTIX-2006-CeBIT-RC3.iso is at http://www.mytempdir.com/562050 (all panics looked like that). As amd64 guests with kqemu/amd64 are not supposed to work yet I think we can't update the port yet, so i only post the following for ppl wanting to experiment... First the patch for emulators/kqemu-kmod, after that after XXXX the patch for the qemu port, updating it to today's cvs snapshot: Index: Makefile =================================================================== RCS file: /home/ncvs/ports/emulators/kqemu-kmod/Makefile,v retrieving revision 1.3 diff -u -r1.3 Makefile --- Makefile 6 Nov 2005 09:03:02 -0000 1.3 +++ Makefile 1 Apr 2006 22:08:19 -0000 @@ -6,15 +6,14 @@ # PORTNAME= kqemu -PORTVERSION= 0.7.2 -PORTREVISION= 1 +PORTVERSION= 1.3.0pre5 CATEGORIES= emulators MASTER_SITES= http://fabrice.bellard.free.fr/qemu/ PKGNAMESUFFIX= -kmod DIST_SUBDIR= kqemu -MAINTAINER= nork@FreeBSD.org -COMMENT= Kernel Acceralator for QEMU CPU Emulator +MAINTAINER= nox@jelal.kn-bremen.de +COMMENT= Kernel Acceralator for QEMU CPU Emulator (development version) ONLY_FOR_ARCHS= i386 amd64 NO_PACKAGE= "Depends on kernel, and module not redistributable" @@ -24,7 +23,6 @@ PLIST_FILES+= "@cwd /" PLIST_FILES+= ${KMODDIR:C,^/,,}/kqemu.ko -WRKSRC= ${WRKDIR}/${PORTNAME} MAKEFILE= Makefile.freebsd .include Index: distinfo =================================================================== RCS file: /home/ncvs/ports/emulators/kqemu-kmod/distinfo,v retrieving revision 1.2 diff -u -r1.2 distinfo --- distinfo 22 Jan 2006 09:47:20 -0000 1.2 +++ distinfo 27 Mar 2006 23:06:15 -0000 @@ -1,3 +1,3 @@ -MD5 (kqemu/kqemu-0.7.2.tar.gz) = 02cfdecda90458d6393781496ec6b48b -SHA256 (kqemu/kqemu-0.7.2.tar.gz) = 4158b2c67603f5256a78d0065d715bde068a457aa58bbfef12dda20fe7f7ad8b -SIZE (kqemu/kqemu-0.7.2.tar.gz) = 79314 +MD5 (kqemu/kqemu-1.3.0pre5.tar.gz) = 2dc13fa4645a8d7c69f0f42aabf64cf5 +SHA256 (kqemu/kqemu-1.3.0pre5.tar.gz) = 2f2983393a4e007741685ef4e889fc91fe7619a038fc43998d414e441f5813a7 +SIZE (kqemu/kqemu-1.3.0pre5.tar.gz) = 189395 Index: files/patch-kqemu-freebsd.c =================================================================== RCS file: /home/ncvs/ports/emulators/kqemu-kmod/files/patch-kqemu-freebsd.c,v retrieving revision 1.2 diff -u -r1.2 patch-kqemu-freebsd.c --- files/patch-kqemu-freebsd.c 6 Nov 2005 09:03:02 -0000 1.2 +++ files/patch-kqemu-freebsd.c 8 Feb 2006 23:11:32 -0000 @@ -1,506 +1,9 @@ ---- kqemu-freebsd.c.orig Sun Aug 14 18:34:06 2005 -+++ kqemu-freebsd.c Thu Nov 3 17:15:47 2005 -@@ -3,32 +3,55 @@ - #include - #include - #include -+#include -+#include - #include - #include - #include -+#if __FreeBSD_version >= 500000 - #include -+#endif - #include -+#include -+#if __FreeBSD_version >= 500000 - #include -+#endif - #include - #include -+#include -+#include -+#if __FreeBSD_version < 500000 -+#include -+#endif -+ - #include - #include - #include - #include - #include - #include -+#include -+ - #include - #include - - #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,160 @@ - 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; +Index: kqemu-freebsd.c +@@ -236,6 +236,7 @@ }; -+static int kqemu_ref_count = 0; + 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_ref(*dev); -+ (*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 +395,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 +413,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 +437,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 +460,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 + static struct kqemu_global_state *kqemu_gs = NULL; - 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; + #if __FreeBSD_version < 500000 XXXX here is the patch for emulators/qemu: Removed files: files/patch-dyngen.h files/patch-hw-ne2000.c files/patch-hw-usb-uhci.c files/patch-hw-usb.c files/patch-sdl.c files/patch-slirp-socket.c files/patch-slirp_throttle files/patch-target-i386-translate.c Index: Makefile =================================================================== RCS file: /home/ncvs/ports/emulators/qemu/Makefile,v retrieving revision 1.47 diff -u -r1.47 Makefile --- Makefile 26 Mar 2006 15:11:36 -0000 1.47 +++ Makefile 1 Apr 2006 22:04:41 -0000 @@ -6,8 +6,7 @@ # PORTNAME= qemu -PORTVERSION= 0.8.0 -PORTREVISION= 5 +PORTVERSION= 0.8.0s.20060401 CATEGORIES= emulators MASTER_SITES= http://www.qemu.org/:release \ http://people.fruitsalad.org/nox/qemu/:snapshot \ @@ -15,10 +14,8 @@ http://qemu.dad-answers.com/download/qemu/:snapshot \ http://people.brandeis.edu/~jcoiner/qemu_idedma/:idedma \ http://people.freebsd.org/~maho/qemu/:misc -DISTFILES= ${DISTNAME}${EXTRACT_SUFX}:release -.if defined (WITH_HACKS_IDEDMA) || defined (WITH_HACKS) -DISTFILES+= qemu_dma_patch.tar.gz:idedma -.endif +DISTNAME= ${PORTNAME}-snapshot-2006-04-01_23 +DISTFILES= ${DISTNAME}${EXTRACT_SUFX}:snapshot .if defined (WITH_HACKS_CIRRUS) || defined (WITH_HACKS) DISTFILES+= patch3_cirrus:misc .endif @@ -33,10 +30,11 @@ RUN_DEPENDS+= ${LOCALBASE}/sbin/smbd:${PORTSDIR}/net/samba .endif .if defined(WITH_KQEMU) -BUILD_DEPENDS+= ${LOCALBASE}/include/kqemu/kqemu.h:${PORTSDIR}/emulators/kqemu-kmod +BUILD_DEPENDS+= kqemu-kmod>=1.3.0pre5:${PORTSDIR}/emulators/kqemu-kmod .endif HAS_CONFIGURE= yes +USE_BZIP2= yes USE_GMAKE= yes USE_GETOPT_LONG= yes USE_SDL= sdl @@ -48,6 +46,7 @@ ONLY_FOR_ARCHS= amd64 i386 .if defined(WITH_KQEMU) CONFIGURE_ARGS+= --enable-kqemu +CONFLICTS= kqemu-kmod-0* .else CONFIGURE_ARGS+= --disable-kqemu .endif @@ -64,11 +63,9 @@ @${ECHO_MSG} "Notice: you can build qemu with the (alpha!) kqemu accelerator kernel module" @${ECHO_MSG} "by defining WITH_KQEMU." .endif -.if !defined(WITH_HACKS_IDEDMA) && !defined(WITH_HACKS_CIRRUS) && !defined(WITH_HACKS) +.if !defined(WITH_HACKS_CIRRUS) && !defined(WITH_HACKS) @${ECHO_MSG} "You can build qemu with some hacks (esp. for speedup)" @${ECHO_MSG} "by defining WITH_HACKS, or specifically:" - @${ECHO_MSG} "1. WITH_HACKS_IDEDMA: IDE Bus-master DMA Support by John Coiner" - @${ECHO_MSG} "http://people.brandeis.edu/~jcoiner/qemu_idedma/qemu_dma_patch.html" @${ECHO_MSG} "2. WITH_HACKS_CIRRUS: higher speed on large display (cirrus_vga)" @${ECHO_MSG} "by Juergen Pfennig" @${ECHO_MSG} "http://lists.gnu.org/archive/html/qemu-devel/2006-01/msg00208.html" @@ -92,9 +89,6 @@ done post-patch: -.if defined(WITH_HACKS_IDEDMA) || defined (WITH_HACKS) - @cd ${WRKDIR} ; ${TAR} xfz ${DISTDIR}/${DIST_SUBDIR}/qemu_dma_patch.tar.gz ; ${CP} new_qemu_dma_patch/bios.bin ${WRKSRC}/pc-bios; cd ${WRKSRC}; ${PATCH} --quiet -p1 < ../new_qemu_dma_patch/qemu-piix4-udma.patch -.endif .if defined(WITH_HACKS_CIRRUS) || defined (WITH_HACKS) @cd ${WRKSRC} ; ${PATCH} --quiet < ${DISTDIR}/${DIST_SUBDIR}/patch3_cirrus .endif Index: distinfo =================================================================== RCS file: /home/ncvs/ports/emulators/qemu/distinfo,v retrieving revision 1.27 diff -u -r1.27 distinfo --- distinfo 21 Jan 2006 23:10:06 -0000 1.27 +++ distinfo 1 Apr 2006 21:51:06 -0000 @@ -1,9 +1,3 @@ -MD5 (qemu/qemu-0.8.0.tar.gz) = eb175b26583280706fe7e4d8910d320d -SHA256 (qemu/qemu-0.8.0.tar.gz) = de388539ce86971a2cbe8474fca8b6160898c95772e3e6e08a7794d48db32a61 -SIZE (qemu/qemu-0.8.0.tar.gz) = 1497965 -MD5 (qemu/qemu_dma_patch.tar.gz) = 5e339dc201d411af56bad684d3f89338 -SHA256 (qemu/qemu_dma_patch.tar.gz) = cdf74bf5e079d835e100f116d940686b13ec2b7ed6aee5a6a97a4441ea5f2b8f -SIZE (qemu/qemu_dma_patch.tar.gz) = 25837 -MD5 (qemu/patch3_cirrus) = ebe7ed9fce804c49e024bc93bfdfc810 -SHA256 (qemu/patch3_cirrus) = e862371834b7d895a896fbdb84fd9f70d17b5729a6f6789a48a61504fc941e11 -SIZE (qemu/patch3_cirrus) = 8817 +MD5 (qemu/qemu-snapshot-2006-04-01_23.tar.bz2) = e40bde18f4f9d5b9306002d4bd308255 +SHA256 (qemu/qemu-snapshot-2006-04-01_23.tar.bz2) = eac9c496d9710d1ecf9223ad7be3fbb674788ba81819b81a98337f8a42e09aed +SIZE (qemu/qemu-snapshot-2006-04-01_23.tar.bz2) = 1286796 Index: files/patch-bsdusb.patch =================================================================== RCS file: /home/ncvs/ports/emulators/qemu/files/patch-bsdusb.patch,v retrieving revision 1.1 diff -u -r1.1 patch-bsdusb.patch --- files/patch-bsdusb.patch 18 Mar 2006 21:23:42 -0000 1.1 +++ files/patch-bsdusb.patch 27 Mar 2006 23:30:53 -0000 @@ -1,8 +1,9 @@ Index: qemu/configure -@@ -122,6 +122,7 @@ +@@ -122,7 +122,8 @@ *) oss="yes" linux="yes" + user="yes" +usb="linux" if [ "$cpu" = "i386" -o "$cpu" = "x86_64" ] ; then kqemu="yes" Index: files/patch-fbsd =================================================================== RCS file: /home/ncvs/ports/emulators/qemu/files/patch-fbsd,v retrieving revision 1.4 diff -u -r1.4 patch-fbsd --- files/patch-fbsd 1 Oct 2005 13:25:09 -0000 1.4 +++ files/patch-fbsd 27 Mar 2006 23:39:21 -0000 @@ -1,5 +1,5 @@ Index: qemu/Makefile -@@ -13,7 +13,7 @@ +@@ -13,11 +13,14 @@ endif DOCS=qemu-doc.html qemu-tech.html qemu.1 qemu-img.1 @@ -8,14 +8,6 @@ for d in $(TARGET_DIRS); do \ $(MAKE) -C $$d $@ || exit 1 ; \ done -@@ -21,10 +21,13 @@ - ifdef CONFIG_WIN32 - $(MAKE) -C kqemu -f Makefile.winnt - else -- $(MAKE) -C kqemu -+ ( cd kqemu && $(BSD_MAKE) -f Makefile.freebsd ) - endif - endif +bsd/libmath.a: + ( cd bsd ; $(BSD_MAKE) CC=$(CC) ) @@ -23,7 +15,7 @@ qemu-img$(EXESUF): qemu-img.c block.c block-cow.c block-qcow.c aes.c block-vmdk.c block-cloop.c block-dmg.c block-bochs.c block-vpc.c block-vvfat.c $(CC) -DQEMU_TOOL $(CFLAGS) $(LDFLAGS) $(DEFINES) -o $@ $^ -lz $(LIBS) -@@ -33,6 +36,7 @@ +@@ -26,6 +29,7 @@ clean: # avoid old build problems by removing potentially incorrect old files @@ -31,25 +23,6 @@ rm -f config.mak config.h op-i386.h opc-i386.h gen-op-i386.h op-arm.h opc-arm.h gen-op-arm.h rm -f *.o *.a $(TOOLS) dyngen$(EXESUF) TAGS *.pod *~ */*~ $(MAKE) -C tests clean -@@ -40,7 +44,7 @@ - $(MAKE) -C $$d $@ || exit 1 ; \ - done - ifdef CONFIG_KQEMU -- $(MAKE) -C kqemu clean -+ cd kqemu && $(BSD_MAKE) -f Makefile.freebsd clean - endif - - distclean: clean -@@ -73,9 +77,6 @@ - for d in $(TARGET_DIRS); do \ - $(MAKE) -C $$d $@ || exit 1 ; \ - done --ifdef CONFIG_KQEMU -- cd kqemu ; ./install.sh --endif - - # various test targets - test speed test2: all Index: qemu/Makefile.target @@ -391,8 +391,8 @@ VL_LDFLAGS+=-Wl,-G0 -Wl,-T,$(SRC_PATH)/ia64.ld