static int virtio_blk_load(QEMUFile *f, void *opaque, int version_id) { VirtIOBlock *s = opaque; int ret; if (version_id != 2) return -EINVAL; ret = virtio_load(&s->vdev, f); if (ret) { return ret; } while (qemu_get_sbyte(f)) { VirtIOBlockReq *req = virtio_blk_alloc_request(s); qemu_get_buffer(f, (unsigned char*)&req->elem, sizeof(req->elem)); req->next = s->rq; s->rq = req; virtqueue_map_sg(req->elem.in_sg, req->elem.in_addr, req->elem.in_num, 1); virtqueue_map_sg(req->elem.out_sg, req->elem.out_addr, req->elem.out_num, 0); } return 0; }
static void slirp_tcp_load(QEMUFile *f, struct tcpcb *tp) { int i; tp->t_state = qemu_get_sbe16(f); for (i = 0; i < TCPT_NTIMERS; i++) tp->t_timer[i] = qemu_get_sbe16(f); tp->t_rxtshift = qemu_get_sbe16(f); tp->t_rxtcur = qemu_get_sbe16(f); tp->t_dupacks = qemu_get_sbe16(f); tp->t_maxseg = qemu_get_be16(f); tp->t_force = qemu_get_sbyte(f); tp->t_flags = qemu_get_be16(f); tp->snd_una = qemu_get_be32(f); tp->snd_nxt = qemu_get_be32(f); tp->snd_up = qemu_get_be32(f); tp->snd_wl1 = qemu_get_be32(f); tp->snd_wl2 = qemu_get_be32(f); tp->iss = qemu_get_be32(f); tp->snd_wnd = qemu_get_be32(f); tp->rcv_wnd = qemu_get_be32(f); tp->rcv_nxt = qemu_get_be32(f); tp->rcv_up = qemu_get_be32(f); tp->irs = qemu_get_be32(f); tp->rcv_adv = qemu_get_be32(f); tp->snd_max = qemu_get_be32(f); tp->snd_cwnd = qemu_get_be32(f); tp->snd_ssthresh = qemu_get_be32(f); tp->t_idle = qemu_get_sbe16(f); tp->t_rtt = qemu_get_sbe16(f); tp->t_rtseq = qemu_get_be32(f); tp->t_srtt = qemu_get_sbe16(f); tp->t_rttvar = qemu_get_sbe16(f); tp->t_rttmin = qemu_get_be16(f); tp->max_sndwnd = qemu_get_be32(f); tp->t_oobflags = qemu_get_byte(f); tp->t_iobc = qemu_get_byte(f); tp->t_softerror = qemu_get_sbe16(f); tp->snd_scale = qemu_get_byte(f); tp->rcv_scale = qemu_get_byte(f); tp->request_r_scale = qemu_get_byte(f); tp->requested_s_scale = qemu_get_byte(f); tp->ts_recent = qemu_get_be32(f); tp->ts_recent_age = qemu_get_be32(f); tp->last_ack_sent = qemu_get_be32(f); tcp_template(tp); }
static int virtio_blk_load(QEMUFile *f, void *opaque, int version_id) { VirtIOBlock *s = opaque; if (version_id != 2) return -EINVAL; virtio_load(&s->vdev, f); while (qemu_get_sbyte(f)) { VirtIOBlockReq *req = virtio_blk_alloc_request(s); qemu_get_buffer(f, (unsigned char*)&req->elem, sizeof(req->elem)); req->next = s->rq; s->rq = req->next; } return 0; }
static int virtio_blk_load_device(VirtIODevice *vdev, QEMUFile *f, int version_id) { VirtIOBlock *s = VIRTIO_BLK(vdev); while (qemu_get_sbyte(f)) { VirtIOBlockReq *req = virtio_blk_alloc_request(s); qemu_get_buffer(f, (unsigned char *)req->elem, sizeof(VirtQueueElement)); req->next = s->rq; s->rq = req; virtqueue_map_sg(req->elem->in_sg, req->elem->in_addr, req->elem->in_num, 1); virtqueue_map_sg(req->elem->out_sg, req->elem->out_addr, req->elem->out_num, 0); } return 0; }
static int virtio_blk_load(QEMUFile *f, void *opaque, int version_id) { VirtIOBlock *s = opaque; int ret; if (version_id != 2) return -EINVAL; /* RHEL only. Upstream we will fix this by ensuring that VIRTIO_BLK_F_SCSI * is always set. This however will cause migration from new QEMU to old * QEMU to fail if both have scsi=off. We cannot use compatibility * properties because the scsi property is being overridden by management * (libvirt). * * If RHEL7->RHEL6 migration will be supported, we'll have to disable * VIRTIO_BLK_F_SCSI in the migration stream when running on a rhel6.x.0 * machine type with scsi=off. Otherwise SG_IO will magically start * working on the destination. */ ret = virtio_load_with_features(&s->vdev, f, 1 << VIRTIO_BLK_F_SCSI); if (ret) { return ret; } while (qemu_get_sbyte(f)) { VirtIOBlockReq *req = virtio_blk_alloc_request(s); qemu_get_buffer(f, (unsigned char*)&req->elem, sizeof(req->elem)); req->next = s->rq; s->rq = req; virtqueue_map_sg(req->elem.in_sg, req->elem.in_addr, req->elem.in_num, 1); virtqueue_map_sg(req->elem.out_sg, req->elem.out_addr, req->elem.out_num, 0); } return 0; }