Date: Mon, 02 Sep 2002 19:43:52 +0100 From: Ian Dowse <iedowse@maths.tcd.ie> To: Mark Santcroos <marks@ripe.net> Cc: emulation@freebsd.org, vsilyaev@mindspring.com Subject: Re: vmware2 fix for fo_ioctl api change Message-ID: <200209021943.aa05393@salmon.maths.tcd.ie> In-Reply-To: Your message of "Tue, 20 Aug 2002 13:01:34 %2B0200." <20020820110134.GG716@laptop.6bone.nl>
next in thread | previous in thread | raw e-mail | index | archive | help
In message <20020820110134.GG716@laptop.6bone.nl>, Mark Santcroos writes:
>Attached patches fixes compilation of vmware2 on -CURRENT.
>Note that it doesn't work at the moment, but that has other reasons and
>will be addressed in a seperate patch.
>(Not sure yet whether it is a vmware thing or a linux emu thing)
The following patch seems to make it actually run on -current for
me, though I haven't tested it very extensively.
Ian
Index: files/patch-be
===================================================================
RCS file: /home/iedowse/CVS/ports/emulators/vmware2/files/patch-be,v
retrieving revision 1.2
diff -u -r1.2 patch-be
--- files/patch-be 12 Jul 2001 14:26:10 -0000 1.2
+++ files/patch-be 2 Sep 2002 18:32:43 -0000
@@ -1,5 +1,5 @@
---- vmmon-only/freebsd/hostif.c.orig Thu Jul 12 22:05:29 2001
-+++ vmmon-only/freebsd/hostif.c Thu Jul 12 22:14:09 2001
+--- vmmon-only/freebsd/hostif.c.orig Mon Sep 2 19:19:50 2002
++++ vmmon-only/freebsd/hostif.c Mon Sep 2 19:30:03 2002
@@ -55,7 +55,11 @@
#include <vm/vm.h>
@@ -12,75 +12,113 @@
#include <vm/pmap.h>
#include <vm/vm_map.h>
#include <vm/vm_page.h>
-@@ -107,7 +111,16 @@
+@@ -107,7 +111,21 @@
paddr = (vm_offset_t)addr;
m = PHYS_TO_VM_PAGE(paddr);
-+#if __FreeBSD_version >= 500021
+- vm_page_wire(m);
++#if __FreeBSD_version >= 500038
+ GIANT_REQUIRED;
++ vm_page_lock_queues();
++ vm_page_wire(m);
++ vm_page_unlock_queues();
++#elif __FreeBSD_version >= 500021
++ GIANT_REQUIRED;
++ vm_page_wire(m);
+#elif __FreeBSD_version >= 500013
+ mtx_lock(&vm_mtx);
-+#endif
- vm_page_wire(m);
-+#if __FreeBSD_version >= 500021
-+#elif __FreeBSD_version >= 500013
++ vm_page_wire(m);
+ mtx_unlock(&vm_mtx);
++#else
++ vm_page_wire(m);
+#endif
return 0;
}
-@@ -120,7 +133,16 @@
+@@ -120,7 +138,21 @@
paddr = (vm_offset_t)addr;
m = PHYS_TO_VM_PAGE(paddr);
-+#if __FreeBSD_version >= 500021
++#if __FreeBSD_version >= 500038
++ GIANT_REQUIRED;
++ vm_page_lock_queues();
++ vm_page_unwire(m, 1);
++ vm_page_unlock_queues();
++#elif __FreeBSD_version >= 500021
+ GIANT_REQUIRED;
++ vm_page_unwire(m, 1);
+#elif __FreeBSD_version >= 500013
+ mtx_lock(&vm_mtx);
-+#endif
vm_page_unwire(m, 1);
-+#if __FreeBSD_version >= 500021
-+#elif __FreeBSD_version >= 500013
+ mtx_unlock(&vm_mtx);
++#else
++ vm_page_unwire(m, 1);
+#endif
return 0;
}
-@@ -1066,10 +1088,19 @@
+@@ -1066,10 +1098,33 @@
return NULL;
}
paddr = vtophys(addr);
-+#if __FreeBSD_version >= 500021
-+ GIANT_REQUIRED;
++#if __FreeBSD_version >= 500038
++ GIANT_REQUIRED;
++ ka->kaddr = kmem_alloc_pageable(kernel_map, PAGE_SIZE);
++ ka->map = PHYS_TO_VM_PAGE(paddr);
++ vm_page_lock_queues();
++ vm_page_wire(ka->map);
++ vm_page_unlock_queues();
++ pmap_qenter(ka->kaddr, &ka->map, 1);
++#elif __FreeBSD_version >= 500021
++ GIANT_REQUIRED;
++ ka->kaddr = kmem_alloc_pageable(kernel_map, PAGE_SIZE);
++ ka->map = PHYS_TO_VM_PAGE(paddr);
++ vm_page_wire(ka->map);
++ pmap_kenter(ka->kaddr, paddr);
+#elif __FreeBSD_version >= 500013
+ mtx_lock(&vm_mtx);
-+#endif
++ ka->kaddr = kmem_alloc_pageable(kernel_map, PAGE_SIZE);
++ ka->map = PHYS_TO_VM_PAGE(paddr);
++ vm_page_wire(ka->map);
++ pmap_kenter(ka->kaddr, paddr);
++ mtx_unlock(&vm_mtx);
++#else
ka->kaddr = kmem_alloc_pageable(kernel_map, PAGE_SIZE);
ka->map = PHYS_TO_VM_PAGE(paddr);
vm_page_wire(ka->map);
pmap_kenter(ka->kaddr, paddr);
-+#if __FreeBSD_version >= 500021
-+#elif __FreeBSD_version >= 500013
-+ mtx_unlock(&vm_mtx);
+#endif
return ka->kaddr;
}
-@@ -1079,9 +1110,18 @@
+@@ -1079,9 +1134,29 @@
if (ka->map==NULL)
return 0;
-+#if __FreeBSD_version >= 500021
+- vm_page_unwire(ka->map, 1);
+- pmap_kremove(ka->kaddr);
++#if __FreeBSD_version >= 500038
+ GIANT_REQUIRED;
-+#elif __FreeBSD_version >= 500013
-+ mtx_lock(&vm_mtx);
-+#endif
- vm_page_unwire(ka->map, 1);
- pmap_kremove(ka->kaddr);
++ vm_page_lock_queues();
++ vm_page_unwire(ka->map, 1);
++ vm_page_unlock_queues();
++ pmap_qremove(ka->kaddr, 1);
kmem_free(kernel_map, ka->kaddr, PAGE_SIZE);
-+#if __FreeBSD_version >= 500021
++#elif __FreeBSD_version >= 500021
++ GIANT_REQUIRED;
++ vm_page_unwire(ka->map, 1);
++ pmap_kremove(ka->kaddr);
++ kmem_free(kernel_map, ka->kaddr, PAGE_SIZE);
+#elif __FreeBSD_version >= 500013
++ mtx_lock(&vm_mtx);
++ vm_page_unwire(ka->map, 1);
++ pmap_kremove(ka->kaddr);
++ kmem_free(kernel_map, ka->kaddr, PAGE_SIZE);
+ mtx_unlock(&vm_mtx);
++#else
++ vm_page_unwire(ka->map, 1);
++ pmap_kremove(ka->kaddr);
++ kmem_free(kernel_map, ka->kaddr, PAGE_SIZE);
+#endif
ka->kaddr = 0;
ka->map = NULL;
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-emulation" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200209021943.aa05393>
