--- a/components/open-fabrics/libibverbs/patches/base.patch Wed Aug 28 22:08:11 2013 -0700
+++ b/components/open-fabrics/libibverbs/patches/base.patch Fri Sep 13 13:54:01 2013 -0400
@@ -1,6 +1,3 @@
-#
-# Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
-#
diff -r -u /tmp/846623/libibverbs-1.1.4/Makefile.am libibverbs-1.1.4/Makefile.am
--- /tmp/846623/libibverbs-1.1.4/Makefile.am Thu Feb 3 01:53:17 2011
+++ libibverbs-1.1.4/Makefile.am Fri Feb 11 04:02:12 2011
@@ -658,7 +655,23 @@
/*
* We'll only be doing writes, but we need O_RDWR in case the
-@@ -163,6 +190,9 @@
+@@ -141,6 +168,15 @@
+ if (cmd_fd < 0)
+ return NULL;
+
++#if defined(__SVR4) && defined(__sun)
++ /* We don't support parent-child sharing of IB resources on Solaris */
++ if (fcntl(cmd_fd, F_SETFD, FD_CLOEXEC) < 0) {
++ fprintf(stderr, "ibv_open_device: FD_CLOEXEC failed: %s\n",
++ strerror(errno));
++ goto err;
++ }
++#endif
++
+ context = device->ops.alloc_context(device, cmd_fd);
+ if (!context)
+ goto err;
+@@ -163,6 +199,9 @@
int async_fd = context->async_fd;
int cmd_fd = context->cmd_fd;
int cq_fd = -1;
@@ -668,7 +681,7 @@
if (abi_ver <= 2) {
struct ibv_abi_compat_v2 *t = context->abi_compat;
-@@ -172,6 +202,11 @@
+@@ -172,6 +211,11 @@
context->device->ops.free_context(context);
@@ -787,7 +800,7 @@
t = malloc(sizeof *t);
if (!t)
-@@ -67,9 +96,20 @@
+@@ -67,12 +96,36 @@
IBV_INIT_CMD_RESP(cmd, cmd_size, GET_CONTEXT, resp, resp_size);
cmd->cq_fd_tab = (uintptr_t) &cq_fd;
@@ -808,7 +821,23 @@
VALGRIND_MAKE_MEM_DEFINED(resp, resp_size);
-@@ -87,13 +127,28 @@
++#if defined(__SVR4) && defined(__sun)
++ /* We don't support parent-child sharing of IB resources on Solaris */
++ if (fcntl(resp->async_fd, F_SETFD, FD_CLOEXEC) < 0) {
++ fprintf(stderr, "ibv_get_context: FD_CLOEXEC failed "
++ "for async_fd: %s\n", strerror(errno));
++ return errno;
++ }
++ if (fcntl(cq_fd, F_SETFD, FD_CLOEXEC) < 0) {
++ fprintf(stderr, "ibv_get_context: FD_CLOEXEC failed "
++ "for cq_fd: %s\n", strerror(errno));
++ return errno;
++ }
++#endif
+ context->async_fd = resp->async_fd;
+ context->num_comp_vectors = 1;
+ t->channel.context = context;
+@@ -87,19 +140,53 @@
size_t cmd_size, struct ibv_get_context_resp *resp,
size_t resp_size)
{
@@ -837,7 +866,15 @@
VALGRIND_MAKE_MEM_DEFINED(resp, resp_size);
-@@ -100,6 +155,16 @@
++#if defined(__SVR4) && defined(__sun)
++ /* We don't support parent-child sharing of IB resources on Solaris */
++ if (fcntl(resp->async_fd, F_SETFD, FD_CLOEXEC) < 0) {
++ fprintf(stderr, "ibv_get_context: FD_CLOEXEC failed: %s\n",
++ strerror(errno));
++ return errno;
++ }
++#endif
++
context->async_fd = resp->async_fd;
context->num_comp_vectors = resp->num_comp_vectors;
@@ -854,7 +891,7 @@
return 0;
}
-@@ -120,6 +185,7 @@
+@@ -120,6 +207,7 @@
memset(device_attr->fw_ver, 0, sizeof device_attr->fw_ver);
*raw_fw_ver = resp.fw_ver;
device_attr->node_guid = resp.node_guid;
@@ -862,7 +899,16 @@
device_attr->sys_image_guid = resp.sys_image_guid;
device_attr->max_mr_size = resp.max_mr_size;
device_attr->page_size_cap = resp.page_size_cap;
-@@ -218,6 +284,45 @@
+@@ -207,6 +295,8 @@
+ {
+ IBV_INIT_CMD_RESP(cmd, cmd_size, ALLOC_PD, resp, resp_size);
+
++ cmd->user_handle = (uintptr_t) pd;
++
+ if (write(context->cmd_fd, cmd, cmd_size) != cmd_size)
+ return errno;
+
+@@ -218,6 +308,47 @@
return 0;
}
@@ -873,6 +919,7 @@
+{
+ IBV_INIT_CMD_RESP(cmd, cmd_size, ALLOC_SHPD, resp, resp_size);
+ cmd->pd_handle = pd->handle;
++ cmd->user_handle = (uintptr_t) pd;
+ cmd->share_key = share_key;
+
+ if (write(context->cmd_fd, cmd, cmd_size) != cmd_size)
@@ -893,6 +940,7 @@
+ IBV_INIT_CMD_RESP(cmd, cmd_size, SHARE_PD, resp, resp_size);
+ cmd->shpd_handle = shpd->handle;
+ cmd->share_key = share_key;
++ cmd->user_handle = (uintptr_t) pd;
+
+ if (write(context->cmd_fd, cmd, cmd_size) != cmd_size)
+ return errno;
@@ -908,7 +956,23 @@
int ibv_cmd_dealloc_pd(struct ibv_pd *pd)
{
struct ibv_dealloc_pd cmd;
-@@ -259,6 +364,34 @@
+@@ -224,6 +355,7 @@
+
+ IBV_INIT_CMD(&cmd, sizeof cmd, DEALLOC_PD);
+ cmd.pd_handle = pd->handle;
++ cmd.user_handle = (uintptr_t) pd;
+
+ if (write(pd->context->cmd_fd, &cmd, sizeof cmd) != sizeof cmd)
+ return errno;
+@@ -244,6 +376,7 @@
+ cmd->length = length;
+ cmd->hca_va = hca_va;
+ cmd->pd_handle = pd->handle;
++ cmd->user_handle = (uintptr_t) mr;
+ cmd->access_flags = access;
+
+ if (write(pd->context->cmd_fd, cmd, cmd_size) != cmd_size)
+@@ -259,6 +392,35 @@
return 0;
}
@@ -925,6 +989,7 @@
+ cmd->length = length;
+ cmd->hca_va = hca_va;
+ cmd->pd_handle = pd->handle;
++ cmd->user_handle = (uintptr_t) mr;
+ cmd->access_flags = access;
+
+ if (write(pd->context->cmd_fd, cmd, cmd_size) != cmd_size)
@@ -943,7 +1008,15 @@
int ibv_cmd_dereg_mr(struct ibv_mr *mr)
{
struct ibv_dereg_mr cmd;
-@@ -272,6 +405,32 @@
+@@ -265,6 +427,7 @@
+
+ IBV_INIT_CMD(&cmd, sizeof cmd, DEREG_MR);
+ cmd.mr_handle = mr->handle;
++ cmd.user_handle = (uintptr_t) mr;
+
+ if (write(mr->context->cmd_fd, &cmd, sizeof cmd) != sizeof cmd)
+ return errno;
+@@ -272,6 +435,34 @@
return 0;
}
@@ -953,6 +1026,7 @@
+
+ IBV_INIT_CMD(&cmd, sizeof cmd, DEREG_MR_RELAXED);
+ cmd.mr_handle = mr->handle;
++ cmd.user_handle = (uintptr_t) mr;
+
+ if (write(mr->context->cmd_fd, &cmd, sizeof cmd) != sizeof cmd)
+ return errno;
@@ -966,6 +1040,7 @@
+
+ IBV_INIT_CMD(&cmd, sizeof cmd, FLUSH_RELAXED_MR);
+ cmd.pd_handle = pd->handle;
++ cmd.user_handle = (uintptr_t) pd;
+
+ if (write(pd->context->cmd_fd, &cmd, sizeof cmd) != sizeof cmd)
+ return errno;
@@ -976,7 +1051,7 @@
static int ibv_cmd_create_cq_v2(struct ibv_context *context, int cqe,
struct ibv_cq *cq,
struct ibv_create_cq *new_cmd, size_t new_cmd_size,
-@@ -315,7 +474,19 @@
+@@ -315,7 +506,19 @@
cmd->user_handle = (uintptr_t) cq;
cmd->cqe = cqe;
cmd->comp_vector = comp_vector;
@@ -996,7 +1071,63 @@
cmd->reserved = 0;
if (write(context->cmd_fd, cmd, cmd_size) != cmd_size)
-@@ -637,7 +808,20 @@
+@@ -346,6 +549,7 @@
+ IBV_INIT_CMD_RESP(&cmd, sizeof cmd, POLL_CQ, resp, rsize);
+ cmd.cq_handle = ibcq->handle;
+ cmd.ne = ne;
++ cmd.user_handle = (uintptr_t) ibcq;
+
+ if (write(ibcq->context->cmd_fd, &cmd, sizeof cmd) != sizeof cmd) {
+ ret = -1;
+@@ -384,6 +588,7 @@
+ IBV_INIT_CMD(&cmd, sizeof cmd, REQ_NOTIFY_CQ);
+ cmd.cq_handle = ibcq->handle;
+ cmd.solicited = !!solicited_only;
++ cmd.user_handle = (uintptr_t) ibcq;
+
+ if (write(ibcq->context->cmd_fd, &cmd, sizeof cmd) != sizeof cmd)
+ return errno;
+@@ -399,6 +604,7 @@
+ IBV_INIT_CMD_RESP(cmd, cmd_size, RESIZE_CQ, resp, resp_size);
+ cmd->cq_handle = cq->handle;
+ cmd->cqe = cqe;
++ cmd->user_handle = (uintptr_t) cq;
+
+ if (write(cq->context->cmd_fd, cmd, cmd_size) != cmd_size)
+ return errno;
+@@ -434,6 +640,7 @@
+ IBV_INIT_CMD_RESP(&cmd, sizeof cmd, DESTROY_CQ, &resp, sizeof resp);
+ cmd.cq_handle = cq->handle;
+ cmd.reserved = 0;
++ cmd.user_handle = (uintptr_t) cq;
+
+ if (write(cq->context->cmd_fd, &cmd, sizeof cmd) != sizeof cmd)
+ return errno;
+@@ -555,6 +762,7 @@
+ cmd->attr_mask = srq_attr_mask;
+ cmd->max_wr = srq_attr->max_wr;
+ cmd->srq_limit = srq_attr->srq_limit;
++ cmd->user_handle = (uintptr_t) srq;
+
+ if (write(srq->context->cmd_fd, cmd, cmd_size) != cmd_size)
+ return errno;
+@@ -569,6 +777,7 @@
+
+ IBV_INIT_CMD_RESP(cmd, cmd_size, QUERY_SRQ, &resp, sizeof resp);
+ cmd->srq_handle = srq->handle;
++ cmd->user_handle = (uintptr_t) srq;
+ cmd->reserved = 0;
+
+ if (write(srq->context->cmd_fd, cmd, cmd_size) != cmd_size)
+@@ -606,6 +815,7 @@
+
+ IBV_INIT_CMD_RESP(&cmd, sizeof cmd, DESTROY_SRQ, &resp, sizeof resp);
+ cmd.srq_handle = srq->handle;
++ cmd.user_handle = (uintptr_t) srq;
+ cmd.reserved = 0;
+
+ if (write(srq->context->cmd_fd, &cmd, sizeof cmd) != sizeof cmd)
+@@ -637,7 +847,20 @@
cmd->max_send_sge = attr->cap.max_send_sge;
cmd->max_recv_sge = attr->cap.max_recv_sge;
cmd->max_inline_data = attr->cap.max_inline_data;
@@ -1017,7 +1148,47 @@
cmd->qp_type = attr->qp_type;
cmd->is_srq = !!attr->srq;
cmd->srq_handle = attr->qp_type == IBV_QPT_XRC ?
-@@ -1406,4 +1590,3 @@
+@@ -691,6 +914,7 @@
+ IBV_INIT_CMD_RESP(cmd, cmd_size, QUERY_QP, &resp, sizeof resp);
+ cmd->qp_handle = qp->handle;
+ cmd->attr_mask = attr_mask;
++ cmd->user_handle = (uintptr_t) qp;
+
+ if (write(qp->context->cmd_fd, cmd, cmd_size) != cmd_size)
+ return errno;
+@@ -772,6 +996,7 @@
+ IBV_INIT_CMD(cmd, cmd_size, MODIFY_QP);
+
+ cmd->qp_handle = qp->handle;
++ cmd->user_handle = (uintptr_t) qp;
+ cmd->attr_mask = attr_mask;
+ cmd->qkey = attr->qkey;
+ cmd->rq_psn = attr->rq_psn;
+@@ -1292,6 +1517,7 @@
+ IBV_INIT_CMD_RESP(&cmd, sizeof cmd, DESTROY_QP, &resp, sizeof resp);
+ cmd.qp_handle = qp->handle;
+ cmd.reserved = 0;
++ cmd.user_handle = (uintptr_t) qp;
+
+ if (write(qp->context->cmd_fd, &cmd, sizeof cmd) != sizeof cmd)
+ return errno;
+@@ -1313,6 +1539,7 @@
+ IBV_INIT_CMD(&cmd, sizeof cmd, ATTACH_MCAST);
+ memcpy(cmd.gid, gid->raw, sizeof cmd.gid);
+ cmd.qp_handle = qp->handle;
++ cmd.user_handle = (uintptr_t) qp;
+ cmd.mlid = lid;
+ cmd.reserved = 0;
+
+@@ -1329,6 +1556,7 @@
+ IBV_INIT_CMD(&cmd, sizeof cmd, DETACH_MCAST);
+ memcpy(cmd.gid, gid->raw, sizeof cmd.gid);
+ cmd.qp_handle = qp->handle;
++ cmd.user_handle = (uintptr_t) qp;
+ cmd.mlid = lid;
+ cmd.reserved = 0;
+
+@@ -1406,4 +1634,3 @@
return errno;
return 0;
}
@@ -1326,7 +1497,11 @@
__u64 sys_image_guid;
__u64 max_mr_size;
__u64 page_size_cap;
-@@ -243,10 +253,57 @@
+@@ -240,18 +250,70 @@
+ __u16 in_words;
+ __u16 out_words;
+ __u64 response;
++ __u64 user_handle;
__u64 driver_data[0];
};
@@ -1357,6 +1532,7 @@
+ __u32 pd_handle;
+ __u32 reserved;
+ __u64 share_key;
++ __u64 user_handle;
+ __u64 driver_data[0];
+};
+
@@ -1372,6 +1548,7 @@
+ __u32 shpd_handle;
+ __u32 reserved;
+ __u64 share_key;
++ __u64 user_handle;
+ __u64 driver_data[0];
+};
+
@@ -1384,8 +1561,27 @@
struct ibv_dealloc_pd {
__u32 command;
__u16 in_words;
-@@ -280,6 +337,13 @@
+ __u16 out_words;
+ __u32 pd_handle;
++ __u32 reserved;
++ __u64 user_handle;
+ };
+
+ struct ibv_reg_mr {
+@@ -264,6 +326,7 @@
+ __u64 hca_va;
+ __u32 pd_handle;
+ __u32 access_flags;
++ __u64 user_handle;
+ __u64 driver_data[0];
+ };
+
+@@ -278,8 +341,19 @@
+ __u16 in_words;
+ __u16 out_words;
__u32 mr_handle;
++ __u32 reserved;
++ __u64 user_handle;
};
+struct ibv_flush_relaxed_mr {
@@ -1393,12 +1589,14 @@
+ __u16 in_words;
+ __u16 out_words;
+ __u32 pd_handle;
++ __u32 reserved;
++ __u64 user_handle;
+};
+
struct ibv_create_comp_channel {
__u32 command;
__u16 in_words;
-@@ -304,10 +368,25 @@
+@@ -304,10 +378,25 @@
__u64 driver_data[0];
};
@@ -1424,7 +1622,31 @@
struct ibv_kern_wc {
__u64 wr_id;
-@@ -363,7 +442,11 @@
+@@ -334,6 +423,7 @@
+ __u64 response;
+ __u32 cq_handle;
+ __u32 ne;
++ __u64 user_handle;
+ };
+
+ struct ibv_poll_cq_resp {
+@@ -348,6 +438,7 @@
+ __u16 out_words;
+ __u32 cq_handle;
+ __u32 solicited;
++ __u64 user_handle;
+ };
+
+ struct ibv_resize_cq {
+@@ -357,6 +448,7 @@
+ __u64 response;
+ __u32 cq_handle;
+ __u32 cqe;
++ __u64 user_handle;
+ __u64 driver_data[0];
+ };
+
+@@ -363,7 +455,11 @@
struct ibv_resize_cq_resp {
__u32 cqe;
__u32 reserved;
@@ -1436,7 +1658,15 @@
};
struct ibv_destroy_cq {
-@@ -460,6 +543,14 @@
+@@ -373,6 +469,7 @@
+ __u64 response;
+ __u32 cq_handle;
+ __u32 reserved;
++ __u64 user_handle;
+ };
+
+ struct ibv_destroy_cq_resp {
+@@ -460,6 +557,14 @@
__u64 driver_data[0];
};
@@ -1451,7 +1681,7 @@
struct ibv_create_qp_resp {
__u32 qp_handle;
__u32 qpn;
-@@ -469,7 +560,20 @@
+@@ -469,7 +574,20 @@
__u32 max_recv_sge;
__u32 max_inline_data;
__u32 reserved;
@@ -1472,7 +1702,47 @@
struct ibv_qp_dest {
__u8 dgid[16];
-@@ -817,12 +921,29 @@
+@@ -493,6 +611,7 @@
+ __u64 response;
+ __u32 qp_handle;
+ __u32 attr_mask;
++ __u64 user_handle;
+ __u64 driver_data[0];
+ };
+
+@@ -560,6 +679,7 @@
+ __u8 alt_port_num;
+ __u8 alt_timeout;
+ __u8 reserved[2];
++ __u64 user_handle;
+ __u64 driver_data[0];
+ };
+
+@@ -570,6 +690,7 @@
+ __u64 response;
+ __u32 qp_handle;
+ __u32 reserved;
++ __u64 user_handle;
+ };
+
+ struct ibv_destroy_qp_resp {
+@@ -775,6 +896,7 @@
+ __u32 qp_handle;
+ __u16 mlid;
+ __u16 reserved;
++ __u64 user_handle;
+ __u64 driver_data[0];
+ };
+
+@@ -786,6 +908,7 @@
+ __u32 qp_handle;
+ __u16 mlid;
+ __u16 reserved;
++ __u64 user_handle;
+ __u64 driver_data[0];
+ };
+
+@@ -817,12 +940,29 @@
__u64 driver_data[0];
};
@@ -1502,7 +1772,31 @@
struct ibv_modify_srq {
__u32 command;
-@@ -946,6 +1067,11 @@
+@@ -832,6 +972,7 @@
+ __u32 attr_mask;
+ __u32 max_wr;
+ __u32 srq_limit;
++ __u64 user_handle;
+ __u64 driver_data[0];
+ };
+
+@@ -842,6 +983,7 @@
+ __u64 response;
+ __u32 srq_handle;
+ __u32 reserved;
++ __u64 user_handle;
+ __u64 driver_data[0];
+ };
+
+@@ -859,6 +1001,7 @@
+ __u64 response;
+ __u32 srq_handle;
+ __u32 reserved;
++ __u64 user_handle;
+ };
+
+ struct ibv_destroy_srq_resp {
+@@ -946,6 +1089,11 @@
IB_USER_VERBS_CMD_QUERY_XRC_RCV_QP_V2 = -1,
IB_USER_VERBS_CMD_REG_XRC_RCV_QP_V2 = -1,
IB_USER_VERBS_CMD_UNREG_XRC_RCV_QP_V2 = -1,