Skip to content

Commit

Permalink
mlx4_core: Implement SRQ object lookup from srqn
Browse files Browse the repository at this point in the history
Expose a new API mlx4_srq_lookup() to retrive a SRQ based on its
number.  This API is needed in the mlx4_ib driver CQ polling logic,
when a work completion is associated with a XRC TGT QP.  Since a
target QP may redirect to more than one XRC SRQ, the srq field in the
QP has no usage and the real XRC SRQ need to be retrived using the
information from the XRCETH IB header which is placed in the HW CQE.

Signed-off-by: Shlomo Pongratz <shlomop@mellanox.com>
Signed-off-by: Or Gerlitz <ogerlitz@mellanox.com>
Signed-off-by: Roland Dreier <roland@purestorage.com>
  • Loading branch information
Shlomo Pongratz authored and Roland Dreier committed Apr 17, 2013
1 parent eec9e29 commit 9f55055
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 0 deletions.
15 changes: 15 additions & 0 deletions drivers/net/ethernet/mellanox/mlx4/srq.c
Original file line number Diff line number Diff line change
Expand Up @@ -298,3 +298,18 @@ void mlx4_cleanup_srq_table(struct mlx4_dev *dev)
return;
mlx4_bitmap_cleanup(&mlx4_priv(dev)->srq_table.bitmap);
}

struct mlx4_srq *mlx4_srq_lookup(struct mlx4_dev *dev, u32 srqn)
{
struct mlx4_srq_table *srq_table = &mlx4_priv(dev)->srq_table;
struct mlx4_srq *srq;
unsigned long flags;

spin_lock_irqsave(&srq_table->lock, flags);
srq = radix_tree_lookup(&srq_table->tree,
srqn & (dev->caps.num_srqs - 1));
spin_unlock_irqrestore(&srq_table->lock, flags);

return srq;
}
EXPORT_SYMBOL_GPL(mlx4_srq_lookup);
2 changes: 2 additions & 0 deletions include/linux/mlx4/srq.h
Original file line number Diff line number Diff line change
Expand Up @@ -39,4 +39,6 @@ struct mlx4_wqe_srq_next_seg {
u32 reserved2[3];
};

struct mlx4_srq *mlx4_srq_lookup(struct mlx4_dev *dev, u32 srqn);

#endif /* MLX4_SRQ_H */

0 comments on commit 9f55055

Please sign in to comment.