vhost: export vhost vring info

Signed-off-by: Yuanhan Liu <yuanhan.liu@linux.intel.com>
Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
This commit is contained in:
Yuanhan Liu 2017-04-01 15:22:45 +08:00
parent ca33faf9ef
commit 40ef286f23
4 changed files with 59 additions and 0 deletions

View File

@ -38,5 +38,6 @@ DPDK_17.05 {
rte_vhost_get_mem_table;
rte_vhost_get_mtu;
rte_vhost_get_negotiated_features;
rte_vhost_get_vhost_vring;
} DPDK_16.07;

View File

@ -80,6 +80,17 @@ struct rte_vhost_memory {
struct rte_vhost_mem_region regions[0];
};
struct rte_vhost_vring {
struct vring_desc *desc;
struct vring_avail *avail;
struct vring_used *used;
uint64_t log_guest_addr;
int callfd;
int kickfd;
uint16_t size;
};
/**
* Device and vring operations.
*/
@ -298,4 +309,19 @@ uint16_t rte_vhost_dequeue_burst(int vid, uint16_t queue_id,
*/
int rte_vhost_get_mem_table(int vid, struct rte_vhost_memory **mem);
/**
* Get guest vring info, including the vring address, vring size, etc.
*
* @param vid
* vhost device ID
* @param vring_idx
* vring index
* @param vring
* the structure to hold the requested vring info
* @return
* 0 on success, -1 on failure
*/
int rte_vhost_get_vhost_vring(int vid, uint16_t vring_idx,
struct rte_vhost_vring *vring);
#endif /* _VIRTIO_NET_H_ */

View File

@ -395,6 +395,36 @@ rte_vhost_get_mem_table(int vid, struct rte_vhost_memory **mem)
return 0;
}
int
rte_vhost_get_vhost_vring(int vid, uint16_t vring_idx,
struct rte_vhost_vring *vring)
{
struct virtio_net *dev;
struct vhost_virtqueue *vq;
dev = get_device(vid);
if (!dev)
return -1;
if (vring_idx >= VHOST_MAX_VRING)
return -1;
vq = dev->virtqueue[vring_idx];
if (!vq)
return -1;
vring->desc = vq->desc;
vring->avail = vq->avail;
vring->used = vq->used;
vring->log_guest_addr = vq->log_guest_addr;
vring->callfd = vq->callfd;
vring->kickfd = vq->kickfd;
vring->size = vq->size;
return 0;
}
uint16_t
rte_vhost_avail_entries(int vid, uint16_t queue_id)
{

View File

@ -120,6 +120,8 @@ struct vhost_virtqueue {
#ifndef VIRTIO_NET_F_MQ
#define VIRTIO_NET_F_MQ 22
#endif
#define VHOST_MAX_VRING 0x100
#define VHOST_MAX_QUEUE_PAIRS 0x80
#ifndef VIRTIO_NET_F_MTU