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>