patch for /usr/ports/emulators/vmware3

Roman Divacky rdivacky at FreeBSD.org
Mon Mar 3 18:44:51 UTC 2008


On Mon, Mar 03, 2008 at 09:16:20AM -0800, fchang at cs.ubc.ca wrote:
> Hi all:
> 
> I finally got /usr/ports/emulator/vmware3 working on FreeBSD 7.0 i386.
> There were 3 changes needed:
> 
> 1) The avail_end kernel variable no longer exists; I googled and was
> able to use Kip Macy's suggested replacement code
> http://lists.freebsd.org/pipermail/freebsd-current/2007-January/068377.html
> 
> 2) One of the assembly routine cannot compile, but fortunately that
> routine is unused, so I just commented it out using an "#if 0" block
> 
> 3) One file uses the old FILEDESC_LOCK and FILEDESC_UNLOCK.
> Based on suggestion I found on mailing lists, I believe it is
> equivalent to the new FILEDESC_SLOCK and FILEDESC_SUNLOCK.
> 
> With the 3 changes, I was able to run vmware3 and boot up Windows XP in it.
> It appears stable on my machine.
> 
> Here is the patch:
> 
> 
> --- work/vmware-distrib/vmmon-only/freebsd/driver.c.old 2008-03-03 
> 17:03:25.000000000 +0000
> +++ work/vmware-distrib/vmmon-only/freebsd/driver.c     2008-03-03 
> 17:04:13.000000000 +0000
> @@ -397,12 +397,12 @@
>         if ((error = falloc(td, &fp, &fd)) != 0)
>                 return error;
> 
> -       FILEDESC_LOCK(p->p_fd);
> +       FILEDESC_SLOCK(p->p_fd);
>         fp->f_data = data;
>         fp->f_flag = flags & FMASK;
>         fp->f_ops = &vmmon_fileops;
>         fp->f_type = DTYPE_SOCKET;
> -       FILEDESC_UNLOCK(p->p_fd);
> +       FILEDESC_SUNLOCK(p->p_fd);

I dont think this is correct. you are modifying
the filedescriptor while holding "shared lock".

unless I am wrong it should be changed to FILEDESC_XLOCK/XUNLOCK

thnx for your work!

roman


More information about the freebsd-emulation mailing list