--- ./vmmon-only/common/vmx86.c.orig Sat Nov 10 16:54:14 2001 +++ ./vmmon-only/common/vmx86.c Sat Nov 10 16:55:02 2001 @@ -51,6 +51,7 @@ static VMDriver *vmDriverList = NULL; +VMDriver * Vmx86_CurrentVM(void *uniqHandle); static int32 lockedPageLimit; static int32 numLockedPages; --- ./vmmon-only/freebsd/driver.c.orig Sat Nov 10 16:54:17 2001 +++ ./vmmon-only/freebsd/driver.c Sat Nov 10 16:54:52 2001 @@ -147,6 +147,8 @@ #endif #define CDEV_MINOR 0 + +/* static struct cdevsw vmmon_cdevsw = { */ static struct cdevsw vmmon_cdevsw = { /* open */ FreeBSD_Driver_Open, /* close */ FreeBSD_Driver_Close, @@ -162,8 +164,12 @@ /* psize */ nopsize, /* flags */ 0, /* bmaj */ -1 + + }; + + /* *---------------------------------------------------------------------- * @@ -329,7 +335,7 @@ *---------------------------------------------------------------------- */ static int -FreeBSD_Driver_Open(dev_t dev, int oflag, int devtype, struct proc *p) +FreeBSD_Driver_Open(dev_t dev, int oflag, int devtype, struct thread *td) { VMFreeBSD *vmFreeBSD; VMDriver *vm; @@ -353,7 +359,7 @@ } memset(vmFreeBSD, 0, sizeof *vmFreeBSD); - vm = Vmx86_Init((void *)dev, (void *)(p->p_pid)); + vm = Vmx86_Init((void *)dev, (void *)(td->td_proc->p_pid)); if (vm == NULL) { Warning("Vmx86_Init failed\n"); free(vmFreeBSD, M_DEVBUF); @@ -409,7 +415,7 @@ */ static int -FreeBSD_Driver_Close(dev_t dev, int fflag, int devtype, struct proc *p) +FreeBSD_Driver_Close(dev_t dev, int fflag, int devtype, struct thread *td) { VMFreeBSD *vmFreeBSD = (VMFreeBSD *) dev->si_drv1; @@ -419,7 +425,7 @@ if (!vmFreeBSD->vm) { printf("/dev/" DEVICE_NAME ": (zombie) close fd for pid=%d\n", - p->p_pid); + td->td_proc->p_pid); } else { /*printf("/dev/" DEVICE_NAME ": useCount DEC pid=%d\n",vmFreeBSD->pids[0]);*/ } @@ -461,7 +467,7 @@ */ static int -FreeBSD_Driver_Poll(dev_t dev, int events, struct proc *p) +FreeBSD_Driver_Poll(dev_t dev, int events, struct thread *td) { int revents = 0; @@ -492,7 +498,7 @@ #if POLL_TRACE nanotime(&vmFreeBSD->time_sleep); #endif - selrecord(p, &vmFreeBSD->rsel); + selrecord(td, &vmFreeBSD->rsel); vmFreeBSD->flags.twaiting = TRUE; vmFreeBSD->thandle = timeout(FreeBSD_DriverSelectTimeout, vmFreeBSD, 1); } @@ -544,7 +550,7 @@ */ static int FreeBSD_Driver_Ioctl( dev_t dev, u_long cmd, caddr_t parg, int mode, - struct proc *p) + struct thread *td) { VMFreeBSD *vmFreeBSD = (VMFreeBSD *) dev->si_drv1; VMDriver *vm = vmFreeBSD->vm; @@ -575,7 +581,7 @@ ASSERT(!err); err = Vmx86_CreateVM(vm, &initParams); if (err) { - p->p_retval[0] = -1; + td->td_retval[0] = -1; retval = EAGAIN; } err = HostIF_CopyToUser((char*)arg,&initParams,sizeof(InitBlock)); @@ -591,7 +597,7 @@ case VMIO_RUN: ASSERT(vm != NULL); vm_hold = vm; - p->p_retval[0] = Vmx86_RunVM(vm); + td->td_retval[0] = Vmx86_RunVM(vm); break; case VMIO_BEEP: { /* XXX for buggy Linux */ @@ -625,7 +631,7 @@ char *addr = (char *)arg; MPN mpn; mpn = HostIF_LookupUserMPN(vm,addr); - p->p_retval[0] = mpn; + td->td_retval[0] = mpn; break; } @@ -633,18 +639,18 @@ char *addr = (char *)arg; MPN mpn; mpn = Vmx86_LockPage(vm, addr, TRUE); - p->p_retval[0] = mpn; + td->td_retval[0] = mpn; break; } case VMIO_UNLOCKPAGE: { char *addr = (char *)arg; - p->p_retval[0] = Vmx86_UnlockPage(vm, addr, TRUE); + td->td_retval[0] = Vmx86_UnlockPage(vm, addr, TRUE); break; } case VMIO_GET_NUM_VMS : { - p->p_retval[0] = Vmx86_GetNumVMs(); + td->td_retval[0] = Vmx86_GetNumVMs(); break; } @@ -660,7 +666,7 @@ } case VMIO_GET_HARD_LIMIT: { - p->p_retval[0] = Vmx86_GetLockedPagesLimit(); + td->td_retval[0] = Vmx86_GetLockedPagesLimit(); break; } @@ -762,9 +768,9 @@ case VMIO_ISMPSAFE : { #ifdef SMP - p->p_retval[0] = TRUE; + td->td_retval[0] = TRUE; #else - p->p_retval[0] = FALSE; + td->td_retval[0] = FALSE; #endif break; } @@ -772,25 +778,25 @@ case VMIO_APICBASE: { MA ma; ma = HostIF_APIC_Base(vm, (Bool)arg); - p->p_retval[0] = ma; + td->td_retval[0] = ma; break; } case VMIO_IOAPICBASE: { MA ma; ma = HostIF_IOAPIC_Base(vm); - p->p_retval[0] = ma; + td->td_retval[0] = ma; break; } case VMIO_CHECK_MEMORY : - p->p_retval[0] = HostIF_CheckMemory(vm); + td->td_retval[0] = HostIF_CheckMemory(vm); break; case VMIO_REGISTER_PASSTHROUGH_IRQ: { #ifdef SUPPORT_PASSTHROUGH - p->p_retval[0] = Passthrough_RegisterIRQ((unsigned char) arg, "VMware", vmFreeBSD); + td->td_retval[0] = Passthrough_RegisterIRQ((unsigned char) arg, "VMware", vmFreeBSD); #else retval = EINVAL; #endif @@ -802,7 +808,7 @@ struct passthrough_iorange ior; err = HostIF_CopyFromUser(&ior, (char*)arg, sizeof(ior)); - p->p_retval[0] = Passthrough_RegisterIORegion(ior.ioBase, ior.numPorts, "VMware"); + td->td_retval[0] = Passthrough_RegisterIORegion(ior.ioBase, ior.numPorts, "VMware"); #else retval = EINVAL; #endif @@ -823,7 +829,7 @@ struct passthrough_iorange ior; err = HostIF_CopyFromUser(&ior, (char*)arg, sizeof(ior)); - p->p_retval[0] = Passthrough_ReleaseIORegion(ior.ioBase, ior.numPorts); + td->td_retval[0] = Passthrough_ReleaseIORegion(ior.ioBase, ior.numPorts); #else retval = EINVAL; #endif @@ -832,7 +838,7 @@ case VMIO_START_PASSTHROUGH: { #ifdef SUPPORT_PASSTHROUGH - p->p_retval[0] = Passthrough_Init(vmFreeBSD); + td->td_retval[0] = Passthrough_Init(vmFreeBSD); #else retval = EINVAL; #endif @@ -841,7 +847,7 @@ case VMIO_STOP_PASSTHROUGH: { #ifdef SUPPORT_PASSTHROUGH - p->p_retval[0] = Passthrough_Release(vmFreeBSD); + td->td_retval[0] = Passthrough_Release(vmFreeBSD); #else retval = EINVAL; #endif @@ -853,7 +859,7 @@ unsigned char irq; if (vmFreeBSD->numPendingPassthroughIRQs > 0) { irq = vmFreeBSD->pendingPassthroughIRQs[--vmFreeBSD->numPendingPassthroughIRQs], - p->p_retval[0] = vmFreeBSD->numPendingPassthroughIRQs; + td->td_retval[0] = vmFreeBSD->numPendingPassthroughIRQs; } else { irq = 0x0; retval = EAGAIN; @@ -950,7 +956,7 @@ va_list args; - vm = Vmx86_GetVMforProcess((void *)(curproc->p_pid)); + vm = Vmx86_GetVMforProcess((void *)(curthread->td_proc->p_pid)); va_start(args, fmt); vsprintf(freebsdState.buf, fmt, args); @@ -978,7 +984,7 @@ va_list args; - vm = Vmx86_GetVMforProcess((void *)(curproc->p_pid)); + vm = Vmx86_GetVMforProcess((void *)(curthread->td_proc->p_pid)); va_start(args, fmt); vsprintf(freebsdState.buf, fmt, args); @@ -1009,7 +1015,7 @@ void Panic(char *fmt, ...) { - VMDriver *vm = Vmx86_GetVMforProcess((void *)(curproc->p_pid)); + VMDriver *vm = Vmx86_GetVMforProcess((void *)(curthread->td_proc->p_pid)); va_list args; va_start(args, fmt); @@ -1029,13 +1035,13 @@ if (vm) { vLog(vm->logFD); vWarning(vm); - sprintf(freebsdState.buf,"VMX86 driver panic. pid=%d\n\r",curproc->p_pid); + sprintf(freebsdState.buf,"VMX86 driver panic. pid=%d\n\r",curthread->td_proc->p_pid); vLog(vm->logFD); vWarning(vm); } /* XXX Why it's right */ - exit1(curproc, 0); + exit1(curthread, 0); /* NOTREACHED */ } --- ./vmmon-only/freebsd/hostif.c.orig Sat Nov 10 16:56:01 2001 +++ ./vmmon-only/freebsd/hostif.c Sat Nov 10 16:56:21 2001 @@ -55,10 +55,9 @@ #include #include +#include #if __FreeBSD_version >= 500018 #include -#else -#include #endif #include #include --- ./vmmon-only/freebsd/linux_emu.c.orig Sat Nov 10 16:54:17 2001 +++ ./vmmon-only/freebsd/linux_emu.c Sat Nov 10 16:54:57 2001 @@ -300,13 +300,13 @@ } static int -linux_to_bsd_fdgetprm(struct proc *p, struct file *fp, struct linux_floppy_struct *flp) +linux_to_bsd_fdgetprm(struct thread *td, struct file *fp, struct linux_floppy_struct *flp) { int error; struct linux_floppy_struct fls; struct fd_type fdt; - if ((error = fo_ioctl(fp, FD_GTYPE, (caddr_t)&fdt, p)) != 0) + if ((error = fo_ioctl(fp, FD_GTYPE, (caddr_t)&fdt, td)) != 0) return error; bzero(&fls, sizeof(fls)); @@ -324,13 +324,13 @@ } static int -linux_to_bsd_get_geometry(struct proc *p, struct file *fp, struct linux_hd_geometry *geo) +linux_to_bsd_get_geometry(struct thread *td, struct file *fp, struct linux_hd_geometry *geo) { int error; struct linux_hd_geometry drive_geo; struct disklabel dl; - if ((error = fo_ioctl(fp, DIOCGDINFO, (caddr_t)&dl, p)) != 0) + if ((error = fo_ioctl(fp, DIOCGDINFO, (caddr_t)&dl, td)) != 0) return error; bzero(&drive_geo, sizeof(drive_geo)); @@ -344,14 +344,14 @@ } static int -linux_to_bsd_hdio_identity(struct proc *p, struct file *fp, struct linux_hd_driveid *id) +linux_to_bsd_hdio_identity(struct thread *td, struct file *fp, struct linux_hd_driveid *id) { int error; struct disklabel dl; struct linux_hd_driveid driveid; unsigned int capacity; - if ((error = fo_ioctl(fp, DIOCGDINFO, (caddr_t)&dl, p)) != 0) + if ((error = fo_ioctl(fp, DIOCGDINFO, (caddr_t)&dl, td)) != 0) return error; bzero(&driveid, sizeof(driveid)); @@ -382,13 +382,13 @@ } static int -linux_to_bsd_cdromvolread(struct proc *p, struct file *fp, struct linux_cdrom_volctrl *vol) +linux_to_bsd_cdromvolread(struct thread *td, struct file *fp, struct linux_cdrom_volctrl *vol) { int error; struct ioc_vol bsd_vol; struct linux_cdrom_volctrl linux_vol; - if ((error = fo_ioctl(fp, CDIOCGETVOL, (caddr_t)&bsd_vol, p)) != 0) + if ((error = fo_ioctl(fp, CDIOCGETVOL, (caddr_t)&bsd_vol, td)) != 0) return error; linux_vol.channel0 = bsd_vol.vol[0]; @@ -400,7 +400,7 @@ } static int -linux_cdrom_get_multisession(struct proc *p, struct file *fp, struct linux_cdrom_multisession *muls) +linux_cdrom_get_multisession(struct thread *td, struct file *fp, struct linux_cdrom_multisession *muls) { struct linux_cdrom_multisession ms; struct ioc_toc_header h; @@ -411,7 +411,7 @@ if ((error = copyin(muls, &ms, sizeof(ms))) != 0) return error; - if ((error = fo_ioctl(fp, CDIOREADTOCHEADER, (caddr_t)&h, p)) != 0) + if ((error = fo_ioctl(fp, CDIOREADTOCHEADER, (caddr_t)&h, td)) != 0) return error; bzero(&t, sizeof(t)); @@ -419,7 +419,7 @@ t.address_format = ms.addr_format ; /* BSD and LINUX formats equal */ t.track = 0; /* get content from the first track */ - if ((error = fo_ioctl(fp, CDIOREADTOCENTRY, (caddr_t)&t, p)) != 0) + if ((error = fo_ioctl(fp, CDIOREADTOCENTRY, (caddr_t)&t, td)) != 0) return error; bsd_to_linux_msf_lba(ms.addr_format, &t.entry.addr, &ms.addr); @@ -430,37 +430,37 @@ } static int -linux_ioctl_hdfdcd(struct proc *p, struct linux_ioctl_args *args) +linux_ioctl_hdfdcd(struct thread *td, struct linux_ioctl_args *args) { - struct file *fp = p->p_fd->fd_ofiles[args->fd]; + struct file *fp = td->td_proc->p_fd->fd_ofiles[args->fd]; switch (args->cmd & 0xffff) { case LINUX_HDIO_GET_IDENTITY: case LINUX_HDIO_OBSOLETE_IDENTITY: - return linux_to_bsd_hdio_identity(p, fp, (struct linux_hd_driveid *)args->arg); + return linux_to_bsd_hdio_identity(td, fp, (struct linux_hd_driveid *)args->arg); case LINUX_HDIO_GETGEO: - return linux_to_bsd_get_geometry(p, fp, (struct linux_hd_geometry *)args->arg); + return linux_to_bsd_get_geometry(td, fp, (struct linux_hd_geometry *)args->arg); case LINUX_FDTWADDLE: return 0; case LINUX_CDROMVOLREAD: - return linux_to_bsd_cdromvolread(p, fp, (struct linux_cdrom_volctrl*)args->arg); + return linux_to_bsd_cdromvolread(td, fp, (struct linux_cdrom_volctrl*)args->arg); case LINUX_CDROMMULTISESSION: - return linux_cdrom_get_multisession(p, fp, (struct linux_cdrom_multisession *)args->arg); + return linux_cdrom_get_multisession(td, fp, (struct linux_cdrom_multisession *)args->arg); case LINUX_CDROM_SET_OPTIONS: switch (args->arg) { case 0: - p->p_retval[0] = 0; + td->td_retval[0] = 0; return 0; default: return ENOSYS; } break; case LINUX_CDROM_CLEAR_OPTIONS: - p->p_retval[0] = 0; + td->td_retval[0] = 0; return 0; case LINUX_CDROM_LOCKDOOR: args->cmd = args->arg ? CDIOCPREVENT : CDIOCALLOW; - return ioctl(p, (struct ioctl_args *)args); + return ioctl(td, (struct ioctl_args *)args); case LINUX_CDROM_MEDIA_CHANGED: case LINUX_CDROM_DRIVE_STATUS: case LINUX_CDROM_DISC_STATUS: @@ -470,7 +470,7 @@ case LINUX_FDPOLLDRVSTAT: return linux_fdpolldrvstat((struct linux_floppy_drive_struct*)args->arg); case LINUX_FDGETPRM: - return linux_to_bsd_fdgetprm(p, fp, (struct linux_floppy_struct*)args->arg); + return linux_to_bsd_fdgetprm(td, fp, (struct linux_floppy_struct*)args->arg); } return (ENOIOCTL); } @@ -482,7 +482,7 @@ #define LINUX_TIOCLINUX 0x541C static int -linux_tioclinux(struct proc *p, struct linux_ioctl_args *args) +linux_tioclinux(struct thread *td, struct linux_ioctl_args *args) { int type; int error = ENOIOCTL; @@ -503,7 +503,7 @@ static int -linux_ioctl_video(struct proc *p, struct linux_ioctl_args *args) +linux_ioctl_video(struct thread *td, struct linux_ioctl_args *args) { int error = ENOIOCTL; @@ -513,7 +513,7 @@ error = 0; break; case LINUX_TIOCLINUX: - error = linux_tioclinux(p, args); + error = linux_tioclinux(td, args); break; default: break; @@ -526,18 +526,17 @@ LINUX_IOCTL_SET(vmmon, IOCTLCMD_NONE, IOCTLCMD_LAST); static int -linux_ioctl_vmmon(struct proc *p, struct linux_ioctl_args *args) +linux_ioctl_vmmon(struct thread *td, struct linux_ioctl_args *args) { #define DEB(x) switch (args->cmd & 0xffff) { #define IOCTL(name) case IOCTLCMD_##name: args->cmd = VMIO_##name; \ DEB(printf("vmmware: IOCTL %s arg %p\n", #name, (void *)args->arg)); \ - return ioctl(p, (struct ioctl_args *)args); + return ioctl(td, (struct ioctl_args *)args); #include "ioctls.h" #undef IOCTL } return (ENOIOCTL); #undef DEB } - --- ./vmnet-only/freebsd/vmnet_linux.c.orig Sat Nov 10 16:54:17 2001 +++ ./vmnet-only/freebsd/vmnet_linux.c Sat Nov 10 16:54:59 2001 @@ -76,9 +76,9 @@ static int -linux_ioctl_setmacaddr(struct proc *p, struct linux_ioctl_args *args) +linux_ioctl_setmacaddr(struct thread *td, struct linux_ioctl_args *args) { - struct file *fp = p->p_fd->fd_ofiles[args->fd]; + struct file *fp = td->td_proc->p_fd->fd_ofiles[args->fd]; int error; VNet_SetMacAddrIOCTL macAddr; @@ -90,7 +90,7 @@ switch (macAddr.version) { case 1: - error = fo_ioctl(fp, SIOCSIFADDR, (caddr_t)macAddr.addr, p); + error = fo_ioctl(fp, SIOCSIFADDR, (caddr_t)macAddr.addr, td); DEB(printf("Get ethernet address: %6D\n", macAddr.addr, ":")); break; default: @@ -102,7 +102,7 @@ static int -linux_ioctl_net(struct proc *p, struct linux_ioctl_args *args) +linux_ioctl_net(struct thread *td, struct linux_ioctl_args *args) { int error=ENOIOCTL; @@ -116,7 +116,7 @@ #endif case LINUX_SIOCSIFADDR: args->cmd = SIOCSIFADDR; - error = ioctl(p, (struct ioctl_args *)args); + error = ioctl(td, (struct ioctl_args *)args); break; case LINUX_SIOCSLADRF: case LINUX_SIOCSKEEP: @@ -125,18 +125,18 @@ break; case LINUX_SIOCPORT: args->cmd = VMIO_SIOCPORT; - error = ioctl(p, (struct ioctl_args *)args); + error = ioctl(td, (struct ioctl_args *)args); break; case LINUX_SIOCBRIDGE: args->cmd = VMIO_SIOCBRIDGE; - error = ioctl(p, (struct ioctl_args *)args); + error = ioctl(td, (struct ioctl_args *)args); break; case LINUX_SIOCNETIF: args->cmd = VMIO_SIOCNETIF; - error = ioctl(p, (struct ioctl_args *)args); + error = ioctl(td, (struct ioctl_args *)args); break; case LINUX_SIOCSETMACADDR: - error = linux_ioctl_setmacaddr(p, args); + error = linux_ioctl_setmacaddr(td, args); break; } DEB(printf(__FUNCTION__ ": return %d\n", error)); @@ -147,16 +147,16 @@ /* What is the dumb idea to use SIOCSIFFLAGS ioctl, and directly pass flags? */ static int -linux_ioctl_net_sifflags(struct proc *p, struct linux_ioctl_args *args) +linux_ioctl_net_sifflags(struct thread *td, struct linux_ioctl_args *args) { int error; DEB(printf(__FUNCTION__ ": cmd 0x%04lx arg %p\n", args->cmd, (void*)args->arg)); args->cmd = SIOCGIFFLAGS; - error = ioctl(p, (struct ioctl_args *)args); /* First try standart */ + error = ioctl(td, (struct ioctl_args *)args); /* First try standart */ if (error) { args->cmd = VMIO_SIOCSIFFLAGS; /* Than vmnet */ - error = ioctl(p, (struct ioctl_args *)args); + error = ioctl(td, (struct ioctl_args *)args); } DEB(printf(__FUNCTION__ ": return %d\n", error)); return error;