sync code with last fixes and improvements from OpenBSD
This commit is contained in:
parent
f57be82572
commit
58b04bcee7
468 changed files with 9958 additions and 7882 deletions
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: virtio.c,v 1.103 2023/05/13 23:15:28 dv Exp $ */
|
||||
/* $OpenBSD: virtio.c,v 1.105 2023/07/15 18:32:21 dv Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2015 Mike Larkin <mlarkin@openbsd.org>
|
||||
|
@ -591,7 +591,9 @@ virtio_init(struct vmd_vm *vm, int child_cdrom,
|
|||
vmc->vmc_ifflags[i] & VMIFF_LOCAL ? 1 : 0;
|
||||
if (i == 0 && vmc->vmc_bootdevice & VMBOOTDEV_NET)
|
||||
dev->vionet.pxeboot = 1;
|
||||
|
||||
memcpy(&dev->vionet.local_prefix,
|
||||
&env->vmd_cfg.cfg_localprefix,
|
||||
sizeof(dev->vionet.local_prefix));
|
||||
log_debug("%s: vm \"%s\" vio%u lladdr %s%s%s%s",
|
||||
__func__, vcp->vcp_name, i,
|
||||
ether_ntoa((void *)dev->vionet.mac),
|
||||
|
@ -1300,8 +1302,7 @@ virtio_dev_launch(struct vmd_vm *vm, struct virtio_dev *dev)
|
|||
char *nargv[10], num[32], vmm_fd[32], t[2];
|
||||
pid_t dev_pid;
|
||||
int data_fds[VM_MAX_BASE_PER_DISK], sync_fds[2], async_fds[2], ret = 0;
|
||||
size_t i, j, data_fds_sz, sz = 0;
|
||||
struct virtio_dev *d = NULL;
|
||||
size_t i, data_fds_sz, sz = 0;
|
||||
struct viodev_msg msg;
|
||||
struct imsg imsg;
|
||||
struct imsgev *iev = &dev->sync_iev;
|
||||
|
@ -1347,17 +1348,6 @@ virtio_dev_launch(struct vmd_vm *vm, struct virtio_dev *dev)
|
|||
goto err;
|
||||
}
|
||||
|
||||
/* Keep data file descriptors open after exec. */
|
||||
for (i = 0; i < data_fds_sz; i++) {
|
||||
log_debug("%s: marking fd %d !close-on-exec", __func__,
|
||||
data_fds[i]);
|
||||
if (fcntl(data_fds[i], F_SETFD, 0)) {
|
||||
ret = errno;
|
||||
log_warn("%s: fcntl", __func__);
|
||||
goto err;
|
||||
}
|
||||
}
|
||||
|
||||
/* Fork... */
|
||||
dev_pid = fork();
|
||||
if (dev_pid == -1) {
|
||||
|
@ -1457,26 +1447,14 @@ virtio_dev_launch(struct vmd_vm *vm, struct virtio_dev *dev)
|
|||
close_fd(async_fds[0]);
|
||||
close_fd(sync_fds[0]);
|
||||
|
||||
/*
|
||||
* Close any other device fd's we know aren't
|
||||
* ours. This releases any exclusive locks held on
|
||||
* things like disk images.
|
||||
*/
|
||||
SLIST_FOREACH(d, &virtio_devs, dev_next) {
|
||||
if (d == dev)
|
||||
continue;
|
||||
|
||||
switch (d->dev_type) {
|
||||
case VMD_DEVTYPE_DISK:
|
||||
for (j = 0; j < d->vioblk.ndisk_fd; j++)
|
||||
close_fd(d->vioblk.disk_fd[j]);
|
||||
break;
|
||||
case VMD_DEVTYPE_NET:
|
||||
close_fd(d->vionet.data_fd);
|
||||
break;
|
||||
default:
|
||||
fatalx("%s: invalid device type '%c'",
|
||||
__func__, d->dev_type);
|
||||
/* Keep data file descriptors open after exec. */
|
||||
for (i = 0; i < data_fds_sz; i++) {
|
||||
log_debug("%s: marking fd %d !close-on-exec", __func__,
|
||||
data_fds[i]);
|
||||
if (fcntl(data_fds[i], F_SETFD, 0)) {
|
||||
ret = errno;
|
||||
log_warn("%s: fcntl", __func__);
|
||||
goto err;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue