diff options
author | Roland Dreier <roland@topspin.com> | 2005-06-21 21:27:34 +0000 |
---|---|---|
committer | Roland Dreier <rolandd@cisco.com> | 2006-11-09 11:35:56 -0800 |
commit | f05ba1df99c676bd5ba4c50d0e8b85fae76ea8e2 (patch) | |
tree | 7586831e7b060fd80101a617aa25705a4b2c096d | |
parent | 52d61d7989ae1633318d5ac593ac7a58e9108787 (diff) | |
download | libibverbs-f05ba1df99c676bd5ba4c50d0e8b85fae76ea8e2.tar.gz |
Update for kernel ABI changes
Update userspace verbs libraries to match kernel ABI changes (required
for using "struct ib_udata *" interface).
Signed-off-by: Roland Dreier <roland@topspin.com>
-rw-r--r-- | include/infiniband/driver.h | 9 | ||||
-rw-r--r-- | include/infiniband/kern-abi.h | 3 | ||||
-rw-r--r-- | src/cmd.c | 45 | ||||
-rw-r--r-- | src/device.c | 2 | ||||
-rw-r--r-- | src/ibverbs.h | 4 |
5 files changed, 34 insertions, 29 deletions
diff --git a/include/infiniband/driver.h b/include/infiniband/driver.h index ed96cdb..40f660d 100644 --- a/include/infiniband/driver.h +++ b/include/infiniband/driver.h @@ -65,7 +65,8 @@ typedef struct ibv_device *(*ibv_driver_init_func)(struct sysfs_class_device *); extern int ibv_cmd_get_context(int num_comp, struct ibv_context *context, - struct ibv_get_context *cmd, size_t cmd_size); + struct ibv_get_context *cmd, size_t cmd_size, + struct ibv_get_context_resp *resp, size_t resp_size); extern int ibv_cmd_query_device(struct ibv_context *context, struct ibv_device_attr *device_attr, struct ibv_query_device *cmd, size_t cmd_size); @@ -77,7 +78,8 @@ extern int ibv_cmd_query_gid(struct ibv_context *context, uint8_t port_num, extern int ibv_cmd_query_pkey(struct ibv_context *context, uint8_t port_num, int index, uint16_t *pkey); extern int ibv_cmd_alloc_pd(struct ibv_context *context, struct ibv_pd *pd, - struct ibv_alloc_pd *cmd, size_t cmd_size); + struct ibv_alloc_pd *cmd, size_t cmd_size, + struct ibv_alloc_pd_resp *resp, size_t resp_size); extern int ibv_cmd_dealloc_pd(struct ibv_pd *pd); extern int ibv_cmd_reg_mr(struct ibv_pd *pd, void *addr, size_t length, uint64_t hca_va, enum ibv_access_flags access, @@ -86,7 +88,8 @@ extern int ibv_cmd_reg_mr(struct ibv_pd *pd, void *addr, size_t length, extern int ibv_cmd_dereg_mr(struct ibv_mr *mr); extern int ibv_cmd_create_cq(struct ibv_context *context, int cqe, struct ibv_cq *cq, - struct ibv_create_cq *cmd, size_t cmd_size); + struct ibv_create_cq *cmd, size_t cmd_size, + struct ibv_create_cq_resp *resp, size_t resp_size); extern int ibv_cmd_destroy_cq(struct ibv_cq *cq); extern int ibv_cmd_create_qp(struct ibv_pd *pd, diff --git a/include/infiniband/kern-abi.h b/include/infiniband/kern-abi.h index cf76ec8..f314233 100644 --- a/include/infiniband/kern-abi.h +++ b/include/infiniband/kern-abi.h @@ -128,12 +128,13 @@ struct ibv_get_context { __u16 in_words; __u16 out_words; __u64 response; + __u64 cq_fd_tab; __u64 driver_data[0]; }; struct ibv_get_context_resp { __u32 async_fd; - __u32 cq_fd[1]; + __u32 reserved; }; struct ibv_query_device { @@ -44,20 +44,23 @@ #include "ibverbs.h" int ibv_cmd_get_context(int num_comp, struct ibv_context *context, - struct ibv_get_context *cmd, size_t cmd_size) + struct ibv_get_context *cmd, size_t cmd_size, + struct ibv_get_context_resp *resp, size_t resp_size) { - struct ibv_get_context_resp *resp; + uint32_t *cq_fd_tab; int i; - resp = alloca(sizeof *resp + num_comp * sizeof (int)); - IBV_INIT_CMD_RESP(cmd, cmd_size, GET_CONTEXT, resp); + cq_fd_tab = alloca(num_comp * sizeof (uint32_t)); + IBV_INIT_CMD_RESP(cmd, cmd_size, GET_CONTEXT, resp, resp_size); + + cmd->cq_fd_tab = (uintptr_t) cq_fd_tab; if (write(context->cmd_fd, cmd, cmd_size) != cmd_size) return errno; context->async_fd = resp->async_fd; for (i = 0; i < num_comp; ++i) - context->cq_fd[i] = resp->cq_fd[i]; + context->cq_fd[i] = cq_fd_tab[i]; return 0; } @@ -68,7 +71,7 @@ int ibv_cmd_query_device(struct ibv_context *context, { struct ibv_query_device_resp resp; - IBV_INIT_CMD_RESP(cmd, cmd_size, QUERY_DEVICE, &resp); + IBV_INIT_CMD_RESP(cmd, cmd_size, QUERY_DEVICE, &resp, sizeof resp); if (write(context->cmd_fd, cmd, cmd_size) != cmd_size) return errno; @@ -123,7 +126,7 @@ int ibv_cmd_query_port(struct ibv_context *context, uint8_t port_num, { struct ibv_query_port_resp resp; - IBV_INIT_CMD_RESP(cmd, cmd_size, QUERY_PORT, &resp); + IBV_INIT_CMD_RESP(cmd, cmd_size, QUERY_PORT, &resp, sizeof resp); cmd->port_num = port_num; if (write(context->cmd_fd, cmd, cmd_size) != cmd_size) @@ -158,7 +161,7 @@ int ibv_cmd_query_gid(struct ibv_context *context, uint8_t port_num, struct ibv_query_gid cmd; struct ibv_query_gid_resp resp; - IBV_INIT_CMD_RESP(&cmd, sizeof cmd, QUERY_GID, &resp); + IBV_INIT_CMD_RESP(&cmd, sizeof cmd, QUERY_GID, &resp, sizeof resp); cmd.port_num = port_num; cmd.index = index; @@ -176,7 +179,7 @@ int ibv_cmd_query_pkey(struct ibv_context *context, uint8_t port_num, struct ibv_query_pkey cmd; struct ibv_query_pkey_resp resp; - IBV_INIT_CMD_RESP(&cmd, sizeof cmd, QUERY_PKEY, &resp); + IBV_INIT_CMD_RESP(&cmd, sizeof cmd, QUERY_PKEY, &resp, sizeof resp); cmd.port_num = port_num; cmd.index = index; @@ -189,16 +192,15 @@ int ibv_cmd_query_pkey(struct ibv_context *context, uint8_t port_num, } int ibv_cmd_alloc_pd(struct ibv_context *context, struct ibv_pd *pd, - struct ibv_alloc_pd *cmd, size_t cmd_size) + struct ibv_alloc_pd *cmd, size_t cmd_size, + struct ibv_alloc_pd_resp *resp, size_t resp_size) { - struct ibv_alloc_pd_resp resp; - - IBV_INIT_CMD_RESP(cmd, cmd_size, ALLOC_PD, &resp); + IBV_INIT_CMD_RESP(cmd, cmd_size, ALLOC_PD, resp, resp_size); if (write(context->cmd_fd, cmd, cmd_size) != cmd_size) return errno; - pd->handle = resp.pd_handle; + pd->handle = resp->pd_handle; return 0; } @@ -223,7 +225,7 @@ int ibv_cmd_reg_mr(struct ibv_pd *pd, void *addr, size_t length, { struct ibv_reg_mr_resp resp; - IBV_INIT_CMD_RESP(cmd, cmd_size, REG_MR, &resp); + IBV_INIT_CMD_RESP(cmd, cmd_size, REG_MR, &resp, sizeof resp); cmd->start = (uintptr_t) addr; cmd->length = length; @@ -256,19 +258,18 @@ int ibv_cmd_dereg_mr(struct ibv_mr *mr) int ibv_cmd_create_cq(struct ibv_context *context, int cqe, struct ibv_cq *cq, - struct ibv_create_cq *cmd, size_t cmd_size) + struct ibv_create_cq *cmd, size_t cmd_size, + struct ibv_create_cq_resp *resp, size_t resp_size) { - struct ibv_create_cq_resp resp; - - IBV_INIT_CMD_RESP(cmd, cmd_size, CREATE_CQ, &resp); + IBV_INIT_CMD_RESP(cmd, cmd_size, CREATE_CQ, resp, resp_size); cmd->user_handle = (uintptr_t) cq; cmd->cqe = cqe; if (write(context->cmd_fd, cmd, cmd_size) != cmd_size) return errno; - cq->handle = resp.cq_handle; - cq->cqe = resp.cqe; + cq->handle = resp->cq_handle; + cq->cqe = resp->cqe; return 0; } @@ -292,7 +293,7 @@ int ibv_cmd_create_qp(struct ibv_pd *pd, { struct ibv_create_qp_resp resp; - IBV_INIT_CMD_RESP(cmd, cmd_size, CREATE_QP, &resp); + IBV_INIT_CMD_RESP(cmd, cmd_size, CREATE_QP, &resp, sizeof resp); cmd->user_handle = (uintptr_t) qp; cmd->pd_handle = pd->handle; cmd->send_cq_handle = attr->send_cq->handle; diff --git a/src/device.c b/src/device.c index 3b38b85..be16ea8 100644 --- a/src/device.c +++ b/src/device.c @@ -94,7 +94,7 @@ struct ibv_context *ibv_open_device(struct ibv_device *device) if (cmd_fd < 0) return NULL; - IBV_INIT_CMD_RESP(&cmd, sizeof cmd, QUERY_PARAMS, &resp); + IBV_INIT_CMD_RESP(&cmd, sizeof cmd, QUERY_PARAMS, &resp, sizeof resp); if (write(cmd_fd, &cmd, sizeof cmd) != sizeof cmd) goto err; diff --git a/src/ibverbs.h b/src/ibverbs.h index 0d0fec1..1f754f3 100644 --- a/src/ibverbs.h +++ b/src/ibverbs.h @@ -63,11 +63,11 @@ extern int ibv_unlock_range(void *base, size_t size); (cmd)->out_words = 0; \ } while (0) -#define IBV_INIT_CMD_RESP(cmd, size, opcode, out) \ +#define IBV_INIT_CMD_RESP(cmd, size, opcode, out, outsize) \ do { \ (cmd)->command = IB_USER_VERBS_CMD_##opcode; \ (cmd)->in_words = (size) / 4; \ - (cmd)->out_words = sizeof (*(out)) / 4; \ + (cmd)->out_words = (outsize) / 4; \ (cmd)->response = (uintptr_t) (out); \ } while (0) |