diff options
author | Matan Barak <matanb@mellanox.com> | 2015-05-31 09:30:18 +0300 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2015-05-30 23:35:34 -0700 |
commit | 6d90aa5cf17b1149115a002d7582b5d28ee43359 (patch) | |
tree | 8da9b2d17d21f22a089d0ebf1a714b8faacce0d1 | |
parent | de1618034ae5704f9e503a20a1c328a0e60f6b5f (diff) | |
download | linux-6d90aa5cf17b1149115a002d7582b5d28ee43359.tar.gz linux-6d90aa5cf17b1149115a002d7582b5d28ee43359.tar.bz2 linux-6d90aa5cf17b1149115a002d7582b5d28ee43359.zip |
net/mlx4_core: Make sure there are no pending async events when freeing CQ
When freeing a CQ, we need to make sure there are no
asynchronous events (on the ASYNC EQ) that could
relate to this CQ before freeing it.
This is done by introducing synchronize_irq.
Signed-off-by: Matan Barak <matanb@mellanox.com>
Signed-off-by: Ido Shamay <idos@mellanox.com>
Signed-off-by: Or Gerlitz <ogerlitz@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | drivers/net/ethernet/mellanox/mlx4/cq.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/drivers/net/ethernet/mellanox/mlx4/cq.c b/drivers/net/ethernet/mellanox/mlx4/cq.c index 7431cd4d7390..3348e646db70 100644 --- a/drivers/net/ethernet/mellanox/mlx4/cq.c +++ b/drivers/net/ethernet/mellanox/mlx4/cq.c @@ -369,6 +369,9 @@ void mlx4_cq_free(struct mlx4_dev *dev, struct mlx4_cq *cq) mlx4_warn(dev, "HW2SW_CQ failed (%d) for CQN %06x\n", err, cq->cqn); synchronize_irq(priv->eq_table.eq[MLX4_CQ_TO_EQ_VECTOR(cq->vector)].irq); + if (priv->eq_table.eq[MLX4_CQ_TO_EQ_VECTOR(cq->vector)].irq != + priv->eq_table.eq[MLX4_EQ_ASYNC].irq) + synchronize_irq(priv->eq_table.eq[MLX4_EQ_ASYNC].irq); spin_lock_irq(&cq_table->lock); radix_tree_delete(&cq_table->tree, cq->cqn); |