View | Details | Raw Unified | Return to bug 86686
Collapse All | Expand All

(-)Makefile (-1 / +2 lines)
Lines 7-12 Link Here
7
7
8
PORTNAME=	qemu
8
PORTNAME=	qemu
9
PORTVERSION=	0.7.2s.20050909
9
PORTVERSION=	0.7.2s.20050909
10
POTREVISION=	1
10
CATEGORIES=	emulators
11
CATEGORIES=	emulators
11
MASTER_SITES=	http://www.qemu.org/ \
12
MASTER_SITES=	http://www.qemu.org/ \
12
		http://people.fruitsalad.org/nox/qemu/ \
13
		http://people.fruitsalad.org/nox/qemu/ \
Lines 43-49 Link Here
43
NO_PACKAGE=	Depends on kernel, and module not redistributable
44
NO_PACKAGE=	Depends on kernel, and module not redistributable
44
CONFIGURE_ARGS+=	--enable-kqemu
45
CONFIGURE_ARGS+=	--enable-kqemu
45
PLIST_SUB=	WITH_KQEMU=""
46
PLIST_SUB=	WITH_KQEMU=""
46
PLIST_SUB+=	KMODDIR=${KMODDIR}
47
PLIST_SUB+=	KMODDIR=${KMODDIR:C/^\///}
47
.else
48
.else
48
CONFIGURE_ARGS+=	--disable-kqemu
49
CONFIGURE_ARGS+=	--disable-kqemu
49
PLIST_SUB=	WITH_KQEMU="@comment "
50
PLIST_SUB=	WITH_KQEMU="@comment "
(-)files/kqemu-freebsd-patch (-37 / +40 lines)
Lines 1-20 Link Here
1
Index: qemu/kqemu/Makefile.freebsd
1
Index: qemu/kqemu/Makefile.freebsd
2
@@ -1,9 +1,13 @@
2
@@ -5,6 +5,7 @@
3
+# $Id: Makefile.freebsd,v 1.1 2005/04/17 17:21:31 bellard Exp $
4
 KMOD=	kqemu
5
 SRCS=	kqemu-freebsd.c
6
 .if ${MACHINE_ARCH} == "i386"
7
 OBJS=	kqemu-mod-i386.o
8
 .elif ${MACHINE_ARCH} == "amd64"
3
 .elif ${MACHINE_ARCH} == "amd64"
9
 OBJS=	kqemu-mod-x86_64.o
4
 OBJS=	kqemu-mod-x86_64.o
10
+.endif
11
+.if ${OSVERSION} >= 500000
12
+CC=	cc
13
 .endif
5
 .endif
6
+CC=	cc
14
 WERROR=
7
 WERROR=
15
 
8
 
9
 .include <bsd.kmod.mk>
16
Index: qemu/kqemu/kqemu-freebsd.c
10
Index: qemu/kqemu/kqemu-freebsd.c
17
@@ -3,20 +3,33 @@
11
@@ -3,32 +3,55 @@
18
 #include <sys/param.h>
12
 #include <sys/param.h>
19
 #include <sys/systm.h>
13
 #include <sys/systm.h>
20
 #include <sys/conf.h>
14
 #include <sys/conf.h>
Lines 23-29 Link Here
23
 #include <sys/ioccom.h>
17
 #include <sys/ioccom.h>
24
 #include <sys/malloc.h>
18
 #include <sys/malloc.h>
25
 #include <sys/module.h>
19
 #include <sys/module.h>
20
+#if __FreeBSD_version >= 500000
26
 #include <sys/mutex.h>
21
 #include <sys/mutex.h>
22
+#endif
27
 #include <sys/proc.h>
23
 #include <sys/proc.h>
28
+#include <sys/resourcevar.h>
24
+#include <sys/resourcevar.h>
29
+#if __FreeBSD_version >= 500000
25
+#if __FreeBSD_version >= 500000
Lines 48-54 Link Here
48
 #include <machine/vmparam.h>
44
 #include <machine/vmparam.h>
49
 #include <machine/stdarg.h>
45
 #include <machine/stdarg.h>
50
 
46
 
51
@@ -25,10 +38,14 @@
47
 #include "kqemu-kernel.h"
48
 
49
+#ifndef KQEMU_MAJOR
50
+#define KQEMU_MAJOR 250
51
+#endif
52
+
52
 MALLOC_DECLARE(M_KQEMU);
53
 MALLOC_DECLARE(M_KQEMU);
53
 MALLOC_DEFINE(M_KQEMU, "kqemu", "kqemu buffers");
54
 MALLOC_DEFINE(M_KQEMU, "kqemu", "kqemu buffers");
54
 
55
 
Lines 64-70 Link Here
64
 struct kqemu_user_page *CDECL kqemu_lock_user_page(unsigned long *ppage_index,
65
 struct kqemu_user_page *CDECL kqemu_lock_user_page(unsigned long *ppage_index,
65
                                                    unsigned long user_addr)
66
                                                    unsigned long user_addr)
66
 {
67
 {
67
@@ -37,14 +54,18 @@
68
@@ -37,14 +60,18 @@
68
     vm_paddr_t pa = 0;
69
     vm_paddr_t pa = 0;
69
     int ret;
70
     int ret;
70
     pmap_t pmap;
71
     pmap_t pmap;
Lines 81-96 Link Here
81
     pmap = vm_map_pmap(&vm->vm_map);
82
     pmap = vm_map_pmap(&vm->vm_map);
82
     pa = pmap_extract(pmap, va);
83
     pa = pmap_extract(pmap, va);
83
-    // printf("kqemu_lock_user_page(%08lx) va=%08x pa=%08x\n", user_addr, va, pa);
84
-    // printf("kqemu_lock_user_page(%08lx) va=%08x pa=%08x\n", user_addr, va, pa);
84
+    // kqemu_log("kqemu_lock_user_page(%08lx) va=%08x pa=%08x\n", user_addr, va, pa);
85
+    /* kqemu_log("kqemu_lock_user_page(%08lx) va=%08x pa=%08x\n", user_addr, va, pa); */
85
     *ppage_index = pa >> PAGE_SHIFT;
86
     *ppage_index = pa >> PAGE_SHIFT;
86
     return (struct kqemu_user_page *)va;
87
     return (struct kqemu_user_page *)va;
87
 }
88
 }
88
@@ -54,12 +75,16 @@
89
@@ -54,12 +81,16 @@
89
     struct vmspace *vm = curproc->p_vmspace;
90
     struct vmspace *vm = curproc->p_vmspace;
90
     vm_offset_t va;
91
     vm_offset_t va;
91
     int ret;
92
     int ret;
92
-    // printf("kqemu_unlock_user_page(%08lx)\n", page_index);
93
-    // printf("kqemu_unlock_user_page(%08lx)\n", page_index);
93
+    // kqemu_log("kqemu_unlock_user_page(%08lx)\n", page_index);
94
+    /* kqemu_log("kqemu_unlock_user_page(%08lx)\n", page_index); */
94
     va = (vm_offset_t)page;
95
     va = (vm_offset_t)page;
95
+#if __FreeBSD_version >= 500000
96
+#if __FreeBSD_version >= 500000
96
     ret = vm_map_unwire(&vm->vm_map, va, va+PAGE_SIZE, VM_MAP_WIRE_USER);
97
     ret = vm_map_unwire(&vm->vm_map, va, va+PAGE_SIZE, VM_MAP_WIRE_USER);
Lines 104-110 Link Here
104
     }
105
     }
105
 #endif
106
 #endif
106
 }
107
 }
107
@@ -76,20 +101,21 @@
108
@@ -76,20 +107,21 @@
108
 
109
 
109
     va = kmem_alloc(kernel_map, PAGE_SIZE);
110
     va = kmem_alloc(kernel_map, PAGE_SIZE);
110
     if (va == 0) {
111
     if (va == 0) {
Lines 116-122 Link Here
116
     pmap = vm_map_pmap(kernel_map);
117
     pmap = vm_map_pmap(kernel_map);
117
     pa = pmap_extract(pmap, va);
118
     pa = pmap_extract(pmap, va);
118
-    // printf("kqemu_alloc_zeroed_page: %08x\n", pa);
119
-    // printf("kqemu_alloc_zeroed_page: %08x\n", pa);
119
+    // kqemu_log("kqemu_alloc_zeroed_page: %08x\n", pa);
120
+    /* kqemu_log("kqemu_alloc_zeroed_page: %08x\n", pa); */
120
     *ppage_index = pa >> PAGE_SHIFT;
121
     *ppage_index = pa >> PAGE_SHIFT;
121
     return (struct kqemu_page *)va;
122
     return (struct kqemu_page *)va;
122
 }
123
 }
Lines 131-137 Link Here
131
 }
132
 }
132
 
133
 
133
 /* return kernel address of the physical page page_index */
134
 /* return kernel address of the physical page page_index */
134
@@ -103,42 +129,29 @@
135
@@ -103,42 +135,29 @@
135
    GB of physical memory */
136
    GB of physical memory */
136
 void * CDECL kqemu_vmalloc(unsigned int size)
137
 void * CDECL kqemu_vmalloc(unsigned int size)
137
 {
138
 {
Lines 185-191 Link Here
185
     return pa >> PAGE_SHIFT;
186
     return pa >> PAGE_SHIFT;
186
 }
187
 }
187
 
188
 
188
@@ -154,16 +167,48 @@
189
@@ -154,16 +173,48 @@
189
 {
190
 {
190
 }
191
 }
191
 
192
 
Lines 204-214 Link Here
204
+    return ((int)p->p_rtprio.prio - (int)curproc->p_rtprio.prio);
205
+    return ((int)p->p_rtprio.prio - (int)curproc->p_rtprio.prio);
205
+}
206
+}
206
+
207
+
207
 /* return TRUE if a signal is pending (i.e. the guest must stop
208
+/* return TRUE if a signal is pending (i.e. the guest must stop
208
    execution) */
209
+   execution) */
209
 int CDECL kqemu_schedule(void)
210
+int CDECL kqemu_schedule(void)
210
 {
211
+{
211
-    // printf("kqemu_schedule\n");
212
+    struct proc *p = curproc;
212
+    struct proc *p = curproc;
213
+    if (curpriority_cmp(p) > 0) {
213
+    if (curpriority_cmp(p) > 0) {
214
+	int s = splhigh();
214
+	int s = splhigh();
Lines 221-231 Link Here
221
+    return issignal(curproc) != 0;
221
+    return issignal(curproc) != 0;
222
+}
222
+}
223
+#else
223
+#else
224
+/* return TRUE if a signal is pending (i.e. the guest must stop
224
 /* return TRUE if a signal is pending (i.e. the guest must stop
225
+   execution) */
225
    execution) */
226
+int CDECL kqemu_schedule(void)
226
 int CDECL kqemu_schedule(void)
227
+{
227
 {
228
+    // kqemu_log("kqemu_schedule\n");
228
-    // printf("kqemu_schedule\n");
229
+    /* kqemu_log("kqemu_schedule\n"); */
229
     mtx_lock_spin(&sched_lock);
230
     mtx_lock_spin(&sched_lock);
230
     mi_switch(SW_VOL, NULL);
231
     mi_switch(SW_VOL, NULL);
231
     mtx_unlock_spin(&sched_lock);
232
     mtx_unlock_spin(&sched_lock);
Lines 235-252 Link Here
235
 
236
 
236
 static char log_buf[4096];
237
 static char log_buf[4096];
237
 
238
 
238
@@ -176,47 +221,154 @@
239
@@ -176,47 +227,155 @@
239
     va_end(ap);
240
     va_end(ap);
240
 }
241
 }
241
 
242
 
242
+#define KQEMU_MAX_INSTANCES 4
243
+#define KQEMU_MAX_INSTANCES 4
243
+
244
+
244
 struct kqemu_instance { 
245
 struct kqemu_instance { 
246
-    //    struct semaphore sem;  
245
+#if __FreeBSD_version >= 500000
247
+#if __FreeBSD_version >= 500000
246
+    TAILQ_ENTRY(kqemu_instance) kqemu_ent;
248
+    TAILQ_ENTRY(kqemu_instance) kqemu_ent;
247
+    struct cdev *kqemu_dev;
249
+    struct cdev *kqemu_dev;
248
+#endif
250
+#endif
249
     //    struct semaphore sem;  
251
+    /*    struct semaphore sem;  */
250
     struct kqemu_state *state;
252
     struct kqemu_state *state;
251
 };
253
 };
252
 
254
 
Lines 318-324 Link Here
318
+	*dev = make_dev(&kqemu_cdevsw, unit2minor(unit),
320
+	*dev = make_dev(&kqemu_cdevsw, unit2minor(unit),
319
+	    UID_ROOT, GID_WHEEL, 0660, "kqemu%d", unit);
321
+	    UID_ROOT, GID_WHEEL, 0660, "kqemu%d", unit);
320
+	if (*dev != NULL) {
322
+	if (*dev != NULL) {
321
+	    dev_ref(*dev);
322
+	    (*dev)->si_flags |= SI_CHEAPCLONE;
323
+	    (*dev)->si_flags |= SI_CHEAPCLONE;
323
+	}
324
+	}
324
+    }
325
+    }
Lines 327-333 Link Here
327
+
328
+
328
+static void kqemu_destroy(struct kqemu_instance *ks)
329
+static void kqemu_destroy(struct kqemu_instance *ks)
329
+{
330
+{
331
+#if __FreeBSD_version >= 500000
330
+    struct cdev *dev = ks->kqemu_dev;
332
+    struct cdev *dev = ks->kqemu_dev;
333
+#endif
331
+
334
+
332
+    if (ks->state) {
335
+    if (ks->state) {
333
+        kqemu_delete(ks->state);
336
+        kqemu_delete(ks->state);
Lines 335-342 Link Here
335
+    }
338
+    }
336
+
339
+
337
+    free(ks, M_KQEMU);
340
+    free(ks, M_KQEMU);
338
+    dev->si_drv1 = NULL;
339
+#if __FreeBSD_version >= 500000
341
+#if __FreeBSD_version >= 500000
342
+    dev->si_drv1 = NULL;
340
+    TAILQ_REMOVE(&kqemuhead, ks, kqemu_ent);
343
+    TAILQ_REMOVE(&kqemuhead, ks, kqemu_ent);
341
+    destroy_dev(dev);
344
+    destroy_dev(dev);
342
+#endif
345
+#endif
Lines 394-400 Link Here
394
 {
397
 {
395
     int error = 0;
398
     int error = 0;
396
     int ret;
399
     int ret;
397
@@ -231,8 +383,9 @@
400
@@ -231,8 +390,9 @@
398
 	    break;
401
 	    break;
399
 	}
402
 	}
400
 	d1 = *(struct kqemu_init *)addr;
403
 	d1 = *(struct kqemu_init *)addr;
Lines 406-412 Link Here
406
 	if (s == NULL) {
409
 	if (s == NULL) {
407
 	    error = ENOMEM;
410
 	    error = ENOMEM;
408
 	    break;
411
 	    break;
409
@@ -248,9 +401,16 @@
412
@@ -248,9 +408,16 @@
410
 	}
413
 	}
411
 	ctx = kqemu_get_cpu_state(s);
414
 	ctx = kqemu_get_cpu_state(s);
412
 	*ctx = *(struct kqemu_cpu_state *)addr;
415
 	*ctx = *(struct kqemu_cpu_state *)addr;
Lines 423-429 Link Here
423
 	*(struct kqemu_cpu_state *)addr = *ctx;
426
 	*(struct kqemu_cpu_state *)addr = *ctx;
424
 	break;
427
 	break;
425
     }
428
     }
426
@@ -265,10 +425,22 @@
429
@@ -265,10 +432,22 @@
427
 
430
 
428
 /* ARGSUSED */
431
 /* ARGSUSED */
429
 static int
432
 static int
Lines 447-453 Link Here
447
 }
450
 }
448
 
451
 
449
 /* ARGSUSED */
452
 /* ARGSUSED */
450
@@ -276,15 +448,55 @@
453
@@ -276,15 +455,55 @@
451
 kqemu_modevent(module_t mod __unused, int type, void *data __unused)
454
 kqemu_modevent(module_t mod __unused, int type, void *data __unused)
452
 {
455
 {
453
     int error = 0;
456
     int error = 0;
(-)files/patch-fbsd (-2 / +2 lines)
Lines 13-19 Link Here
13
 	$(MAKE) -C kqemu -f Makefile.winnt
13
 	$(MAKE) -C kqemu -f Makefile.winnt
14
 else
14
 else
15
-	$(MAKE) -C kqemu
15
-	$(MAKE) -C kqemu
16
+	( cd kqemu && $(BSD_MAKE) )
16
+	( cd kqemu && $(BSD_MAKE) -f Makefile.freebsd )
17
 endif
17
 endif
18
 endif
18
 endif
19
 
19
 
Lines 36-42 Link Here
36
         done
36
         done
37
 ifdef CONFIG_KQEMU
37
 ifdef CONFIG_KQEMU
38
-	$(MAKE) -C kqemu clean
38
-	$(MAKE) -C kqemu clean
39
+	cd kqemu && $(BSD_MAKE) clean
39
+	cd kqemu && $(BSD_MAKE) -f Makefile.freebsd clean
40
 endif
40
 endif
41
 
41
 
42
 distclean: clean
42
 distclean: clean

Return to bug 86686