On Mon, Aug 14, 2017 at 02:32:24PM +0300, Matan Azrad wrote:
> The corrupted code didn't unlock the spinlock in xstats
> get and reset functions error flow.
> 
> Hence, if these errors happaned, the device spinlock was
> left locked and many mlx5 device functionalities were blocked.
> 
> The fix unlocks the spinlock in the missed places.
> 
> Fixes: e62bc9e70608 ("net/mlx5: fix extended statistics")
> 
> Signed-off-by: Matan Azrad <ma...@mellanox.com>
> Cc: sta...@dpdk.org
> ---
>  drivers/net/mlx5/mlx5_stats.c | 7 +++++--
>  1 file changed, 5 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/net/mlx5/mlx5_stats.c b/drivers/net/mlx5/mlx5_stats.c
> index 703f48c..33997af 100644
> --- a/drivers/net/mlx5/mlx5_stats.c
> +++ b/drivers/net/mlx5/mlx5_stats.c
> @@ -442,8 +442,10 @@ mlx5_xstats_get(struct rte_eth_dev *dev,
>  
>               priv_lock(priv);
>               stats_n = priv_ethtool_get_stats_n(priv);
> -             if (stats_n < 0)
> +             if (stats_n < 0) {
> +                     priv_unlock(priv);
>                       return -1;
> +             }
>               if (xstats_ctrl->stats_n != stats_n)
>                       priv_xstats_init(priv);
>               ret = priv_xstats_get(priv, stats);
> @@ -468,10 +470,11 @@ mlx5_xstats_reset(struct rte_eth_dev *dev)
>       priv_lock(priv);
>       stats_n = priv_ethtool_get_stats_n(priv);
>       if (stats_n < 0)
> -             return;
> +             goto unlock;
>       if (xstats_ctrl->stats_n != stats_n)
>               priv_xstats_init(priv);
>       priv_xstats_reset(priv);
> +unlock:
>       priv_unlock(priv);
>  }
>  
> -- 
> 2.7.4
> 

Acked-by: Nelio Laranjeiro <nelio.laranje...@6wind.com>

-- 
Nélio Laranjeiro
6WIND

Reply via email to