]> git.openfabrics.org - ~shefty/libibverbs.git/commitdiff
Update for kernel ABI changes
authorRoland Dreier <roland@topspin.com>
Tue, 21 Jun 2005 21:27:34 +0000 (21:27 +0000)
committerRoland Dreier <rolandd@cisco.com>
Thu, 9 Nov 2006 19:35:56 +0000 (11:35 -0800)
Update userspace verbs libraries to match kernel ABI changes (required
for using "struct ib_udata *" interface).

Signed-off-by: Roland Dreier <roland@topspin.com>
include/infiniband/driver.h
include/infiniband/kern-abi.h
src/cmd.c
src/device.c
src/ibverbs.h

index ed96cdb10f459d869fb1e85486f1a821150eac05..40f660d96440fc9c3c3db556f157b7ec76fd5967 100644 (file)
@@ -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,
index cf76ec8a2a3f3d5590044f5de088f755e1749567..f31423328d31f7ed9c9a60b7c335abd50404fb91 100644 (file)
@@ -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 {
index 14f4c7c0e5393f3b8eb6da7bcd96b491404e2630..35b36e401caa21c96d74a8b2336a68835ad7c809 100644 (file)
--- a/src/cmd.c
+++ b/src/cmd.c
 #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;
index 3b38b856141f5e70663e0160d9e3ba4ff3643560..be16ea83e93c9ff79d6ba0ede0e05ae0ca8e0f1d 100644 (file)
@@ -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;
 
index 0d0fec146069311ef6f268475b4b6b44640440f5..1f754f320749f230ac3950b24d321786273f038d 100644 (file)
@@ -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)