int queue_type;
uint16_t i;
+ if (hw->vqs == NULL)
+ return;
+
for (i = 0; i < nr_vq; i++) {
vq = hw->vqs[i];
if (!vq)
}
rte_free(vq);
+ hw->vqs[i] = NULL;
}
rte_free(hw->vqs);
+ hw->vqs = NULL;
}
static int
if (virtio_negotiate_features(hw, req_features) < 0)
return -1;
- if (eth_dev->device) {
+ if (!hw->virtio_user_dev) {
pci_dev = RTE_DEV_TO_PCI(eth_dev->device);
rte_eth_copy_pci_info(eth_dev, pci_dev);
}
}
}
- /* Initialize Link state */
- virtio_dev_link_update(dev, 0);
-
/*Notify the backend
*Otherwise the tap backend might already stop its queue due to fullness.
*vhost backend will have no chance to be waked up
txvq = dev->data->tx_queues[i];
VIRTQUEUE_DUMP(txvq->vq);
}
+
hw->started = 1;
+ /* Initialize Link state */
+ virtio_dev_link_update(dev, 0);
+
return 0;
}