aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDotan Barak <dotanb@mellanox.co.il>2006-02-23 20:41:50 +0000
committerRoland Dreier <rolandd@cisco.com>2006-11-09 11:35:59 -0800
commitd002539b56a342d119d866eab9abc774372296ed (patch)
tree0a0891285d4b681e6fb346cdfc100933f33802ab
parentfe9340c0b49fa5b16d14d6474f09df9f5e8d8c6e (diff)
downloadlibibverbs-d002539b56a342d119d866eab9abc774372296ed.tar.gz
Add support for kernel ABI version 6
Add support for kernel ABI 6: take SRQ capacity from kernel response to create SRQ. Signed-off-by: Dotan Barak <dotanb@mellanox.co.il> Signed-off-by: Roland Dreier <rolandd@cisco.com>
-rw-r--r--ChangeLog5
-rw-r--r--include/infiniband/kern-abi.h9
-rw-r--r--src/cmd.c12
3 files changed, 25 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index c278d74..a7d17cf 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2006-02-23 Dotan Barak <dotanb@mellanox.co.il>
+
+ * src/cmd.c (ibv_cmd_create_srq): Add support for kernel ABI
+ version 6 (take SRQ capacity from kernel response to create SRQ).
+
2006-02-16 Roland Dreier <rdreier@cisco.com>
* Release version 1.0-rc7.
diff --git a/include/infiniband/kern-abi.h b/include/infiniband/kern-abi.h
index 900cfbe..85389f4 100644
--- a/include/infiniband/kern-abi.h
+++ b/include/infiniband/kern-abi.h
@@ -48,7 +48,7 @@
* The minimum and maximum kernel ABI that we can handle.
*/
#define IB_USER_VERBS_MIN_ABI_VERSION 1
-#define IB_USER_VERBS_MAX_ABI_VERSION 5
+#define IB_USER_VERBS_MAX_ABI_VERSION 6
enum {
IB_USER_VERBS_CMD_GET_CONTEXT,
@@ -708,6 +708,9 @@ struct ibv_create_srq {
struct ibv_create_srq_resp {
__u32 srq_handle;
+ __u32 max_wr;
+ __u32 max_sge;
+ __u32 reserved;
};
struct ibv_modify_srq {
@@ -871,4 +874,8 @@ struct ibv_create_qp_resp_v4 {
__u32 max_inline_data;
};
+struct ibv_create_srq_resp_v5 {
+ __u32 srq_handle;
+};
+
#endif /* KERN_ABI_H */
diff --git a/src/cmd.c b/src/cmd.c
index 89365d5..77c67b9 100644
--- a/src/cmd.c
+++ b/src/cmd.c
@@ -435,6 +435,18 @@ int ibv_cmd_create_srq(struct ibv_pd *pd,
srq->handle = resp->srq_handle;
+ if (abi_ver > 5) {
+ attr->attr.max_wr = resp->max_wr;
+ attr->attr.max_sge = resp->max_sge;
+ } else {
+ struct ibv_create_srq_resp_v5 *resp_v5 =
+ (struct ibv_create_srq_resp_v5 *) resp;
+
+ memmove((void *) resp + sizeof *resp,
+ (void *) resp_v5 + sizeof *resp_v5,
+ resp_size - sizeof *resp);
+ }
+
return 0;
}