vhost: export queue free entries
The new API rte_vhost_avail_entries() is actually a rename of rte_vring_available_entries(), with the "vring" to "vhost" name change to keep the consistency of other vhost exported APIs. This change could let us avoid the dependency of "virtio_net" struct, to prepare for the ABI refactoring. Signed-off-by: Yuanhan Liu <yuanhan.liu@linux.intel.com> Tested-by: Rich Lane <rich.lane@bigswitch.com> Acked-by: Rich Lane <rich.lane@bigswitch.com>
This commit is contained in:
parent
f6d1bd5365
commit
a67f286a65
@ -161,6 +161,9 @@ API Changes
|
||||
* The function ``rte_eth_dev_info_get`` fill the new fields ``nb_rx_queues``
|
||||
and ``nb_tx_queues`` in the structure ``rte_eth_dev_info``.
|
||||
|
||||
* The vhost function ``rte_vring_available_entries`` is renamed to
|
||||
``rte_vhost_avail_entries``.
|
||||
|
||||
|
||||
ABI Changes
|
||||
-----------
|
||||
|
@ -709,11 +709,11 @@ switch_worker(__rte_unused void *arg)
|
||||
* must be less than virtio queue size
|
||||
*/
|
||||
if (enable_retry && unlikely(rx_count >
|
||||
rte_vring_available_entries(dev, VIRTIO_RXQ))) {
|
||||
rte_vhost_avail_entries(dev->vid, VIRTIO_RXQ))) {
|
||||
for (retry = 0; retry < burst_rx_retry_num;
|
||||
retry++) {
|
||||
rte_delay_us(burst_rx_delay_time);
|
||||
if (rx_count <= rte_vring_available_entries(dev, VIRTIO_RXQ))
|
||||
if (rx_count <= rte_vhost_avail_entries(dev->vid, VIRTIO_RXQ))
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -1055,13 +1055,13 @@ drain_eth_rx(struct vhost_dev *vdev)
|
||||
* to diminish packet loss.
|
||||
*/
|
||||
if (enable_retry &&
|
||||
unlikely(rx_count > rte_vring_available_entries(dev,
|
||||
unlikely(rx_count > rte_vhost_avail_entries(dev->vid,
|
||||
VIRTIO_RXQ))) {
|
||||
uint32_t retry;
|
||||
|
||||
for (retry = 0; retry < burst_rx_retry_num; retry++) {
|
||||
rte_delay_us(burst_rx_delay_time);
|
||||
if (rx_count <= rte_vring_available_entries(dev,
|
||||
if (rx_count <= rte_vhost_avail_entries(dev->vid,
|
||||
VIRTIO_RXQ))
|
||||
break;
|
||||
}
|
||||
|
@ -24,6 +24,7 @@ DPDK_2.1 {
|
||||
DPDK_16.07 {
|
||||
global:
|
||||
|
||||
rte_vhost_avail_entries;
|
||||
rte_vhost_get_ifname;
|
||||
rte_vhost_get_numa_node;
|
||||
rte_vhost_get_queue_num;
|
||||
|
@ -184,17 +184,6 @@ struct virtio_net_device_ops {
|
||||
int (*vring_state_changed)(struct virtio_net *dev, uint16_t queue_id, int enable); /**< triggered when a vring is enabled or disabled */
|
||||
};
|
||||
|
||||
static inline uint16_t __attribute__((always_inline))
|
||||
rte_vring_available_entries(struct virtio_net *dev, uint16_t queue_id)
|
||||
{
|
||||
struct vhost_virtqueue *vq = dev->virtqueue[queue_id];
|
||||
|
||||
if (!vq->enabled)
|
||||
return 0;
|
||||
|
||||
return *(volatile uint16_t *)&vq->avail->idx - vq->last_used_idx_res;
|
||||
}
|
||||
|
||||
/**
|
||||
* Function to convert guest physical addresses to vhost virtual addresses.
|
||||
* This is used to convert guest virtio buffer addresses.
|
||||
@ -284,6 +273,19 @@ uint32_t rte_vhost_get_queue_num(int vid);
|
||||
*/
|
||||
int rte_vhost_get_ifname(int vid, char *buf, size_t len);
|
||||
|
||||
/**
|
||||
* Get how many avail entries are left in the queue
|
||||
*
|
||||
* @param vid
|
||||
* virtio-net device ID
|
||||
* @param queue_id
|
||||
* virtio queue index
|
||||
*
|
||||
* @return
|
||||
* num of avail entires left
|
||||
*/
|
||||
uint16_t rte_vhost_avail_entries(int vid, uint16_t queue_id);
|
||||
|
||||
/**
|
||||
* This function adds buffers to the virtio devices RX virtqueue. Buffers can
|
||||
* be received from the physical port or from another virtual device. A packet
|
||||
|
@ -783,6 +783,23 @@ rte_vhost_get_ifname(int vid, char *buf, size_t len)
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint16_t
|
||||
rte_vhost_avail_entries(int vid, uint16_t queue_id)
|
||||
{
|
||||
struct virtio_net *dev;
|
||||
struct vhost_virtqueue *vq;
|
||||
|
||||
dev = get_device(vid);
|
||||
if (!dev)
|
||||
return 0;
|
||||
|
||||
vq = dev->virtqueue[queue_id];
|
||||
if (!vq->enabled)
|
||||
return 0;
|
||||
|
||||
return *(volatile uint16_t *)&vq->avail->idx - vq->last_used_idx_res;
|
||||
}
|
||||
|
||||
int rte_vhost_enable_guest_notification(struct virtio_net *dev,
|
||||
uint16_t queue_id, int enable)
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user