summaryrefslogtreecommitdiff
path: root/emulators/kqemu-kmod-devel/files/patch-kqemu-freebsd.c
blob: ac811e16d7fe12b30e44faedbae582b65b674406 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
Index: kqemu-freebsd.c
@@ -208,9 +208,17 @@
 int CDECL kqemu_schedule(void)
 {
     /* kqemu_log("kqemu_schedule\n"); */
+#if __FreeBSD_version < 700044
     mtx_lock_spin(&sched_lock);
     mi_switch(SW_VOL, NULL);
     mtx_unlock_spin(&sched_lock);
+#else
+    /* -current no longer uses sched_lock */
+    struct thread *td = curthread;
+    thread_lock(td);
+    mi_switch(SW_VOL, NULL);
+    thread_unlock(td);
+#endif
     return SIGPENDING(curthread);
 }
 #endif
@@ -320,8 +328,15 @@
 #if __FreeBSD_version >= 500000
     dev->si_drv1 = NULL;
     TAILQ_REMOVE(&kqemuhead, ks, kqemu_ent);
+#if __FreeBSD_version >= 700051
+    destroy_dev_sched(dev);
+#else
+#if __FreeBSD_version >= 700024
+    dev_relthread(dev); 
+#endif
     destroy_dev(dev);
 #endif
+#endif
     free(ks, M_KQEMU);
     --kqemu_ref_count;
 }
@@ -500,7 +515,13 @@
 	while ((ks = TAILQ_FIRST(&kqemuhead)) != NULL) {
 	    kqemu_destroy(ks);
 	}
+#if __FreeBSD_version >= 700051
+	drain_dev_clone_events();
+#endif
 	clone_cleanup(&kqemuclones);
+#if __FreeBSD_version >= 700051
+	destroy_dev_drain(&kqemu_cdevsw);
+#endif
 #endif
         kqemu_global_delete(kqemu_gs);
         kqemu_gs = NULL;