/* * This routine tries to correct mistakes in crashdump header. */ static void patch_header(WinDumpHeader64 *h) { Error *local_err = NULL; h->RequiredDumpSpace = sizeof(WinDumpHeader64) + (h->PhysicalMemoryBlock.NumberOfPages << TARGET_PAGE_BITS); h->PhysicalMemoryBlock.unused = 0; h->unused1 = 0; patch_mm_pfn_database(h, &local_err); if (local_err) { warn_report_err(local_err); local_err = NULL; } patch_bugcheck_data(h, &local_err); if (local_err) { warn_report_err(local_err); } }
static void net_init_tap_one(const NetdevTapOptions *tap, NetClientState *peer, const char *model, const char *name, const char *ifname, const char *script, const char *downscript, const char *vhostfdname, int vnet_hdr, int fd, Error **errp) { Error *err = NULL; TAPState *s = net_tap_fd_init(peer, model, name, fd, vnet_hdr); int vhostfd; tap_set_sndbuf(s->fd, tap, &err); if (err) { error_propagate(errp, err); return; } if (tap->has_fd || tap->has_fds) { snprintf(s->nc.info_str, sizeof(s->nc.info_str), "fd=%d", fd); } else if (tap->has_helper) { snprintf(s->nc.info_str, sizeof(s->nc.info_str), "helper=%s", tap->helper); } else { snprintf(s->nc.info_str, sizeof(s->nc.info_str), "ifname=%s,script=%s,downscript=%s", ifname, script, downscript); if (strcmp(downscript, "no") != 0) { snprintf(s->down_script, sizeof(s->down_script), "%s", downscript); snprintf(s->down_script_arg, sizeof(s->down_script_arg), "%s", ifname); } } if (tap->has_vhost ? tap->vhost : vhostfdname || (tap->has_vhostforce && tap->vhostforce)) { VhostNetOptions options; options.backend_type = VHOST_BACKEND_TYPE_KERNEL; options.net_backend = &s->nc; if (tap->has_poll_us) { options.busyloop_timeout = tap->poll_us; } else { options.busyloop_timeout = 0; } if (vhostfdname) { vhostfd = monitor_fd_param(cur_mon, vhostfdname, &err); if (vhostfd == -1) { if (tap->has_vhostforce && tap->vhostforce) { error_propagate(errp, err); } else { warn_report_err(err); } return; } qemu_set_nonblock(vhostfd); } else { vhostfd = open("/dev/vhost-net", O_RDWR); if (vhostfd < 0) { if (tap->has_vhostforce && tap->vhostforce) { error_setg_errno(errp, errno, "tap: open vhost char device failed"); } else { warn_report("tap: open vhost char device failed: %s", strerror(errno)); } return; } fcntl(vhostfd, F_SETFL, O_NONBLOCK); } options.opaque = (void *)(uintptr_t)vhostfd; s->vhost_net = vhost_net_init(&options); if (!s->vhost_net) { if (tap->has_vhostforce && tap->vhostforce) { error_setg(errp, VHOST_NET_INIT_FAILED); } else { warn_report(VHOST_NET_INIT_FAILED); } return; } } else if (vhostfdname) { error_setg(errp, "vhostfd(s)= is not valid without vhost"); } }