|
@@ -256,7 +256,10 @@ enum ib_event_type {
|
|
IB_EVENT_PORT_ERR,
|
|
IB_EVENT_PORT_ERR,
|
|
IB_EVENT_LID_CHANGE,
|
|
IB_EVENT_LID_CHANGE,
|
|
IB_EVENT_PKEY_CHANGE,
|
|
IB_EVENT_PKEY_CHANGE,
|
|
- IB_EVENT_SM_CHANGE
|
|
|
|
|
|
+ IB_EVENT_SM_CHANGE,
|
|
|
|
+ IB_EVENT_SRQ_ERR,
|
|
|
|
+ IB_EVENT_SRQ_LIMIT_REACHED,
|
|
|
|
+ IB_EVENT_QP_LAST_WQE_REACHED
|
|
};
|
|
};
|
|
|
|
|
|
struct ib_event {
|
|
struct ib_event {
|
|
@@ -264,6 +267,7 @@ struct ib_event {
|
|
union {
|
|
union {
|
|
struct ib_cq *cq;
|
|
struct ib_cq *cq;
|
|
struct ib_qp *qp;
|
|
struct ib_qp *qp;
|
|
|
|
+ struct ib_srq *srq;
|
|
u8 port_num;
|
|
u8 port_num;
|
|
} element;
|
|
} element;
|
|
enum ib_event_type event;
|
|
enum ib_event_type event;
|
|
@@ -386,6 +390,23 @@ enum ib_cq_notify {
|
|
IB_CQ_NEXT_COMP
|
|
IB_CQ_NEXT_COMP
|
|
};
|
|
};
|
|
|
|
|
|
|
|
+enum ib_srq_attr_mask {
|
|
|
|
+ IB_SRQ_MAX_WR = 1 << 0,
|
|
|
|
+ IB_SRQ_LIMIT = 1 << 1,
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+struct ib_srq_attr {
|
|
|
|
+ u32 max_wr;
|
|
|
|
+ u32 max_sge;
|
|
|
|
+ u32 srq_limit;
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+struct ib_srq_init_attr {
|
|
|
|
+ void (*event_handler)(struct ib_event *, void *);
|
|
|
|
+ void *srq_context;
|
|
|
|
+ struct ib_srq_attr attr;
|
|
|
|
+};
|
|
|
|
+
|
|
struct ib_qp_cap {
|
|
struct ib_qp_cap {
|
|
u32 max_send_wr;
|
|
u32 max_send_wr;
|
|
u32 max_recv_wr;
|
|
u32 max_recv_wr;
|
|
@@ -713,10 +734,11 @@ struct ib_cq {
|
|
};
|
|
};
|
|
|
|
|
|
struct ib_srq {
|
|
struct ib_srq {
|
|
- struct ib_device *device;
|
|
|
|
- struct ib_uobject *uobject;
|
|
|
|
- struct ib_pd *pd;
|
|
|
|
- void *srq_context;
|
|
|
|
|
|
+ struct ib_device *device;
|
|
|
|
+ struct ib_pd *pd;
|
|
|
|
+ struct ib_uobject *uobject;
|
|
|
|
+ void (*event_handler)(struct ib_event *, void *);
|
|
|
|
+ void *srq_context;
|
|
atomic_t usecnt;
|
|
atomic_t usecnt;
|
|
};
|
|
};
|
|
|
|
|
|
@@ -830,6 +852,18 @@ struct ib_device {
|
|
int (*query_ah)(struct ib_ah *ah,
|
|
int (*query_ah)(struct ib_ah *ah,
|
|
struct ib_ah_attr *ah_attr);
|
|
struct ib_ah_attr *ah_attr);
|
|
int (*destroy_ah)(struct ib_ah *ah);
|
|
int (*destroy_ah)(struct ib_ah *ah);
|
|
|
|
+ struct ib_srq * (*create_srq)(struct ib_pd *pd,
|
|
|
|
+ struct ib_srq_init_attr *srq_init_attr,
|
|
|
|
+ struct ib_udata *udata);
|
|
|
|
+ int (*modify_srq)(struct ib_srq *srq,
|
|
|
|
+ struct ib_srq_attr *srq_attr,
|
|
|
|
+ enum ib_srq_attr_mask srq_attr_mask);
|
|
|
|
+ int (*query_srq)(struct ib_srq *srq,
|
|
|
|
+ struct ib_srq_attr *srq_attr);
|
|
|
|
+ int (*destroy_srq)(struct ib_srq *srq);
|
|
|
|
+ int (*post_srq_recv)(struct ib_srq *srq,
|
|
|
|
+ struct ib_recv_wr *recv_wr,
|
|
|
|
+ struct ib_recv_wr **bad_recv_wr);
|
|
struct ib_qp * (*create_qp)(struct ib_pd *pd,
|
|
struct ib_qp * (*create_qp)(struct ib_pd *pd,
|
|
struct ib_qp_init_attr *qp_init_attr,
|
|
struct ib_qp_init_attr *qp_init_attr,
|
|
struct ib_udata *udata);
|
|
struct ib_udata *udata);
|
|
@@ -1041,6 +1075,65 @@ int ib_query_ah(struct ib_ah *ah, struct ib_ah_attr *ah_attr);
|
|
*/
|
|
*/
|
|
int ib_destroy_ah(struct ib_ah *ah);
|
|
int ib_destroy_ah(struct ib_ah *ah);
|
|
|
|
|
|
|
|
+/**
|
|
|
|
+ * ib_create_srq - Creates a SRQ associated with the specified protection
|
|
|
|
+ * domain.
|
|
|
|
+ * @pd: The protection domain associated with the SRQ.
|
|
|
|
+ * @srq_init_attr: A list of initial attributes required to create the SRQ.
|
|
|
|
+ *
|
|
|
|
+ * srq_attr->max_wr and srq_attr->max_sge are read the determine the
|
|
|
|
+ * requested size of the SRQ, and set to the actual values allocated
|
|
|
|
+ * on return. If ib_create_srq() succeeds, then max_wr and max_sge
|
|
|
|
+ * will always be at least as large as the requested values.
|
|
|
|
+ */
|
|
|
|
+struct ib_srq *ib_create_srq(struct ib_pd *pd,
|
|
|
|
+ struct ib_srq_init_attr *srq_init_attr);
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ * ib_modify_srq - Modifies the attributes for the specified SRQ.
|
|
|
|
+ * @srq: The SRQ to modify.
|
|
|
|
+ * @srq_attr: On input, specifies the SRQ attributes to modify. On output,
|
|
|
|
+ * the current values of selected SRQ attributes are returned.
|
|
|
|
+ * @srq_attr_mask: A bit-mask used to specify which attributes of the SRQ
|
|
|
|
+ * are being modified.
|
|
|
|
+ *
|
|
|
|
+ * The mask may contain IB_SRQ_MAX_WR to resize the SRQ and/or
|
|
|
|
+ * IB_SRQ_LIMIT to set the SRQ's limit and request notification when
|
|
|
|
+ * the number of receives queued drops below the limit.
|
|
|
|
+ */
|
|
|
|
+int ib_modify_srq(struct ib_srq *srq,
|
|
|
|
+ struct ib_srq_attr *srq_attr,
|
|
|
|
+ enum ib_srq_attr_mask srq_attr_mask);
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ * ib_query_srq - Returns the attribute list and current values for the
|
|
|
|
+ * specified SRQ.
|
|
|
|
+ * @srq: The SRQ to query.
|
|
|
|
+ * @srq_attr: The attributes of the specified SRQ.
|
|
|
|
+ */
|
|
|
|
+int ib_query_srq(struct ib_srq *srq,
|
|
|
|
+ struct ib_srq_attr *srq_attr);
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ * ib_destroy_srq - Destroys the specified SRQ.
|
|
|
|
+ * @srq: The SRQ to destroy.
|
|
|
|
+ */
|
|
|
|
+int ib_destroy_srq(struct ib_srq *srq);
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ * ib_post_srq_recv - Posts a list of work requests to the specified SRQ.
|
|
|
|
+ * @srq: The SRQ to post the work request on.
|
|
|
|
+ * @recv_wr: A list of work requests to post on the receive queue.
|
|
|
|
+ * @bad_recv_wr: On an immediate failure, this parameter will reference
|
|
|
|
+ * the work request that failed to be posted on the QP.
|
|
|
|
+ */
|
|
|
|
+static inline int ib_post_srq_recv(struct ib_srq *srq,
|
|
|
|
+ struct ib_recv_wr *recv_wr,
|
|
|
|
+ struct ib_recv_wr **bad_recv_wr)
|
|
|
|
+{
|
|
|
|
+ return srq->device->post_srq_recv(srq, recv_wr, bad_recv_wr);
|
|
|
|
+}
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* ib_create_qp - Creates a QP associated with the specified protection
|
|
* ib_create_qp - Creates a QP associated with the specified protection
|
|
* domain.
|
|
* domain.
|