summaryrefslogtreecommitdiff
path: root/emulators/virtualbox-ose-legacy/files/patch-src-VBox-Runtime-r0drv-freebsd-memobj-r0drv-freebsd.c
blob: 9c63505651b0197d98d42509155d991b086a469f (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
50
51
52
53
From Alan L. Cox on FreeBSD-current:

    I just glanced at the virtualbox code for a couple minutes. For
    FreeBSD 9 and 10, these lock acquires are completely unnecessary, and
    have been since FreeBSD 9.0. Just delete them. They may be equally
    unnecessary under FreeBSD 8, but I didn't look carefully enough to
    answer that question.

[1] http://lists.freebsd.org/pipermail/freebsd-current/2012-November/037963.html

--- src/VBox/Runtime/r0drv/freebsd/memobj-r0drv-freebsd.c.orig	2012-12-19 20:51:59.000000000 +0100
+++ src/VBox/Runtime/r0drv/freebsd/memobj-r0drv-freebsd.c	2012-12-20 15:14:56.283850834 +0100
@@ -136,7 +136,10 @@
                                 (vm_offset_t)pMemFreeBSD->Core.pv + pMemFreeBSD->Core.cb);
             AssertMsg(rc == KERN_SUCCESS, ("%#x", rc));
 
+#if __FreeBSD_version < 900000
+            /* See http://lists.freebsd.org/pipermail/freebsd-current/2012-November/037963.html */
             vm_page_lock_queues();
+#endif
             for (uint32_t iPage = 0; iPage < pMemFreeBSD->u.Phys.cPages; iPage++)
             {
                 vm_page_t pPage = pMemFreeBSD->u.Phys.apPages[iPage];
@@ -191,7 +194,9 @@
         case RTR0MEMOBJTYPE_PHYS:
         case RTR0MEMOBJTYPE_PHYS_NC:
         {
+#if __FreeBSD_version < 900000
             vm_page_lock_queues();
+#endif
             for (uint32_t iPage = 0; iPage < pMemFreeBSD->u.Phys.cPages; iPage++)
             {
                 vm_page_t pPage = pMemFreeBSD->u.Phys.apPages[iPage];
@@ -266,7 +271,9 @@
                 while (iPage-- > 0)
                 {
                     pPage = pMemFreeBSD->u.Phys.apPages[iPage];
+#if __FreeBSD_version < 900000
                     vm_page_lock_queues();
+#endif
                     vm_page_unwire(pPage, 0);
                     vm_page_free(pPage);
                     vm_page_unlock_queues();
@@ -448,7 +455,9 @@
                 while (iPage-- > 0)
                 {
                     pPage = pMemFreeBSD->u.Phys.apPages[iPage];
+#if __FreeBSD_version < 900000
                     vm_page_lock_queues();
+#endif
                     vm_page_unwire(pPage, 0);
                     vm_page_free(pPage);
                     vm_page_unlock_queues();