[openib-general] [PATCH 3/5] [RFC] libibverbs changes for resize CQ
Roland Dreier
rolandd at cisco.com
Thu Jan 26 11:23:33 PST 2006
libibverbs changes to handle resizing CQs. Essentially just adding
API and support for passing the call through to provider plug-ins.
---
--- libibverbs/include/infiniband/driver.h (revision 5192)
+++ libibverbs/include/infiniband/driver.h (working copy)
@@ -95,6 +95,8 @@ extern int ibv_cmd_create_cq(struct ibv_
struct ibv_create_cq_resp *resp, size_t resp_size);
extern int ibv_cmd_poll_cq(struct ibv_cq *cq, int ne, struct ibv_wc *wc);
extern int ibv_cmd_req_notify_cq(struct ibv_cq *cq, int solicited_only);
+extern int ibv_cmd_resize_cq(struct ibv_cq *cq, int cqe,
+ struct ibv_resize_cq *cmd, size_t cmd_size);
extern int ibv_cmd_destroy_cq(struct ibv_cq *cq);
extern int ibv_cmd_create_srq(struct ibv_pd *pd,
--- libibverbs/include/infiniband/verbs.h (revision 5193)
+++ libibverbs/include/infiniband/verbs.h (working copy)
@@ -549,6 +549,7 @@ struct ibv_context_ops {
int (*poll_cq)(struct ibv_cq *cq, int num_entries, struct ibv_wc *wc);
int (*req_notify_cq)(struct ibv_cq *cq, int solicited_only);
void (*cq_event)(struct ibv_cq *cq);
+ int (*resize_cq)(struct ibv_cq *cq, int cqe);
int (*destroy_cq)(struct ibv_cq *cq);
struct ibv_srq * (*create_srq)(struct ibv_pd *pd,
struct ibv_srq_init_attr *srq_init_attr);
@@ -717,6 +718,15 @@ extern struct ibv_cq *ibv_create_cq(stru
int comp_vector);
/**
+ * ibv_resize_cq - Modifies the capacity of the CQ.
+ * @cq: The CQ to resize.
+ * @cqe: The minimum size of the CQ.
+ *
+ * Users can examine the cq structure to determine the actual CQ size.
+ */
+extern int ibv_resize_cq(struct ibv_cq *cq, int cqe);
+
+/**
* ibv_destroy_cq - Destroy a completion queue
*/
extern int ibv_destroy_cq(struct ibv_cq *cq);
--- libibverbs/include/infiniband/kern-abi.h (revision 5192)
+++ libibverbs/include/infiniband/kern-abi.h (working copy)
@@ -343,6 +343,20 @@ struct ibv_req_notify_cq {
__u32 solicited;
};
+struct ibv_resize_cq {
+ __u32 command;
+ __u16 in_words;
+ __u16 out_words;
+ __u64 response;
+ __u32 cq_handle;
+ __u32 cqe;
+ __u64 driver_data[0];
+};
+
+struct ibv_resize_cq_resp {
+ __u32 cqe;
+};
+
struct ibv_destroy_cq {
__u32 command;
__u16 in_words;
--- libibverbs/ChangeLog (revision 5192)
+++ libibverbs/ChangeLog (working copy)
@@ -1,3 +1,13 @@
+2006-01-26 Roland Dreier <rdreier at cisco.com>
+
+ * include/infiniband/driver.h, src/cmd.c (ibv_cmd_resize_cq): Add
+ driver interface for calling resize CQ kernel command.
+
+ * include/infiniband/kern-abi.h: Add resize CQ kernel ABI.
+
+ * include/infiniband/verbs.h, src/verbs.c (ibv_resize_cq): Add
+ resize CQ library API.
+
2006-01-25 Roland Dreier <rdreier at cisco.com>
* examples/pingpong.c, examples/pingpong.h,
--- libibverbs/src/libibverbs.map (revision 5192)
+++ libibverbs/src/libibverbs.map (working copy)
@@ -19,6 +19,7 @@ IBVERBS_1.0 {
ibv_create_comp_channel;
ibv_destroy_comp_channel;
ibv_create_cq;
+ ibv_resize_cq;
ibv_destroy_cq;
ibv_get_cq_event;
ibv_ack_cq_events;
@@ -44,6 +45,7 @@ IBVERBS_1.0 {
ibv_cmd_create_cq;
ibv_cmd_poll_cq;
ibv_cmd_req_notify_cq;
+ ibv_cmd_resize_cq;
ibv_cmd_destroy_cq;
ibv_cmd_create_srq;
ibv_cmd_modify_srq;
--- libibverbs/src/verbs.c (revision 5192)
+++ libibverbs/src/verbs.c (working copy)
@@ -212,6 +212,14 @@ struct ibv_cq *ibv_create_cq(struct ibv_
return cq;
}
+int ibv_resize_cq(struct ibv_cq *cq, int cqe)
+{
+ if (!cq->context->ops.resize_cq)
+ return ENOSYS;
+
+ return cq->context->ops.resize_cq(cq, cqe);
+}
+
int ibv_destroy_cq(struct ibv_cq *cq)
{
return cq->context->ops.destroy_cq(cq);
--- libibverbs/src/cmd.c (revision 5192)
+++ libibverbs/src/cmd.c (working copy)
@@ -364,6 +364,23 @@ int ibv_cmd_req_notify_cq(struct ibv_cq
return 0;
}
+int ibv_cmd_resize_cq(struct ibv_cq *cq, int cqe,
+ struct ibv_resize_cq *cmd, size_t cmd_size)
+{
+ struct ibv_resize_cq_resp resp;
+
+ IBV_INIT_CMD_RESP(cmd, cmd_size, RESIZE_CQ, &resp, sizeof resp);
+ cmd->cq_handle = cq->handle;
+ cmd->cqe = cqe;
+
+ if (write(cq->context->cmd_fd, cmd, cmd_size) != cmd_size)
+ return errno;
+
+ cq->cqe = resp.cqe;
+
+ return 0;
+}
+
static int ibv_cmd_destroy_cq_v1(struct ibv_cq *cq)
{
struct ibv_destroy_cq_v1 cmd;
--- libibverbs/README (revision 5192)
+++ libibverbs/README (working copy)
@@ -98,6 +98,5 @@ necessary permissions to release your wo
TODO
====
- * Completion queue (CQ) resizing need to be implemented.
* Memory windows (MWs) need to be implemented.
* Query QP, query SRQ and other query verbs need to be implemented.
More information about the general
mailing list