mirror of
https://github.com/torvalds/linux.git
synced 2024-12-27 13:22:23 +00:00
mlx4_core: Implement SRQ object lookup from srqn
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>
This commit is contained in:
parent
eec9e29fc5
commit
9f550553a4
@ -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);
|
||||
|
@ -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 */
|
||||
|
Loading…
Reference in New Issue
Block a user