Lines Matching refs:dev
34 virtio_user_create_queue(struct virtio_user_dev *dev, uint32_t queue_sel) in virtio_user_create_queue() argument
44 file.fd = dev->callfds[queue_sel]; in virtio_user_create_queue()
45 ret = dev->ops->set_vring_call(dev, &file); in virtio_user_create_queue()
47 PMD_INIT_LOG(ERR, "(%s) Failed to create queue %u", dev->path, queue_sel); in virtio_user_create_queue()
55 virtio_user_kick_queue(struct virtio_user_dev *dev, uint32_t queue_sel) in virtio_user_kick_queue() argument
60 struct vring *vring = &dev->vrings[queue_sel]; in virtio_user_kick_queue()
61 struct vring_packed *pq_vring = &dev->packed_vrings[queue_sel]; in virtio_user_kick_queue()
68 if (dev->features & (1ULL << VIRTIO_F_RING_PACKED)) { in virtio_user_kick_queue()
83 ret = dev->ops->set_vring_num(dev, &state); in virtio_user_kick_queue()
89 if (dev->features & (1ULL << VIRTIO_F_RING_PACKED)) in virtio_user_kick_queue()
91 ret = dev->ops->set_vring_base(dev, &state); in virtio_user_kick_queue()
95 ret = dev->ops->set_vring_addr(dev, &addr); in virtio_user_kick_queue()
104 file.fd = dev->kickfds[queue_sel]; in virtio_user_kick_queue()
105 ret = dev->ops->set_vring_kick(dev, &file); in virtio_user_kick_queue()
111 PMD_INIT_LOG(ERR, "(%s) Failed to kick queue %u", dev->path, queue_sel); in virtio_user_kick_queue()
117 virtio_user_queue_setup(struct virtio_user_dev *dev, in virtio_user_queue_setup() argument
122 for (i = 0; i < dev->max_queue_pairs; ++i) { in virtio_user_queue_setup()
124 if (fn(dev, queue_sel) < 0) { in virtio_user_queue_setup()
125 PMD_DRV_LOG(ERR, "(%s) setup rx vq %u failed", dev->path, i); in virtio_user_queue_setup()
129 for (i = 0; i < dev->max_queue_pairs; ++i) { in virtio_user_queue_setup()
131 if (fn(dev, queue_sel) < 0) { in virtio_user_queue_setup()
132 PMD_DRV_LOG(INFO, "(%s) setup tx vq %u failed", dev->path, i); in virtio_user_queue_setup()
141 virtio_user_dev_set_features(struct virtio_user_dev *dev) in virtio_user_dev_set_features() argument
146 pthread_mutex_lock(&dev->mutex); in virtio_user_dev_set_features()
149 if (virtio_user_queue_setup(dev, virtio_user_create_queue) < 0) in virtio_user_dev_set_features()
152 features = dev->features; in virtio_user_dev_set_features()
159 ret = dev->ops->set_features(dev, features); in virtio_user_dev_set_features()
162 PMD_DRV_LOG(INFO, "(%s) set features: 0x%" PRIx64, dev->path, features); in virtio_user_dev_set_features()
164 pthread_mutex_unlock(&dev->mutex); in virtio_user_dev_set_features()
170 virtio_user_start_device(struct virtio_user_dev *dev) in virtio_user_start_device() argument
188 pthread_mutex_lock(&dev->mutex); in virtio_user_start_device()
191 ret = dev->ops->set_memory_table(dev); in virtio_user_start_device()
196 ret = virtio_user_queue_setup(dev, virtio_user_kick_queue); in virtio_user_start_device()
203 ret = dev->ops->enable_qp(dev, 0, 1); in virtio_user_start_device()
207 dev->started = true; in virtio_user_start_device()
209 pthread_mutex_unlock(&dev->mutex); in virtio_user_start_device()
214 pthread_mutex_unlock(&dev->mutex); in virtio_user_start_device()
217 PMD_INIT_LOG(ERR, "(%s) Failed to start device", dev->path); in virtio_user_start_device()
223 int virtio_user_stop_device(struct virtio_user_dev *dev) in virtio_user_stop_device() argument
229 pthread_mutex_lock(&dev->mutex); in virtio_user_stop_device()
230 if (!dev->started) in virtio_user_stop_device()
233 for (i = 0; i < dev->max_queue_pairs; ++i) { in virtio_user_stop_device()
234 ret = dev->ops->enable_qp(dev, i, 0); in virtio_user_stop_device()
240 for (i = 0; i < dev->max_queue_pairs * 2; ++i) { in virtio_user_stop_device()
242 ret = dev->ops->get_vring_base(dev, &state); in virtio_user_stop_device()
244 PMD_DRV_LOG(ERR, "(%s) get_vring_base failed, index=%u", dev->path, i); in virtio_user_stop_device()
249 dev->started = false; in virtio_user_stop_device()
252 pthread_mutex_unlock(&dev->mutex); in virtio_user_stop_device()
256 pthread_mutex_unlock(&dev->mutex); in virtio_user_stop_device()
258 PMD_INIT_LOG(ERR, "(%s) Failed to stop device", dev->path); in virtio_user_stop_device()
264 virtio_user_dev_set_mac(struct virtio_user_dev *dev) in virtio_user_dev_set_mac() argument
268 if (!(dev->device_features & (1ULL << VIRTIO_NET_F_MAC))) in virtio_user_dev_set_mac()
271 if (!dev->ops->set_config) in virtio_user_dev_set_mac()
274 ret = dev->ops->set_config(dev, dev->mac_addr, in virtio_user_dev_set_mac()
278 PMD_DRV_LOG(ERR, "(%s) Failed to set MAC address in device", dev->path); in virtio_user_dev_set_mac()
284 virtio_user_dev_get_mac(struct virtio_user_dev *dev) in virtio_user_dev_get_mac() argument
288 if (!(dev->device_features & (1ULL << VIRTIO_NET_F_MAC))) in virtio_user_dev_get_mac()
291 if (!dev->ops->get_config) in virtio_user_dev_get_mac()
294 ret = dev->ops->get_config(dev, dev->mac_addr, in virtio_user_dev_get_mac()
298 PMD_DRV_LOG(ERR, "(%s) Failed to get MAC address from device", dev->path); in virtio_user_dev_get_mac()
304 virtio_user_dev_init_mac(struct virtio_user_dev *dev, const char *mac) in virtio_user_dev_init_mac() argument
316 memcpy(dev->mac_addr, &cmdline_mac, RTE_ETHER_ADDR_LEN); in virtio_user_dev_init_mac()
317 dev->mac_specified = 1; in virtio_user_dev_init_mac()
320 virtio_user_dev_set_mac(dev); in virtio_user_dev_init_mac()
321 ret = virtio_user_dev_get_mac(dev); in virtio_user_dev_init_mac()
325 if (memcmp(&cmdline_mac, dev->mac_addr, RTE_ETHER_ADDR_LEN)) in virtio_user_dev_init_mac()
326 PMD_DRV_LOG(INFO, "(%s) Device MAC update failed", dev->path); in virtio_user_dev_init_mac()
328 ret = virtio_user_dev_get_mac(dev); in virtio_user_dev_init_mac()
331 dev->path); in virtio_user_dev_init_mac()
335 dev->mac_specified = 1; in virtio_user_dev_init_mac()
339 (struct rte_ether_addr *)dev->mac_addr); in virtio_user_dev_init_mac()
340 PMD_DRV_LOG(INFO, "(%s) MAC %s specified", dev->path, buf); in virtio_user_dev_init_mac()
344 virtio_user_dev_init_notify(struct virtio_user_dev *dev) in virtio_user_dev_init_notify() argument
350 for (i = 0; i < dev->max_queue_pairs * 2; i++) { in virtio_user_dev_init_notify()
357 PMD_DRV_LOG(ERR, "(%s) callfd error, %s", dev->path, strerror(errno)); in virtio_user_dev_init_notify()
363 PMD_DRV_LOG(ERR, "(%s) kickfd error, %s", dev->path, strerror(errno)); in virtio_user_dev_init_notify()
366 dev->callfds[i] = callfd; in virtio_user_dev_init_notify()
367 dev->kickfds[i] = kickfd; in virtio_user_dev_init_notify()
373 if (dev->kickfds[j] >= 0) { in virtio_user_dev_init_notify()
374 close(dev->kickfds[j]); in virtio_user_dev_init_notify()
375 dev->kickfds[j] = -1; in virtio_user_dev_init_notify()
377 if (dev->callfds[j] >= 0) { in virtio_user_dev_init_notify()
378 close(dev->callfds[j]); in virtio_user_dev_init_notify()
379 dev->callfds[j] = -1; in virtio_user_dev_init_notify()
387 virtio_user_dev_uninit_notify(struct virtio_user_dev *dev) in virtio_user_dev_uninit_notify() argument
391 for (i = 0; i < dev->max_queue_pairs * 2; ++i) { in virtio_user_dev_uninit_notify()
392 if (dev->kickfds[i] >= 0) { in virtio_user_dev_uninit_notify()
393 close(dev->kickfds[i]); in virtio_user_dev_uninit_notify()
394 dev->kickfds[i] = -1; in virtio_user_dev_uninit_notify()
396 if (dev->callfds[i] >= 0) { in virtio_user_dev_uninit_notify()
397 close(dev->callfds[i]); in virtio_user_dev_uninit_notify()
398 dev->callfds[i] = -1; in virtio_user_dev_uninit_notify()
404 virtio_user_fill_intr_handle(struct virtio_user_dev *dev) in virtio_user_fill_intr_handle() argument
407 struct rte_eth_dev *eth_dev = &rte_eth_devices[dev->hw.port_id]; in virtio_user_fill_intr_handle()
413 PMD_DRV_LOG(ERR, "(%s) failed to allocate intr_handle", dev->path); in virtio_user_fill_intr_handle()
418 for (i = 0; i < dev->max_queue_pairs; ++i) { in virtio_user_fill_intr_handle()
420 dev->callfds[i])) in virtio_user_fill_intr_handle()
424 if (rte_intr_nb_efd_set(eth_dev->intr_handle, dev->max_queue_pairs)) in virtio_user_fill_intr_handle()
428 dev->max_queue_pairs + 1)) in virtio_user_fill_intr_handle()
438 if (rte_intr_fd_set(eth_dev->intr_handle, dev->ops->get_intr_fd(dev))) in virtio_user_fill_intr_handle()
450 struct virtio_user_dev *dev = arg; in virtio_user_mem_event_cb() local
460 pthread_mutex_lock(&dev->mutex); in virtio_user_mem_event_cb()
462 if (dev->started == false) in virtio_user_mem_event_cb()
466 for (i = 0; i < dev->queue_pairs; i++) { in virtio_user_mem_event_cb()
467 ret = dev->ops->enable_qp(dev, i, 0); in virtio_user_mem_event_cb()
473 ret = dev->ops->set_memory_table(dev); in virtio_user_mem_event_cb()
478 for (i = 0; i < dev->queue_pairs; i++) { in virtio_user_mem_event_cb()
479 ret = dev->ops->enable_qp(dev, i, 1); in virtio_user_mem_event_cb()
485 pthread_mutex_unlock(&dev->mutex); in virtio_user_mem_event_cb()
488 PMD_DRV_LOG(ERR, "(%s) Failed to update memory table", dev->path); in virtio_user_mem_event_cb()
492 virtio_user_dev_setup(struct virtio_user_dev *dev) in virtio_user_dev_setup() argument
494 if (dev->is_server) { in virtio_user_dev_setup()
495 if (dev->backend_type != VIRTIO_USER_BACKEND_VHOST_USER) { in virtio_user_dev_setup()
501 switch (dev->backend_type) { in virtio_user_dev_setup()
503 dev->ops = &virtio_ops_user; in virtio_user_dev_setup()
506 dev->ops = &virtio_ops_kernel; in virtio_user_dev_setup()
509 dev->ops = &virtio_ops_vdpa; in virtio_user_dev_setup()
512 PMD_DRV_LOG(ERR, "(%s) Unknown backend type", dev->path); in virtio_user_dev_setup()
516 if (dev->ops->setup(dev) < 0) { in virtio_user_dev_setup()
517 PMD_INIT_LOG(ERR, "(%s) Failed to setup backend", dev->path); in virtio_user_dev_setup()
521 if (virtio_user_dev_init_notify(dev) < 0) { in virtio_user_dev_setup()
522 PMD_INIT_LOG(ERR, "(%s) Failed to init notifiers", dev->path); in virtio_user_dev_setup()
526 if (virtio_user_fill_intr_handle(dev) < 0) { in virtio_user_dev_setup()
527 PMD_INIT_LOG(ERR, "(%s) Failed to init interrupt handler", dev->path); in virtio_user_dev_setup()
534 virtio_user_dev_uninit_notify(dev); in virtio_user_dev_setup()
536 dev->ops->destroy(dev); in virtio_user_dev_setup()
563 virtio_user_dev_init(struct virtio_user_dev *dev, char *path, int queues, in virtio_user_dev_init() argument
571 pthread_mutex_init(&dev->mutex, NULL); in virtio_user_dev_init()
572 strlcpy(dev->path, path, PATH_MAX); in virtio_user_dev_init()
575 dev->kickfds[i] = -1; in virtio_user_dev_init()
576 dev->callfds[i] = -1; in virtio_user_dev_init()
579 dev->started = 0; in virtio_user_dev_init()
580 dev->max_queue_pairs = queues; in virtio_user_dev_init()
581 dev->queue_pairs = 1; /* mq disabled by default */ in virtio_user_dev_init()
582 dev->queue_size = queue_size; in virtio_user_dev_init()
583 dev->is_server = server; in virtio_user_dev_init()
584 dev->mac_specified = 0; in virtio_user_dev_init()
585 dev->frontend_features = 0; in virtio_user_dev_init()
586 dev->unsupported_features = 0; in virtio_user_dev_init()
587 dev->backend_type = backend_type; in virtio_user_dev_init()
590 dev->ifname = *ifname; in virtio_user_dev_init()
594 if (virtio_user_dev_setup(dev) < 0) { in virtio_user_dev_init()
595 PMD_INIT_LOG(ERR, "(%s) backend set up fails", dev->path); in virtio_user_dev_init()
599 if (dev->ops->set_owner(dev) < 0) { in virtio_user_dev_init()
600 PMD_INIT_LOG(ERR, "(%s) Failed to set backend owner", dev->path); in virtio_user_dev_init()
604 if (dev->ops->get_backend_features(&backend_features) < 0) { in virtio_user_dev_init()
605 PMD_INIT_LOG(ERR, "(%s) Failed to get backend features", dev->path); in virtio_user_dev_init()
609 dev->unsupported_features = ~(VIRTIO_USER_SUPPORTED_FEATURES | backend_features); in virtio_user_dev_init()
611 if (dev->ops->get_features(dev, &dev->device_features) < 0) { in virtio_user_dev_init()
612 PMD_INIT_LOG(ERR, "(%s) Failed to get device features", dev->path); in virtio_user_dev_init()
616 virtio_user_dev_init_mac(dev, mac); in virtio_user_dev_init()
619 dev->unsupported_features |= (1ull << VIRTIO_NET_F_MRG_RXBUF); in virtio_user_dev_init()
622 dev->unsupported_features |= (1ull << VIRTIO_F_IN_ORDER); in virtio_user_dev_init()
625 dev->unsupported_features |= (1ull << VIRTIO_F_RING_PACKED); in virtio_user_dev_init()
627 if (dev->mac_specified) in virtio_user_dev_init()
628 dev->frontend_features |= (1ull << VIRTIO_NET_F_MAC); in virtio_user_dev_init()
630 dev->unsupported_features |= (1ull << VIRTIO_NET_F_MAC); in virtio_user_dev_init()
636 dev->frontend_features |= (1ull << VIRTIO_NET_F_CTRL_VQ); in virtio_user_dev_init()
638 dev->unsupported_features |= (1ull << VIRTIO_NET_F_CTRL_VQ); in virtio_user_dev_init()
640 dev->unsupported_features |= (1ull << VIRTIO_NET_F_CTRL_RX); in virtio_user_dev_init()
641 dev->unsupported_features |= (1ull << VIRTIO_NET_F_CTRL_VLAN); in virtio_user_dev_init()
642 dev->unsupported_features |= in virtio_user_dev_init()
644 dev->unsupported_features |= (1ull << VIRTIO_NET_F_MQ); in virtio_user_dev_init()
645 dev->unsupported_features |= in virtio_user_dev_init()
650 if (dev->backend_type == VIRTIO_USER_BACKEND_VHOST_USER) in virtio_user_dev_init()
651 dev->frontend_features |= (1ull << VIRTIO_NET_F_STATUS); in virtio_user_dev_init()
653 dev->frontend_features &= ~dev->unsupported_features; in virtio_user_dev_init()
654 dev->device_features &= ~dev->unsupported_features; in virtio_user_dev_init()
657 virtio_user_mem_event_cb, dev)) { in virtio_user_dev_init()
660 dev->path); in virtio_user_dev_init()
669 virtio_user_dev_uninit(struct virtio_user_dev *dev) in virtio_user_dev_uninit() argument
671 struct rte_eth_dev *eth_dev = &rte_eth_devices[dev->hw.port_id]; in virtio_user_dev_uninit()
676 virtio_user_stop_device(dev); in virtio_user_dev_uninit()
678 rte_mem_event_callback_unregister(VIRTIO_USER_MEM_EVENT_CLB_NAME, dev); in virtio_user_dev_uninit()
680 virtio_user_dev_uninit_notify(dev); in virtio_user_dev_uninit()
682 free(dev->ifname); in virtio_user_dev_uninit()
684 if (dev->is_server) in virtio_user_dev_uninit()
685 unlink(dev->path); in virtio_user_dev_uninit()
687 dev->ops->destroy(dev); in virtio_user_dev_uninit()
691 virtio_user_handle_mq(struct virtio_user_dev *dev, uint16_t q_pairs) in virtio_user_handle_mq() argument
696 if (q_pairs > dev->max_queue_pairs) { in virtio_user_handle_mq()
698 dev->path, q_pairs, dev->max_queue_pairs); in virtio_user_handle_mq()
703 ret |= dev->ops->enable_qp(dev, i, 1); in virtio_user_handle_mq()
704 for (i = q_pairs; i < dev->max_queue_pairs; ++i) in virtio_user_handle_mq()
705 ret |= dev->ops->enable_qp(dev, i, 0); in virtio_user_handle_mq()
707 dev->queue_pairs = q_pairs; in virtio_user_handle_mq()
713 virtio_user_handle_ctrl_msg(struct virtio_user_dev *dev, struct vring *vring, in virtio_user_handle_ctrl_msg() argument
741 status = virtio_user_handle_mq(dev, queues); in virtio_user_handle_ctrl_msg()
764 virtio_user_handle_ctrl_msg_packed(struct virtio_user_dev *dev, in virtio_user_handle_ctrl_msg_packed() argument
776 if (idx_data >= dev->queue_size) in virtio_user_handle_ctrl_msg_packed()
777 idx_data -= dev->queue_size; in virtio_user_handle_ctrl_msg_packed()
784 if (idx_status >= dev->queue_size) in virtio_user_handle_ctrl_msg_packed()
785 idx_status -= dev->queue_size; in virtio_user_handle_ctrl_msg_packed()
796 status = virtio_user_handle_mq(dev, queues); in virtio_user_handle_ctrl_msg_packed()
815 virtio_user_handle_cq_packed(struct virtio_user_dev *dev, uint16_t queue_idx) in virtio_user_handle_cq_packed() argument
817 struct virtio_user_queue *vq = &dev->packed_queues[queue_idx]; in virtio_user_handle_cq_packed()
818 struct vring_packed *vring = &dev->packed_vrings[queue_idx]; in virtio_user_handle_cq_packed()
828 n_descs = virtio_user_handle_ctrl_msg_packed(dev, vring, in virtio_user_handle_cq_packed()
839 if (vq->used_idx >= dev->queue_size) { in virtio_user_handle_cq_packed()
840 vq->used_idx -= dev->queue_size; in virtio_user_handle_cq_packed()
847 virtio_user_handle_cq(struct virtio_user_dev *dev, uint16_t queue_idx) in virtio_user_handle_cq() argument
852 struct vring *vring = &dev->vrings[queue_idx]; in virtio_user_handle_cq()
861 n_descs = virtio_user_handle_ctrl_msg(dev, vring, desc_idx); in virtio_user_handle_cq()
873 virtio_user_dev_set_status(struct virtio_user_dev *dev, uint8_t status) in virtio_user_dev_set_status() argument
877 pthread_mutex_lock(&dev->mutex); in virtio_user_dev_set_status()
878 dev->status = status; in virtio_user_dev_set_status()
879 ret = dev->ops->set_status(dev, status); in virtio_user_dev_set_status()
881 PMD_INIT_LOG(ERR, "(%s) Failed to set backend status", dev->path); in virtio_user_dev_set_status()
883 pthread_mutex_unlock(&dev->mutex); in virtio_user_dev_set_status()
888 virtio_user_dev_update_status(struct virtio_user_dev *dev) in virtio_user_dev_update_status() argument
893 pthread_mutex_lock(&dev->mutex); in virtio_user_dev_update_status()
895 ret = dev->ops->get_status(dev, &status); in virtio_user_dev_update_status()
897 dev->status = status; in virtio_user_dev_update_status()
906 dev->status, in virtio_user_dev_update_status()
907 (dev->status == VIRTIO_CONFIG_STATUS_RESET), in virtio_user_dev_update_status()
908 !!(dev->status & VIRTIO_CONFIG_STATUS_ACK), in virtio_user_dev_update_status()
909 !!(dev->status & VIRTIO_CONFIG_STATUS_DRIVER), in virtio_user_dev_update_status()
910 !!(dev->status & VIRTIO_CONFIG_STATUS_DRIVER_OK), in virtio_user_dev_update_status()
911 !!(dev->status & VIRTIO_CONFIG_STATUS_FEATURES_OK), in virtio_user_dev_update_status()
912 !!(dev->status & VIRTIO_CONFIG_STATUS_DEV_NEED_RESET), in virtio_user_dev_update_status()
913 !!(dev->status & VIRTIO_CONFIG_STATUS_FAILED)); in virtio_user_dev_update_status()
915 PMD_INIT_LOG(ERR, "(%s) Failed to get backend status", dev->path); in virtio_user_dev_update_status()
918 pthread_mutex_unlock(&dev->mutex); in virtio_user_dev_update_status()
923 virtio_user_dev_update_link_state(struct virtio_user_dev *dev) in virtio_user_dev_update_link_state() argument
925 if (dev->ops->update_link_state) in virtio_user_dev_update_link_state()
926 return dev->ops->update_link_state(dev); in virtio_user_dev_update_link_state()
934 struct virtio_user_dev *dev = eth_dev->data->dev_private; in virtio_user_dev_reset_queues_packed() local
935 struct virtio_hw *hw = &dev->hw; in virtio_user_dev_reset_queues_packed()
969 struct virtio_user_dev *dev = param; in virtio_user_dev_delayed_disconnect_handler() local
970 struct rte_eth_dev *eth_dev = &rte_eth_devices[dev->hw.port_id]; in virtio_user_dev_delayed_disconnect_handler()
983 if (dev->is_server) { in virtio_user_dev_delayed_disconnect_handler()
984 if (dev->ops->server_disconnect) in virtio_user_dev_delayed_disconnect_handler()
985 dev->ops->server_disconnect(dev); in virtio_user_dev_delayed_disconnect_handler()
988 dev->ops->get_intr_fd(dev)); in virtio_user_dev_delayed_disconnect_handler()
1008 struct virtio_user_dev *dev = param; in virtio_user_dev_delayed_intr_reconfig_handler() local
1009 struct rte_eth_dev *eth_dev = &rte_eth_devices[dev->hw.port_id]; in virtio_user_dev_delayed_intr_reconfig_handler()
1019 rte_intr_fd_set(eth_dev->intr_handle, dev->ops->get_intr_fd(dev)); in virtio_user_dev_delayed_intr_reconfig_handler()
1033 virtio_user_dev_server_reconnect(struct virtio_user_dev *dev) in virtio_user_dev_server_reconnect() argument
1036 struct rte_eth_dev *eth_dev = &rte_eth_devices[dev->hw.port_id]; in virtio_user_dev_server_reconnect()
1037 struct virtio_hw *hw = &dev->hw; in virtio_user_dev_server_reconnect()
1039 if (!dev->ops->server_reconnect) { in virtio_user_dev_server_reconnect()
1040 PMD_DRV_LOG(ERR, "(%s) Missing server reconnect callback", dev->path); in virtio_user_dev_server_reconnect()
1044 if (dev->ops->server_reconnect(dev)) { in virtio_user_dev_server_reconnect()
1045 PMD_DRV_LOG(ERR, "(%s) Reconnect callback call failed", dev->path); in virtio_user_dev_server_reconnect()
1049 old_status = dev->status; in virtio_user_dev_server_reconnect()
1057 if (dev->ops->get_features(dev, &dev->device_features) < 0) { in virtio_user_dev_server_reconnect()
1064 dev->device_features &= ~(dev->unsupported_features); in virtio_user_dev_server_reconnect()
1066 dev->features &= (dev->device_features | dev->frontend_features); in virtio_user_dev_server_reconnect()
1080 if (!dev->started) in virtio_user_dev_server_reconnect()
1083 if (dev->queue_pairs > 1) { in virtio_user_dev_server_reconnect()
1084 ret = virtio_user_handle_mq(dev, dev->queue_pairs); in virtio_user_dev_server_reconnect()
1102 (void *)dev); in virtio_user_dev_server_reconnect()