Commit 0a1405da authored by Sean Hefty's avatar Sean Hefty Committed by Roland Dreier

IB/mlx4: Add support for XRC QPs

Support the creation of XRC INI and TGT QPs.  To handle the case where
a CQ or PD is not provided, we allocate them internally with the xrcd.
Signed-off-by: default avatarSean Hefty <sean.hefty@intel.com>
Signed-off-by: default avatarRoland Dreier <roland@purestorage.com>
parent 18abd5ea
...@@ -128,6 +128,8 @@ static int mlx4_ib_query_device(struct ib_device *ibdev, ...@@ -128,6 +128,8 @@ static int mlx4_ib_query_device(struct ib_device *ibdev,
(dev->dev->caps.bmme_flags & MLX4_BMME_FLAG_REMOTE_INV) && (dev->dev->caps.bmme_flags & MLX4_BMME_FLAG_REMOTE_INV) &&
(dev->dev->caps.bmme_flags & MLX4_BMME_FLAG_FAST_REG_WR)) (dev->dev->caps.bmme_flags & MLX4_BMME_FLAG_FAST_REG_WR))
props->device_cap_flags |= IB_DEVICE_MEM_MGT_EXTENSIONS; props->device_cap_flags |= IB_DEVICE_MEM_MGT_EXTENSIONS;
if (dev->dev->caps.flags & MLX4_DEV_CAP_FLAG_XRC)
props->device_cap_flags |= IB_DEVICE_XRC;
props->vendor_id = be32_to_cpup((__be32 *) (out_mad->data + 36)) & props->vendor_id = be32_to_cpup((__be32 *) (out_mad->data + 36)) &
0xffffff; 0xffffff;
......
...@@ -145,6 +145,7 @@ struct mlx4_ib_qp { ...@@ -145,6 +145,7 @@ struct mlx4_ib_qp {
struct mlx4_mtt mtt; struct mlx4_mtt mtt;
int buf_size; int buf_size;
struct mutex mutex; struct mutex mutex;
u16 xrcdn;
u32 flags; u32 flags;
u8 port; u8 port;
u8 alt_port; u8 alt_port;
......
This diff is collapsed.
...@@ -280,6 +280,9 @@ int mlx4_init_qp_table(struct mlx4_dev *dev) ...@@ -280,6 +280,9 @@ int mlx4_init_qp_table(struct mlx4_dev *dev)
* We reserve 2 extra QPs per port for the special QPs. The * We reserve 2 extra QPs per port for the special QPs. The
* block of special QPs must be aligned to a multiple of 8, so * block of special QPs must be aligned to a multiple of 8, so
* round up. * round up.
*
* We also reserve the MSB of the 24-bit QP number to indicate
* that a QP is an XRC QP.
*/ */
dev->caps.sqp_start = dev->caps.sqp_start =
ALIGN(dev->caps.reserved_qps_cnt[MLX4_QP_REGION_FW], 8); ALIGN(dev->caps.reserved_qps_cnt[MLX4_QP_REGION_FW], 8);
......
...@@ -75,6 +75,7 @@ enum { ...@@ -75,6 +75,7 @@ enum {
MLX4_QP_ST_UC = 0x1, MLX4_QP_ST_UC = 0x1,
MLX4_QP_ST_RD = 0x2, MLX4_QP_ST_RD = 0x2,
MLX4_QP_ST_UD = 0x3, MLX4_QP_ST_UD = 0x3,
MLX4_QP_ST_XRC = 0x6,
MLX4_QP_ST_MLX = 0x7 MLX4_QP_ST_MLX = 0x7
}; };
...@@ -137,7 +138,7 @@ struct mlx4_qp_context { ...@@ -137,7 +138,7 @@ struct mlx4_qp_context {
__be32 ssn; __be32 ssn;
__be32 params2; __be32 params2;
__be32 rnr_nextrecvpsn; __be32 rnr_nextrecvpsn;
__be32 srcd; __be32 xrcd;
__be32 cqn_recv; __be32 cqn_recv;
__be64 db_rec_addr; __be64 db_rec_addr;
__be32 qkey; __be32 qkey;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment