@@ -59,8 +59,9 @@ set(PACKAGE_NAME "RDMA")
# See Documentation/versioning.md
set(PACKAGE_VERSION "22.0")
# When this is changed the values in these files need changing too:
+# debian/control
# debian/libibverbs1.symbols
-set(IBVERBS_PABI_VERSION "21")
+set(IBVERBS_PABI_VERSION "22")
set(IBVERBS_PROVIDER_SUFFIX "-rdmav${IBVERBS_PABI_VERSION}.so")
#-------------------------
@@ -151,7 +151,7 @@ Section: libs
Pre-Depends: ${misc:Pre-Depends}
Depends: adduser, ${misc:Depends}, ${shlibs:Depends}
Recommends: ibverbs-providers
-Breaks: ibverbs-providers (<< 21~)
+Breaks: ibverbs-providers (<< 22~)
Description: Library for direct userspace use of RDMA (InfiniBand/iWARP)
libibverbs is a library that allows userspace processes to use RDMA
"verbs" as described in the InfiniBand Architecture Specification and
@@ -3,7 +3,7 @@ libibverbs.so.1 libibverbs1 #MINVER#
IBVERBS_1.0@IBVERBS_1.0 1.1.6
IBVERBS_1.1@IBVERBS_1.1 1.1.6
IBVERBS_1.5@IBVERBS_1.5 20
- (symver)IBVERBS_PRIVATE_21 21
+ (symver)IBVERBS_PRIVATE_22 22
ibv_ack_async_event@IBVERBS_1.0 1.1.6
ibv_ack_async_event@IBVERBS_1.1 1.1.6
ibv_ack_cq_events@IBVERBS_1.0 1.1.6
@@ -2028,38 +2028,31 @@ int ibv_cmd_destroy_wq(struct ibv_wq *wq)
int ibv_cmd_create_rwq_ind_table(struct ibv_context *context,
struct ibv_rwq_ind_table_init_attr *init_attr,
struct ibv_rwq_ind_table *rwq_ind_table,
- struct ibv_create_rwq_ind_table *cmd,
- size_t cmd_core_size,
- size_t cmd_size,
struct ib_uverbs_ex_create_rwq_ind_table_resp *resp,
- size_t resp_core_size,
size_t resp_size)
{
- int err, i;
- uint32_t required_tbl_size, alloc_tbl_size;
- uint32_t *tbl_start;
- int num_tbl_entries;
+ struct ibv_create_rwq_ind_table *cmd;
+ int err;
+ unsigned int i;
+ unsigned int num_tbl_entries;
+ size_t cmd_size;
if (init_attr->comp_mask >= IBV_CREATE_IND_TABLE_RESERVED)
return EINVAL;
- alloc_tbl_size = cmd_core_size - sizeof(*cmd);
num_tbl_entries = 1 << init_attr->log_ind_tbl_size;
- /* Data must be u64 aligned */
- required_tbl_size = (num_tbl_entries * sizeof(uint32_t)) < sizeof(uint64_t) ?
- sizeof(uint64_t) : (num_tbl_entries * sizeof(uint32_t));
-
- if (alloc_tbl_size < required_tbl_size)
- return EINVAL;
+ /* The entire message must be size aligned to 8 bytes. */
+ cmd_size = sizeof(*cmd) + num_tbl_entries * sizeof(cmd->wq_handles[0]);
+ cmd_size = (cmd_size + 7) / 8 * 8;
+ cmd = alloca(cmd_size);
- tbl_start = (uint32_t *)((uint8_t *)cmd + sizeof(*cmd));
for (i = 0; i < num_tbl_entries; i++)
- tbl_start[i] = init_attr->ind_tbl[i]->handle;
+ cmd->wq_handles[i] = init_attr->ind_tbl[i]->handle;
- IBV_INIT_CMD_RESP_EX_V(cmd, cmd_core_size, cmd_size,
+ IBV_INIT_CMD_RESP_EX_V(cmd, cmd_size, cmd_size,
CREATE_RWQ_IND_TBL, resp,
- resp_core_size, resp_size);
+ sizeof(*resp), resp_size);
cmd->log_ind_tbl_size = init_attr->log_ind_tbl_size;
cmd->comp_mask = 0;
@@ -2069,7 +2062,7 @@ int ibv_cmd_create_rwq_ind_table(struct ibv_context *context,
(void) VALGRIND_MAKE_MEM_DEFINED(resp, resp_size);
- if (resp->response_length < resp_core_size)
+ if (resp->response_length < sizeof(*resp))
return EINVAL;
rwq_ind_table->ind_tbl_handle = resp->ind_tbl_handle;
@@ -562,11 +562,7 @@ int ibv_cmd_destroy_wq(struct ibv_wq *wq);
int ibv_cmd_create_rwq_ind_table(struct ibv_context *context,
struct ibv_rwq_ind_table_init_attr *init_attr,
struct ibv_rwq_ind_table *rwq_ind_table,
- struct ibv_create_rwq_ind_table *cmd,
- size_t cmd_core_size,
- size_t cmd_size,
struct ib_uverbs_ex_create_rwq_ind_table_resp *resp,
- size_t resp_core_size,
size_t resp_size);
int ibv_cmd_destroy_rwq_ind_table(struct ibv_rwq_ind_table *rwq_ind_table);
int ibv_cmd_create_counters(struct ibv_context *context,
@@ -1613,42 +1613,23 @@ int mlx4_destroy_wq(struct ibv_wq *ibwq)
struct ibv_rwq_ind_table *mlx4_create_rwq_ind_table(struct ibv_context *context,
struct ibv_rwq_ind_table_init_attr *init_attr)
{
- struct ibv_create_rwq_ind_table *cmd;
struct ib_uverbs_ex_create_rwq_ind_table_resp resp = {};
struct ibv_rwq_ind_table *ind_table;
- uint32_t required_tbl_size;
- unsigned int num_tbl_entries;
- int cmd_size;
int err;
- num_tbl_entries = 1 << init_attr->log_ind_tbl_size;
- /* Data must be u64 aligned */
- required_tbl_size =
- (num_tbl_entries * sizeof(uint32_t)) < sizeof(uint64_t) ?
- sizeof(uint64_t) : (num_tbl_entries * sizeof(uint32_t));
-
- cmd_size = required_tbl_size + sizeof(*cmd);
- cmd = calloc(1, cmd_size);
- if (!cmd)
- return NULL;
-
ind_table = calloc(1, sizeof(*ind_table));
if (!ind_table)
- goto free_cmd;
+ return NULL;
- err = ibv_cmd_create_rwq_ind_table(context, init_attr, ind_table, cmd,
- cmd_size, cmd_size, &resp,
- sizeof(resp), sizeof(resp));
+ err = ibv_cmd_create_rwq_ind_table(context, init_attr, ind_table, &resp,
+ sizeof(resp));
if (err)
goto err;
- free(cmd);
return ind_table;
err:
free(ind_table);
-free_cmd:
- free(cmd);
return NULL;
}
@@ -3258,42 +3258,24 @@ int mlx5_destroy_flow(struct ibv_flow *flow_id)
struct ibv_rwq_ind_table *mlx5_create_rwq_ind_table(struct ibv_context *context,
struct ibv_rwq_ind_table_init_attr *init_attr)
{
- struct ibv_create_rwq_ind_table *cmd;
struct mlx5_create_rwq_ind_table_resp resp;
struct ibv_rwq_ind_table *ind_table;
- uint32_t required_tbl_size;
- int num_tbl_entries;
- int cmd_size;
int err;
- num_tbl_entries = 1 << init_attr->log_ind_tbl_size;
- /* Data must be u64 aligned */
- required_tbl_size = (num_tbl_entries * sizeof(uint32_t)) < sizeof(uint64_t) ?
- sizeof(uint64_t) : (num_tbl_entries * sizeof(uint32_t));
-
- cmd_size = required_tbl_size + sizeof(*cmd);
- cmd = calloc(1, cmd_size);
- if (!cmd)
- return NULL;
-
memset(&resp, 0, sizeof(resp));
ind_table = calloc(1, sizeof(*ind_table));
if (!ind_table)
- goto free_cmd;
+ return NULL;
- err = ibv_cmd_create_rwq_ind_table(context, init_attr, ind_table, cmd,
- cmd_size, cmd_size, &resp.ibv_resp, sizeof(resp.ibv_resp),
- sizeof(resp));
+ err = ibv_cmd_create_rwq_ind_table(context, init_attr, ind_table,
+ &resp.ibv_resp, sizeof(resp));
if (err)
goto err;
- free(cmd);
return ind_table;
err:
free(ind_table);
-free_cmd:
- free(cmd);
return NULL;
}