From: Wen Chiu <wc...@brocade.com> Only increment and decrement nb_started_ports on the first and last device start and stop. Otherwise, nb_started_ports can become negative if a device is stopped multiple times.
Fixes: ee584e9710b9 ("vhost: add driver on top of the library") Signed-off-by: Wen Chiu <wc...@brocade.com> Reviewed-by: Chas Williams <ciwil...@brocade.com> --- drivers/net/vhost/rte_eth_vhost.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/drivers/net/vhost/rte_eth_vhost.c b/drivers/net/vhost/rte_eth_vhost.c index 60b0f51..ba559ff 100644 --- a/drivers/net/vhost/rte_eth_vhost.c +++ b/drivers/net/vhost/rte_eth_vhost.c @@ -782,11 +782,11 @@ eth_dev_start(struct rte_eth_dev *dev) internal->flags); if (ret) return ret; - } - /* We need only one message handling thread */ - if (rte_atomic16_add_return(&nb_started_ports, 1) == 1) - ret = vhost_driver_session_start(); + /* We need only one message handling thread */ + if (rte_atomic16_add_return(&nb_started_ports, 1) == 1) + ret = vhost_driver_session_start(); + } return ret; } @@ -796,11 +796,12 @@ eth_dev_stop(struct rte_eth_dev *dev) { struct pmd_internal *internal = dev->data->dev_private; - if (rte_atomic16_cmpset(&internal->once, 1, 0)) + if (rte_atomic16_cmpset(&internal->once, 1, 0)) { rte_vhost_driver_unregister(internal->iface_name); - if (rte_atomic16_sub_return(&nb_started_ports, 1) == 0) - vhost_driver_session_stop(); + if (rte_atomic16_sub_return(&nb_started_ports, 1) == 0) + vhost_driver_session_stop(); + } } static int -- 2.1.4