}
static void
-update_queuing_status(struct rte_eth_dev *dev)
+update_queuing_status(struct rte_eth_dev *dev, bool wait_queuing)
{
struct pmd_internal *internal = dev->data->dev_private;
struct vhost_queue *vq;
rte_atomic32_set(&vq->allow_queuing, 1);
else
rte_atomic32_set(&vq->allow_queuing, 0);
- while (rte_atomic32_read(&vq->while_queuing))
+ while (wait_queuing && rte_atomic32_read(&vq->while_queuing))
rte_pause();
}
rte_atomic32_set(&vq->allow_queuing, 1);
else
rte_atomic32_set(&vq->allow_queuing, 0);
- while (rte_atomic32_read(&vq->while_queuing))
+ while (wait_queuing && rte_atomic32_read(&vq->while_queuing))
rte_pause();
}
}
vhost_dev_csum_configure(eth_dev);
rte_atomic32_set(&internal->dev_attached, 1);
- update_queuing_status(eth_dev);
+ update_queuing_status(eth_dev, false);
VHOST_LOG(INFO, "Vhost device %d created\n", vid);
internal = eth_dev->data->dev_private;
rte_atomic32_set(&internal->dev_attached, 0);
- update_queuing_status(eth_dev);
+ update_queuing_status(eth_dev, true);
eth_dev->data->dev_link.link_status = RTE_ETH_LINK_DOWN;
state->max_vring = RTE_MAX(vring, state->max_vring);
rte_spinlock_unlock(&state->lock);
- update_queuing_status(eth_dev);
+ update_queuing_status(eth_dev, false);
VHOST_LOG(INFO, "vring%u is %s\n",
vring, enable ? "enabled" : "disabled");
}
rte_atomic32_set(&internal->started, 1);
- update_queuing_status(eth_dev);
+ update_queuing_status(eth_dev, false);
return 0;
}
dev->data->dev_started = 0;
rte_atomic32_set(&internal->started, 0);
- update_queuing_status(dev);
+ update_queuing_status(dev, true);
return 0;
}