vhost: add new ready status flag
This patch adds a new status flag indicating the Virtio device is ready to operate. This is required to be able to call rte_vhost_mtu_get() in the .new_device() callback, as rte_vhost_mtu_get needs that the negotiation is done, but it is too early to rely on running status flag, which is set just after .new_device() returns. Signed-off-by: Maxime Coquelin <maxime.coquelin@redhat.com> Acked-by: Yuanhan Liu <yuanhan.liu@linux.intel.com>
This commit is contained in:
parent
23f1e756ca
commit
4c5d8459d2
@ -46,6 +46,8 @@
|
||||
|
||||
/* Used to indicate that the device is running on a data core */
|
||||
#define VIRTIO_DEV_RUNNING 1
|
||||
/* Used to indicate that the device is ready to operate */
|
||||
#define VIRTIO_DEV_READY 2
|
||||
|
||||
/* Backend value set by guest. */
|
||||
#define VIRTIO_DEV_STOPPED -1
|
||||
|
@ -678,14 +678,18 @@ vhost_user_set_vring_kick(struct virtio_net *dev, struct VhostUserMsg *pmsg)
|
||||
close(vq->kickfd);
|
||||
vq->kickfd = file.fd;
|
||||
|
||||
if (virtio_is_ready(dev) && !(dev->flags & VIRTIO_DEV_RUNNING)) {
|
||||
if (dev->dequeue_zero_copy) {
|
||||
RTE_LOG(INFO, VHOST_CONFIG,
|
||||
"dequeue zero copy is enabled\n");
|
||||
}
|
||||
if (virtio_is_ready(dev)) {
|
||||
dev->flags |= VIRTIO_DEV_READY;
|
||||
|
||||
if (notify_ops->new_device(dev->vid) == 0)
|
||||
dev->flags |= VIRTIO_DEV_RUNNING;
|
||||
if (!(dev->flags & VIRTIO_DEV_RUNNING)) {
|
||||
if (dev->dequeue_zero_copy) {
|
||||
RTE_LOG(INFO, VHOST_CONFIG,
|
||||
"dequeue zero copy is enabled\n");
|
||||
}
|
||||
|
||||
if (notify_ops->new_device(dev->vid) == 0)
|
||||
dev->flags |= VIRTIO_DEV_RUNNING;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -720,6 +724,8 @@ vhost_user_get_vring_base(struct virtio_net *dev,
|
||||
notify_ops->destroy_device(dev->vid);
|
||||
}
|
||||
|
||||
dev->flags &= ~VIRTIO_DEV_READY;
|
||||
|
||||
/* Here we are safe to get the last used index */
|
||||
state->num = vq->last_used_idx;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user