svn commit: r277161 - stable/9/contrib/ofed/libmlx4/src
Hans Petter Selasky
hselasky at FreeBSD.org
Wed Jan 14 05:32:18 UTC 2015
Author: hselasky
Date: Wed Jan 14 05:32:16 2015
New Revision: 277161
URL: https://svnweb.freebsd.org/changeset/base/277161
Log:
MFC r276981:
Fix support for ConnectX2 hardware.
Sponsored by: Mellanox Technologies
Modified:
stable/9/contrib/ofed/libmlx4/src/mlx4-abi.h
stable/9/contrib/ofed/libmlx4/src/mlx4.c
stable/9/contrib/ofed/libmlx4/src/mlx4.h
Directory Properties:
stable/9/contrib/ (props changed)
Modified: stable/9/contrib/ofed/libmlx4/src/mlx4-abi.h
==============================================================================
--- stable/9/contrib/ofed/libmlx4/src/mlx4-abi.h Wed Jan 14 05:29:35 2015 (r277160)
+++ stable/9/contrib/ofed/libmlx4/src/mlx4-abi.h Wed Jan 14 05:32:16 2015 (r277161)
@@ -38,6 +38,13 @@
#define MLX4_UVERBS_MIN_ABI_VERSION 2
#define MLX4_UVERBS_MAX_ABI_VERSION 4
+struct mlx4_alloc_ucontext_resp_v3 {
+ struct ibv_get_context_resp ibv_resp;
+ __u32 qp_tab_size;
+ __u16 bf_reg_size;
+ __u16 bf_regs_per_page;
+};
+
struct mlx4_alloc_ucontext_resp {
struct ibv_get_context_resp ibv_resp;
__u32 dev_caps;
Modified: stable/9/contrib/ofed/libmlx4/src/mlx4.c
==============================================================================
--- stable/9/contrib/ofed/libmlx4/src/mlx4.c Wed Jan 14 05:29:35 2015 (r277160)
+++ stable/9/contrib/ofed/libmlx4/src/mlx4.c Wed Jan 14 05:32:16 2015 (r277161)
@@ -142,8 +142,10 @@ static struct ibv_context *mlx4_alloc_co
struct mlx4_context *context;
struct ibv_get_context cmd;
struct mlx4_alloc_ucontext_resp resp;
+ struct mlx4_alloc_ucontext_resp_v3 resp_v3;
int i;
struct ibv_device_attr dev_attrs;
+ unsigned int bf_reg_size;
context = calloc(1, sizeof *context);
if (!context)
@@ -151,11 +153,26 @@ static struct ibv_context *mlx4_alloc_co
context->ibv_ctx.cmd_fd = cmd_fd;
- if (ibv_cmd_get_context(&context->ibv_ctx, &cmd, sizeof cmd,
- &resp.ibv_resp, sizeof resp))
- goto err_free;
+ if (to_mdev(ibdev)->driver_abi_ver > 3) {
+ if (ibv_cmd_get_context(&context->ibv_ctx, &cmd, sizeof cmd,
+ &resp.ibv_resp, sizeof resp))
+ goto err_free;
+
+ context->num_qps = resp.qp_tab_size;
+ context->num_xrc_srqs = resp.qp_tab_size;
+ bf_reg_size = resp.bf_reg_size;
+ context->cqe_size = resp.cqe_size;
+ } else {
+ if (ibv_cmd_get_context(&context->ibv_ctx, &cmd, sizeof cmd,
+ &resp_v3.ibv_resp, sizeof resp_v3))
+ goto err_free;
+
+ context->num_qps = resp_v3.qp_tab_size;
+ context->num_xrc_srqs = resp_v3.qp_tab_size;
+ bf_reg_size = resp_v3.bf_reg_size;
+ context->cqe_size = 32;
+ }
- context->num_qps = resp.qp_tab_size;
context->qp_table_shift = ffs(context->num_qps) - 1 - MLX4_QP_TABLE_BITS;
context->qp_table_mask = (1 << context->qp_table_shift) - 1;
@@ -163,7 +180,6 @@ static struct ibv_context *mlx4_alloc_co
for (i = 0; i < MLX4_QP_TABLE_SIZE; ++i)
context->qp_table[i].refcnt = 0;
- context->num_xrc_srqs = resp.qp_tab_size;
context->xrc_srq_table_shift = ffs(context->num_xrc_srqs) - 1
- MLX4_XRC_SRQ_TABLE_BITS;
context->xrc_srq_table_mask = (1 << context->xrc_srq_table_shift) - 1;
@@ -182,7 +198,7 @@ static struct ibv_context *mlx4_alloc_co
if (context->uar == MAP_FAILED)
goto err_free;
- if (resp.bf_reg_size) {
+ if (bf_reg_size) {
context->bf_page = mmap(NULL, to_mdev(ibdev)->page_size,
PROT_WRITE, MAP_SHARED, cmd_fd,
to_mdev(ibdev)->page_size);
@@ -192,7 +208,7 @@ static struct ibv_context *mlx4_alloc_co
context->bf_page = NULL;
context->bf_buf_size = 0;
} else {
- context->bf_buf_size = resp.bf_reg_size / 2;
+ context->bf_buf_size = bf_reg_size / 2;
context->bf_offset = 0;
pthread_spin_init(&context->bf_lock, PTHREAD_PROCESS_PRIVATE);
}
@@ -201,7 +217,6 @@ static struct ibv_context *mlx4_alloc_co
context->bf_buf_size = 0;
}
- context->cqe_size = resp.cqe_size;
pthread_spin_init(&context->uar_lock, PTHREAD_PROCESS_PRIVATE);
context->ibv_ctx.ops = mlx4_ctx_ops;
@@ -294,6 +309,7 @@ found:
dev->ibv_dev.ops = mlx4_dev_ops;
dev->page_size = sysconf(_SC_PAGESIZE);
+ dev->driver_abi_ver = abi_version;
return &dev->ibv_dev;
}
Modified: stable/9/contrib/ofed/libmlx4/src/mlx4.h
==============================================================================
--- stable/9/contrib/ofed/libmlx4/src/mlx4.h Wed Jan 14 05:29:35 2015 (r277160)
+++ stable/9/contrib/ofed/libmlx4/src/mlx4.h Wed Jan 14 05:32:16 2015 (r277161)
@@ -162,6 +162,7 @@ enum {
struct mlx4_device {
struct ibv_device ibv_dev;
int page_size;
+ int driver_abi_ver;
};
struct mlx4_db_page;
More information about the svn-src-stable-9
mailing list