On Thu, Oct 05, 2017 at 02:49:47PM +0200, Nelio Laranjeiro wrote:
[...]
> +struct mlx5_hrxq*
> +mlx5_priv_hrxq_get(struct priv *priv, uint8_t *rss_key, uint8_t rss_key_len,
> +                uint64_t hash_fields, uint16_t queues[], uint16_t queues_n)
> +{
> +     struct mlx5_hrxq *hrxq;
> +
> +     LIST_FOREACH(hrxq, &priv->hrxqs, next) {
> +             struct mlx5_ind_table_ibv *ind_tbl;
> +
> +             if (hrxq->rss_key_len != rss_key_len)
> +                     continue;
> +             if (memcmp(hrxq->rss_key, rss_key, rss_key_len))
> +                     continue;
> +             if (hrxq->hash_fields != hash_fields)
> +                     continue;
> +             ind_tbl = mlx5_priv_ind_table_ibv_get(priv, queues, queues_n);
> +             if (!ind_tbl)
> +                     continue;
> +             if (ind_tbl != hrxq->ind_table) {
> +                     mlx5_priv_ind_table_ibv_release(priv, ind_tbl);

As one hrxq can have only one ind_tbl, it looks unnecessary to increment refcnt
of ind_tbl. As long as a hrxq exist, its ind_tbl can't be destroyed. So, it's
safe. How about moving up this _release() outside of this if-clause and remove
_release() in _hrxq_release()?

However, it is logically flawless, so
Acked-by: Yongseok Koh <[email protected]>
 
Thanks

Reply via email to