From: Rich Lane Date: Fri, 1 Jul 2016 16:31:12 +0000 (-0700) Subject: net/vhost: fix queue state not reset on destroy X-Git-Tag: spdx-start~6219 X-Git-Url: http://git.droids-corp.org/?a=commitdiff_plain;h=f4e4b1f1f85e0eed4c3b2b7e40e7e797e618f368;p=dpdk.git net/vhost: fix queue state not reset on destroy Fixes a bug where rte_eth_vhost_get_queue_event would not return enabled queues after a guest application restart. Fixes: ee584e9710b9 ("vhost: add driver on top of the library") Signed-off-by: Rich Lane Acked-by: Yuanhan Liu --- diff --git a/drivers/net/vhost/rte_eth_vhost.c b/drivers/net/vhost/rte_eth_vhost.c index 596faea9be..7539cd4992 100644 --- a/drivers/net/vhost/rte_eth_vhost.c +++ b/drivers/net/vhost/rte_eth_vhost.c @@ -303,6 +303,7 @@ destroy_device(int vid) struct internal_list *list; char ifname[PATH_MAX]; unsigned i; + struct rte_vhost_vring_state *state; rte_vhost_get_ifname(vid, ifname, sizeof(ifname)); list = find_internal_resource(ifname); @@ -345,6 +346,15 @@ destroy_device(int vid) vq->vid = -1; } + state = vring_states[eth_dev->data->port_id]; + rte_spinlock_lock(&state->lock); + for (i = 0; i <= state->max_vring; i++) { + state->cur[i] = false; + state->seen[i] = false; + } + state->max_vring = 0; + rte_spinlock_unlock(&state->lock); + RTE_LOG(INFO, PMD, "Connection closed\n"); _rte_eth_dev_callback_process(eth_dev, RTE_ETH_EVENT_INTR_LSC);