Lines Matching refs:dev
24 static int vfu_virtio_dev_start(struct vfu_virtio_dev *dev);
25 static int vfu_virtio_dev_stop(struct vfu_virtio_dev *dev);
28 vfu_virtio_unmap_q(struct vfu_virtio_dev *dev, struct q_mapping *mapping) in vfu_virtio_unmap_q() argument
30 struct vfu_virtio_endpoint *virtio_endpoint = dev->virtio_endpoint; in vfu_virtio_unmap_q()
41 vfu_virtio_map_q(struct vfu_virtio_dev *dev, struct q_mapping *mapping, uint64_t phys_addr, in vfu_virtio_map_q() argument
44 struct vfu_virtio_endpoint *virtio_endpoint = dev->virtio_endpoint; in vfu_virtio_map_q()
62 virtio_dev_map_vq(struct vfu_virtio_dev *dev, struct vfu_virtio_vq *vq) in virtio_dev_map_vq() argument
71 SPDK_DEBUGLOG(vfu_virtio, "%s: try to map vq %u\n", dev->name, vq->id); in virtio_dev_map_vq()
73 len = virtio_queue_desc_size(dev, vq); in virtio_dev_map_vq()
75 ret = vfu_virtio_map_q(dev, &vq->desc, phys_addr, len); in virtio_dev_map_vq()
81 len = virtio_queue_avail_size(dev, vq); in virtio_dev_map_vq()
83 ret = vfu_virtio_map_q(dev, &vq->avail, phys_addr, len); in virtio_dev_map_vq()
85 vfu_virtio_unmap_q(dev, &vq->desc); in virtio_dev_map_vq()
90 len = virtio_queue_used_size(dev, vq); in virtio_dev_map_vq()
92 ret = vfu_virtio_map_q(dev, &vq->used, phys_addr, len); in virtio_dev_map_vq()
94 vfu_virtio_unmap_q(dev, &vq->desc); in virtio_dev_map_vq()
95 vfu_virtio_unmap_q(dev, &vq->avail); in virtio_dev_map_vq()
101 if (virtio_guest_has_feature(dev, VIRTIO_F_RING_PACKED)) { in virtio_dev_map_vq()
107 SPDK_DEBUGLOG(vfu_virtio, "%s: map vq %u successfully\n", dev->name, vq->id); in virtio_dev_map_vq()
114 virtio_dev_unmap_vq(struct vfu_virtio_dev *dev, struct vfu_virtio_vq *vq) in virtio_dev_unmap_vq() argument
116 SPDK_DEBUGLOG(vfu_virtio, "%s: unmap vq %u\n", dev->name, vq->id); in virtio_dev_unmap_vq()
119 vfu_virtio_unmap_q(dev, &vq->desc); in virtio_dev_unmap_vq()
120 vfu_virtio_unmap_q(dev, &vq->avail); in virtio_dev_unmap_vq()
121 vfu_virtio_unmap_q(dev, &vq->used); in virtio_dev_unmap_vq()
148 vfu_virtio_dev_unmap_vqs(struct vfu_virtio_dev *dev, void *map_start, void *map_end) in vfu_virtio_dev_unmap_vqs() argument
153 for (i = 0; i < dev->num_queues; i++) { in vfu_virtio_dev_unmap_vqs()
154 vq = &dev->vqs[i]; in vfu_virtio_dev_unmap_vqs()
162 virtio_dev_unmap_vq(dev, vq); in vfu_virtio_dev_unmap_vqs()
174 if (virtio_endpoint->dev == NULL) { in vfu_virtio_notify_config()
178 virtio_endpoint->dev->cfg.isr = 1; in vfu_virtio_notify_config()
179 virtio_endpoint->dev->cfg.config_generation++; in vfu_virtio_notify_config()
181 vfu_irq_trigger(spdk_vfu_get_vfu_ctx(endpoint), virtio_endpoint->dev->cfg.msix_config); in vfu_virtio_notify_config()
185 vfu_virtio_dev_reset(struct vfu_virtio_dev *dev) in vfu_virtio_dev_reset() argument
190 SPDK_DEBUGLOG(vfu_virtio, "device %s resetting\n", dev->name); in vfu_virtio_dev_reset()
192 for (i = 0; i < dev->num_queues; i++) { in vfu_virtio_dev_reset()
193 vq = &dev->vqs[i]; in vfu_virtio_dev_reset()
206 memset(&dev->cfg, 0, sizeof(struct virtio_pci_cfg)); in vfu_virtio_dev_reset()
210 virtio_dev_set_status(struct vfu_virtio_dev *dev, uint8_t status) in virtio_dev_set_status() argument
214 SPDK_DEBUGLOG(vfu_virtio, "device current status %x, set status %x\n", dev->cfg.device_status, in virtio_dev_set_status()
217 if (!(virtio_dev_is_started(dev))) { in virtio_dev_set_status()
219 ret = vfu_virtio_dev_start(dev); in virtio_dev_set_status()
223 ret = vfu_virtio_dev_stop(dev); in virtio_dev_set_status()
232 dev->cfg.device_status = status; in virtio_dev_set_status()
235 vfu_virtio_dev_reset(dev); in virtio_dev_set_status()
242 virtio_dev_set_features(struct vfu_virtio_dev *dev, uint64_t features) in virtio_dev_set_features() argument
244 if (dev->cfg.device_status & VIRTIO_CONFIG_S_FEATURES_OK) { in virtio_dev_set_features()
249 if (features & ~dev->host_features) { in virtio_dev_set_features()
251 dev->host_features, features); in virtio_dev_set_features()
255 SPDK_DEBUGLOG(vfu_virtio, "%s: negotiated features 0x%"PRIx64"\n", dev->name, in virtio_dev_set_features()
257 dev->cfg.guest_features = features; in virtio_dev_set_features()
263 virtio_dev_enable_vq(struct vfu_virtio_dev *dev, uint16_t qid) in virtio_dev_enable_vq() argument
267 SPDK_DEBUGLOG(vfu_virtio, "%s: enable vq %u\n", dev->name, qid); in virtio_dev_enable_vq()
269 vq = &dev->vqs[qid]; in virtio_dev_enable_vq()
276 if (virtio_dev_map_vq(dev, vq)) { in virtio_dev_enable_vq()
286 if (virtio_guest_has_feature(dev, VIRTIO_F_RING_PACKED)) { in virtio_dev_enable_vq()
287 SPDK_DEBUGLOG(vfu_virtio, "%s: vq %u PACKED RING ENABLED\n", dev->name, qid); in virtio_dev_enable_vq()
297 virtio_dev_disable_vq(struct vfu_virtio_dev *dev, uint16_t qid) in virtio_dev_disable_vq() argument
301 SPDK_DEBUGLOG(vfu_virtio, "%s: disable vq %u\n", dev->name, qid); in virtio_dev_disable_vq()
303 vq = &dev->vqs[qid]; in virtio_dev_disable_vq()
309 virtio_dev_unmap_vq(dev, vq); in virtio_dev_disable_vq()
324 virtio_dev_split_get_avail_reqs(struct vfu_virtio_dev *dev, struct vfu_virtio_vq *vq, in virtio_dev_split_get_avail_reqs() argument
377 virtio_vring_desc_to_iov(struct vfu_virtio_dev *dev, struct vring_desc *desc, in virtio_vring_desc_to_iov() argument
380 struct vfu_virtio_endpoint *virtio_endpoint = dev->virtio_endpoint; in virtio_vring_desc_to_iov()
387 virtio_split_vring_get_desc(struct vfu_virtio_dev *dev, struct vfu_virtio_vq *vq, uint16_t desc_idx, in virtio_split_vring_get_desc() argument
396 *desc_table = virtio_vring_desc_to_iov(dev, *desc, sg, iov); in virtio_split_vring_get_desc()
440 struct vfu_virtio_dev *dev = req->dev; in vfu_virtio_dev_put_req() local
441 struct vfu_virtio_endpoint *virtio_endpoint = dev->virtio_endpoint; in vfu_virtio_dev_put_req()
461 struct vfu_virtio_dev *dev = req->dev; in vfu_virtio_finish_req() local
462 struct vfu_virtio_endpoint *virtio_endpoint = dev->virtio_endpoint; in vfu_virtio_finish_req()
467 if (!virtio_guest_has_feature(req->dev, VIRTIO_F_RING_PACKED)) { in vfu_virtio_finish_req()
477 vfu_virtio_dev_free_reqs(struct vfu_virtio_endpoint *virtio_endpoint, struct vfu_virtio_dev *dev) in vfu_virtio_dev_free_reqs() argument
483 for (i = 0; i < dev->num_queues; i++) { in vfu_virtio_dev_free_reqs()
484 vq = &dev->vqs[i]; in vfu_virtio_dev_free_reqs()
494 virtio_dev_split_iovs_setup(struct vfu_virtio_dev *dev, struct vfu_virtio_vq *vq, in virtio_dev_split_iovs_setup() argument
502 rc = virtio_split_vring_get_desc(dev, vq, desc_idx, &desc, in virtio_dev_split_iovs_setup()
513 if (spdk_unlikely(!virtio_vring_desc_to_iov(dev, desc, virtio_req_to_sg_t(req, req->iovcnt), in virtio_dev_split_iovs_setup()
622 vfu_virtio_vq_post_irq(struct vfu_virtio_dev *dev, struct vfu_virtio_vq *vq) in vfu_virtio_vq_post_irq() argument
624 struct vfu_virtio_endpoint *virtio_endpoint = dev->virtio_endpoint; in vfu_virtio_vq_post_irq()
643 dev->cfg.isr = 1; in vfu_virtio_vq_post_irq()
649 vfu_virtio_vq_flush_irq(struct vfu_virtio_dev *dev, struct vfu_virtio_vq *vq) in vfu_virtio_vq_flush_irq() argument
651 struct vfu_virtio_endpoint *virtio_endpoint = dev->virtio_endpoint; in vfu_virtio_vq_flush_irq()
659 if (virtio_queue_event_is_suppressed(dev, vq)) { in vfu_virtio_vq_flush_irq()
665 vfu_virtio_vq_post_irq(dev, vq); in vfu_virtio_vq_flush_irq()
674 vfu_virtio_vq_post_irq(dev, vq); in vfu_virtio_vq_flush_irq()
681 vfu_virtio_dev_process_split_ring(struct vfu_virtio_dev *dev, struct vfu_virtio_vq *vq) in vfu_virtio_dev_process_split_ring() argument
683 struct vfu_virtio_endpoint *virtio_endpoint = dev->virtio_endpoint; in vfu_virtio_dev_process_split_ring()
689 reqs_cnt = virtio_dev_split_get_avail_reqs(dev, vq, reqs_idx, VIRTIO_DEV_VRING_MAX_REQS); in vfu_virtio_dev_process_split_ring()
694 SPDK_DEBUGLOG(vfu_virtio_io, "%s: get %u descriptors\n", dev->name, reqs_cnt); in vfu_virtio_dev_process_split_ring()
705 ret = virtio_dev_split_iovs_setup(dev, vq, req->req_idx, req); in vfu_virtio_dev_process_split_ring()
720 virito_dev_split_ring_get_next_avail_req(struct vfu_virtio_dev *dev, struct vfu_virtio_vq *vq) in virito_dev_split_ring_get_next_avail_req() argument
722 struct vfu_virtio_endpoint *virtio_endpoint = dev->virtio_endpoint; in virito_dev_split_ring_get_next_avail_req()
728 reqs_cnt = virtio_dev_split_get_avail_reqs(dev, vq, reqs_idx, 1); in virito_dev_split_ring_get_next_avail_req()
734 SPDK_DEBUGLOG(vfu_virtio_io, "%s: get 1 descriptors\n", dev->name); in virito_dev_split_ring_get_next_avail_req()
743 ret = virtio_dev_split_iovs_setup(dev, vq, req->req_idx, req); in virito_dev_split_ring_get_next_avail_req()
754 virtio_vring_packed_desc_to_iov(struct vfu_virtio_dev *dev, struct vring_packed_desc *desc, in virtio_vring_packed_desc_to_iov() argument
757 struct vfu_virtio_endpoint *virtio_endpoint = dev->virtio_endpoint; in virtio_vring_packed_desc_to_iov()
764 virtio_dev_packed_iovs_setup(struct vfu_virtio_dev *dev, struct vfu_virtio_vq *vq, in virtio_dev_packed_iovs_setup() argument
772 SPDK_DEBUGLOG(vfu_virtio_io, "%s: last avail idx %u, req %p\n", dev->name, last_avail_idx, req); in virtio_dev_packed_iovs_setup()
778 desc_table = virtio_vring_packed_desc_to_iov(dev, current_desc, req->indirect_sg, in virtio_dev_packed_iovs_setup()
787 dev->name, desc_table, desc_table_size, req); in virtio_dev_packed_iovs_setup()
802 …if (spdk_unlikely(!virtio_vring_packed_desc_to_iov(dev, desc, virtio_req_to_sg_t(req, req->iovcnt), in virtio_dev_packed_iovs_setup()
848 dev->name, req, req->iovcnt, num_descs); in virtio_dev_packed_iovs_setup()
853 vfu_virtio_dev_process_packed_ring(struct vfu_virtio_dev *dev, struct vfu_virtio_vq *vq) in vfu_virtio_dev_process_packed_ring() argument
855 struct vfu_virtio_endpoint *virtio_endpoint = dev->virtio_endpoint; in vfu_virtio_dev_process_packed_ring()
876 ret = virtio_dev_packed_iovs_setup(dev, vq, vq->last_avail_idx, desc, req); in vfu_virtio_dev_process_packed_ring()
891 virito_dev_packed_ring_get_next_avail_req(struct vfu_virtio_dev *dev, struct vfu_virtio_vq *vq) in virito_dev_packed_ring_get_next_avail_req() argument
893 struct vfu_virtio_endpoint *virtio_endpoint = dev->virtio_endpoint; in virito_dev_packed_ring_get_next_avail_req()
903 SPDK_DEBUGLOG(vfu_virtio_io, "%s: get 1 descriptors\n", dev->name); in virito_dev_packed_ring_get_next_avail_req()
911 ret = virtio_dev_packed_iovs_setup(dev, vq, vq->last_avail_idx, desc, req); in virito_dev_packed_ring_get_next_avail_req()
925 struct vfu_virtio_dev *dev = virtio_endpoint->dev; in virtio_vfu_pci_common_cfg() local
936 dev->cfg.host_feature_select = value; in virtio_vfu_pci_common_cfg()
942 dev->cfg.guest_feature_select = value; in virtio_vfu_pci_common_cfg()
948 assert(dev->cfg.guest_feature_select <= 1); in virtio_vfu_pci_common_cfg()
949 if (dev->cfg.guest_feature_select) { in virtio_vfu_pci_common_cfg()
950 dev->cfg.guest_feat_hi = value; in virtio_vfu_pci_common_cfg()
955 dev->cfg.guest_feat_lo = value; in virtio_vfu_pci_common_cfg()
961 ret = virtio_dev_set_features(dev, in virtio_vfu_pci_common_cfg()
962 (((uint64_t)dev->cfg.guest_feat_hi << 32) | dev->cfg.guest_feat_lo)); in virtio_vfu_pci_common_cfg()
968 dev->cfg.msix_config = value; in virtio_vfu_pci_common_cfg()
977 ret = virtio_dev_set_status(dev, value); in virtio_vfu_pci_common_cfg()
984 dev->cfg.queue_select = value; in virtio_vfu_pci_common_cfg()
991 dev->vqs[dev->cfg.queue_select].qsize = value; in virtio_vfu_pci_common_cfg()
997 dev->vqs[dev->cfg.queue_select].vector = value; in virtio_vfu_pci_common_cfg()
1007 ret = virtio_dev_enable_vq(dev, dev->cfg.queue_select); in virtio_vfu_pci_common_cfg()
1012 ret = virtio_dev_disable_vq(dev, dev->cfg.queue_select); in virtio_vfu_pci_common_cfg()
1019 dev->vqs[dev->cfg.queue_select].desc_lo = value; in virtio_vfu_pci_common_cfg()
1021 spdk_vfu_get_endpoint_id(virtio_endpoint->endpoint), dev->cfg.queue_select, value); in virtio_vfu_pci_common_cfg()
1024 dev->vqs[dev->cfg.queue_select].desc_hi = value; in virtio_vfu_pci_common_cfg()
1026 spdk_vfu_get_endpoint_id(virtio_endpoint->endpoint), dev->cfg.queue_select, value); in virtio_vfu_pci_common_cfg()
1029 dev->vqs[dev->cfg.queue_select].avail_lo = value; in virtio_vfu_pci_common_cfg()
1031 spdk_vfu_get_endpoint_id(virtio_endpoint->endpoint), dev->cfg.queue_select, value); in virtio_vfu_pci_common_cfg()
1034 dev->vqs[dev->cfg.queue_select].avail_hi = value; in virtio_vfu_pci_common_cfg()
1036 spdk_vfu_get_endpoint_id(virtio_endpoint->endpoint), dev->cfg.queue_select, value); in virtio_vfu_pci_common_cfg()
1039 dev->vqs[dev->cfg.queue_select].used_lo = value; in virtio_vfu_pci_common_cfg()
1041 spdk_vfu_get_endpoint_id(virtio_endpoint->endpoint), dev->cfg.queue_select, value); in virtio_vfu_pci_common_cfg()
1044 dev->vqs[dev->cfg.queue_select].used_hi = value; in virtio_vfu_pci_common_cfg()
1046 spdk_vfu_get_endpoint_id(virtio_endpoint->endpoint), dev->cfg.queue_select, value); in virtio_vfu_pci_common_cfg()
1058 value = dev->cfg.host_feature_select; in virtio_vfu_pci_common_cfg()
1064 assert(dev->cfg.host_feature_select <= 1); in virtio_vfu_pci_common_cfg()
1065 if (dev->cfg.host_feature_select) { in virtio_vfu_pci_common_cfg()
1066 value = dev->host_features >> 32; in virtio_vfu_pci_common_cfg()
1071 value = dev->host_features; in virtio_vfu_pci_common_cfg()
1078 value = dev->cfg.guest_feature_select; in virtio_vfu_pci_common_cfg()
1084 assert(dev->cfg.guest_feature_select <= 1); in virtio_vfu_pci_common_cfg()
1085 if (dev->cfg.guest_feature_select) { in virtio_vfu_pci_common_cfg()
1086 value = dev->cfg.guest_feat_hi; in virtio_vfu_pci_common_cfg()
1091 value = dev->cfg.guest_feat_lo; in virtio_vfu_pci_common_cfg()
1098 value = dev->cfg.msix_config; in virtio_vfu_pci_common_cfg()
1104 value = dev->num_queues; in virtio_vfu_pci_common_cfg()
1110 value = dev->cfg.device_status; in virtio_vfu_pci_common_cfg()
1116 value = dev->cfg.config_generation; in virtio_vfu_pci_common_cfg()
1122 value = dev->cfg.queue_select; in virtio_vfu_pci_common_cfg()
1128 value = dev->cfg.queue_select; in virtio_vfu_pci_common_cfg()
1134 value = dev->vqs[dev->cfg.queue_select].qsize; in virtio_vfu_pci_common_cfg()
1137 dev->cfg.queue_select, value); in virtio_vfu_pci_common_cfg()
1140 value = dev->vqs[dev->cfg.queue_select].vector; in virtio_vfu_pci_common_cfg()
1143 dev->cfg.queue_select, value); in virtio_vfu_pci_common_cfg()
1146 value = dev->vqs[dev->cfg.queue_select].enabled; in virtio_vfu_pci_common_cfg()
1148 spdk_vfu_get_endpoint_id(virtio_endpoint->endpoint), dev->cfg.queue_select, value); in virtio_vfu_pci_common_cfg()
1151 value = dev->vqs[dev->cfg.queue_select].desc_lo; in virtio_vfu_pci_common_cfg()
1153 spdk_vfu_get_endpoint_id(virtio_endpoint->endpoint), dev->cfg.queue_select, value); in virtio_vfu_pci_common_cfg()
1156 value = dev->vqs[dev->cfg.queue_select].desc_hi; in virtio_vfu_pci_common_cfg()
1158 spdk_vfu_get_endpoint_id(virtio_endpoint->endpoint), dev->cfg.queue_select, value); in virtio_vfu_pci_common_cfg()
1161 value = dev->vqs[dev->cfg.queue_select].avail_lo; in virtio_vfu_pci_common_cfg()
1163 spdk_vfu_get_endpoint_id(virtio_endpoint->endpoint), dev->cfg.queue_select, value); in virtio_vfu_pci_common_cfg()
1166 value = dev->vqs[dev->cfg.queue_select].avail_hi; in virtio_vfu_pci_common_cfg()
1168 spdk_vfu_get_endpoint_id(virtio_endpoint->endpoint), dev->cfg.queue_select, value); in virtio_vfu_pci_common_cfg()
1171 value = dev->vqs[dev->cfg.queue_select].used_lo; in virtio_vfu_pci_common_cfg()
1173 spdk_vfu_get_endpoint_id(virtio_endpoint->endpoint), dev->cfg.queue_select, value); in virtio_vfu_pci_common_cfg()
1176 value = dev->vqs[dev->cfg.queue_select].used_hi; in virtio_vfu_pci_common_cfg()
1178 spdk_vfu_get_endpoint_id(virtio_endpoint->endpoint), dev->cfg.queue_select, value); in virtio_vfu_pci_common_cfg()
1235 *isr = virtio_endpoint->dev->cfg.isr; in virtio_vfu_pci_isr()
1236 virtio_endpoint->dev->cfg.isr = 0; in virtio_vfu_pci_isr()
1289 struct vfu_virtio_dev *dev = virtio_endpoint->dev; in vfu_virtio_post_memory_add() local
1292 if (!dev) { in vfu_virtio_post_memory_add()
1296 for (i = 0; i < dev->num_queues; i++) { in vfu_virtio_post_memory_add()
1298 virtio_dev_map_vq(dev, &dev->vqs[i]); in vfu_virtio_post_memory_add()
1309 if (virtio_endpoint->dev != NULL) { in vfu_virtio_pre_memory_remove()
1310 vfu_virtio_dev_unmap_vqs(virtio_endpoint->dev, map_start, map_end); in vfu_virtio_pre_memory_remove()
1321 if (virtio_endpoint->dev) { in vfu_virtio_pci_reset_cb()
1322 vfu_virtio_dev_stop(virtio_endpoint->dev); in vfu_virtio_pci_reset_cb()
1323 vfu_virtio_dev_reset(virtio_endpoint->dev); in vfu_virtio_pci_reset_cb()
1360 vfu_virtio_dev_start(struct vfu_virtio_dev *dev) in vfu_virtio_dev_start() argument
1362 struct vfu_virtio_endpoint *virtio_endpoint = dev->virtio_endpoint; in vfu_virtio_dev_start()
1365 SPDK_DEBUGLOG(vfu_virtio, "start %s\n", dev->name); in vfu_virtio_dev_start()
1367 if (virtio_dev_is_started(dev)) { in vfu_virtio_dev_start()
1368 SPDK_ERRLOG("Device %s is already started\n", dev->name); in vfu_virtio_dev_start()
1377 SPDK_DEBUGLOG(vfu_virtio, "%s is started with ret %d\n", dev->name, ret); in vfu_virtio_dev_start()
1383 vfu_virtio_dev_stop(struct vfu_virtio_dev *dev) in vfu_virtio_dev_stop() argument
1385 struct vfu_virtio_endpoint *virtio_endpoint = dev->virtio_endpoint; in vfu_virtio_dev_stop()
1388 SPDK_DEBUGLOG(vfu_virtio, "stop %s\n", dev->name); in vfu_virtio_dev_stop()
1390 if (!virtio_dev_is_started(dev)) { in vfu_virtio_dev_stop()
1391 SPDK_DEBUGLOG(vfu_virtio, "%s isn't started\n", dev->name); in vfu_virtio_dev_stop()
1401 vfu_virtio_dev_unmap_vqs(dev, NULL, NULL); in vfu_virtio_dev_stop()
1410 struct vfu_virtio_dev *dev = virtio_endpoint->dev; in vfu_virtio_detach_device() local
1412 if (virtio_endpoint->dev == NULL) { in vfu_virtio_detach_device()
1416 SPDK_DEBUGLOG(vfu_virtio, "detach device %s\n", dev->name); in vfu_virtio_detach_device()
1418 vfu_virtio_dev_stop(dev); in vfu_virtio_detach_device()
1419 vfu_virtio_dev_free_reqs(virtio_endpoint, dev); in vfu_virtio_detach_device()
1420 virtio_endpoint->dev = NULL; in vfu_virtio_detach_device()
1421 free(dev); in vfu_virtio_detach_device()
1431 struct vfu_virtio_dev *dev; in vfu_virtio_attach_device() local
1437 dev = calloc(1, sizeof(*dev) + virtio_endpoint->num_queues * 3 * dma_sg_size()); in vfu_virtio_attach_device()
1438 if (dev == NULL) { in vfu_virtio_attach_device()
1442 dev->num_queues = virtio_endpoint->num_queues; in vfu_virtio_attach_device()
1443 for (i = 0; i < dev->num_queues; i++) { in vfu_virtio_attach_device()
1444 vq = &dev->vqs[i]; in vfu_virtio_attach_device()
1447 vq->avail.sg = (dma_sg_t *)(dev->sg + i * dma_sg_size() * 3); in vfu_virtio_attach_device()
1461 req->dev = dev; in vfu_virtio_attach_device()
1470 dev->host_features = supported_features; in vfu_virtio_attach_device()
1472 snprintf(dev->name, SPDK_VFU_MAX_NAME_LEN, "%s", in vfu_virtio_attach_device()
1474 virtio_endpoint->dev = dev; in vfu_virtio_attach_device()
1475 dev->virtio_endpoint = virtio_endpoint; in vfu_virtio_attach_device()
1480 vfu_virtio_dev_free_reqs(virtio_endpoint, dev); in vfu_virtio_attach_device()