From: Ciara Loftus Date: Tue, 13 Sep 2016 13:47:43 +0000 (+0100) Subject: net/vhost: retrieve vid for a given port X-Git-Tag: spdx-start~5911 X-Git-Url: http://git.droids-corp.org/?a=commitdiff_plain;h=e22ed042882abefb969f4a70cdd1f268b5a67260;p=dpdk.git net/vhost: retrieve vid for a given port In some cases when using the vHost PMD, certain vHost library functions may still need to be accessed. One such example is the rte_vhost_get_queue_num function which returns the number of virtqueues reported by the guest - information which is not exposed by the PMD. This commit introduces a new rte_eth_vhost function that returns the 'vid' associated with a given port id. This allows the PMD user to call vHost library functions which require the 'vid' value. Signed-off-by: Ciara Loftus Acked-by: John McNamara Acked-by: Yuanhan Liu --- diff --git a/drivers/net/vhost/rte_eth_vhost.c b/drivers/net/vhost/rte_eth_vhost.c index 1c41613484..1e80fd2484 100644 --- a/drivers/net/vhost/rte_eth_vhost.c +++ b/drivers/net/vhost/rte_eth_vhost.c @@ -428,6 +428,35 @@ rte_eth_vhost_get_queue_event(uint8_t port_id, return -1; } +int +rte_eth_vhost_get_vid_from_port_id(uint8_t port_id) +{ + struct internal_list *list; + struct rte_eth_dev *eth_dev; + struct vhost_queue *vq; + int vid = -1; + + if (!rte_eth_dev_is_valid_port(port_id)) + return -1; + + pthread_mutex_lock(&internal_list_lock); + + TAILQ_FOREACH(list, &internal_list, next) { + eth_dev = list->eth_dev; + if (eth_dev->data->port_id == port_id) { + vq = eth_dev->data->rx_queues[0]; + if (vq) { + vid = vq->vid; + } + break; + } + } + + pthread_mutex_unlock(&internal_list_lock); + + return vid; +} + static void * vhost_driver_session(void *param __rte_unused) { diff --git a/drivers/net/vhost/rte_eth_vhost.h b/drivers/net/vhost/rte_eth_vhost.h index ff5d877b14..7c98b1ae0f 100644 --- a/drivers/net/vhost/rte_eth_vhost.h +++ b/drivers/net/vhost/rte_eth_vhost.h @@ -102,6 +102,15 @@ struct rte_eth_vhost_queue_event { int rte_eth_vhost_get_queue_event(uint8_t port_id, struct rte_eth_vhost_queue_event *event); +/** + * Get the 'vid' value associated with the specified port. + * + * @return + * - On success, the 'vid' associated with 'port_id'. + * - On failure, a negative value. + */ +int rte_eth_vhost_get_vid_from_port_id(uint8_t port_id); + #ifdef __cplusplus } #endif diff --git a/drivers/net/vhost/rte_pmd_vhost_version.map b/drivers/net/vhost/rte_pmd_vhost_version.map index 65bf3a8cc9..3d44083ffb 100644 --- a/drivers/net/vhost/rte_pmd_vhost_version.map +++ b/drivers/net/vhost/rte_pmd_vhost_version.map @@ -8,3 +8,9 @@ DPDK_16.04 { local: *; }; + +DPDK_16.11 { + global: + + rte_eth_vhost_get_vid_from_port_id; +};