Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

authored by

Shlomo Pongratz and committed by
Roland Dreier
9f550553 eec9e29f

+17
+15
drivers/net/ethernet/mellanox/mlx4/srq.c
··· 298 298 return; 299 299 mlx4_bitmap_cleanup(&mlx4_priv(dev)->srq_table.bitmap); 300 300 } 301 + 302 + struct mlx4_srq *mlx4_srq_lookup(struct mlx4_dev *dev, u32 srqn) 303 + { 304 + struct mlx4_srq_table *srq_table = &mlx4_priv(dev)->srq_table; 305 + struct mlx4_srq *srq; 306 + unsigned long flags; 307 + 308 + spin_lock_irqsave(&srq_table->lock, flags); 309 + srq = radix_tree_lookup(&srq_table->tree, 310 + srqn & (dev->caps.num_srqs - 1)); 311 + spin_unlock_irqrestore(&srq_table->lock, flags); 312 + 313 + return srq; 314 + } 315 + EXPORT_SYMBOL_GPL(mlx4_srq_lookup);
+2
include/linux/mlx4/srq.h
··· 39 39 u32 reserved2[3]; 40 40 }; 41 41 42 + struct mlx4_srq *mlx4_srq_lookup(struct mlx4_dev *dev, u32 srqn); 43 + 42 44 #endif /* MLX4_SRQ_H */