[PATCH] hfi1verbs: Move receive work queues struct

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



hfi1_rwq and hfi1_rwqe are shared structs between rdmavt
and uapi. Remove hfi1_rwq and hfi1_rwqe structs from
providers. Include rvt_rwq and rvt_rwqe struct definition
into kernel-headers/rvt-abi.h.

Reviewed-by: Mike Marciniszyn <mike.marciniszyn@xxxxxxxxx>
Signed-off-by: Kamenee Arumugam <kamenee.arumugam@xxxxxxxxx>
---
 kernel-headers/rdma/rvt-abi.h  |   28 ++++++++++++++++++++++++++++
 providers/hfi1verbs/hfiverbs.h |   34 ++++------------------------------
 providers/hfi1verbs/verbs.c    |   28 ++++++++++++++--------------
 3 files changed, 46 insertions(+), 44 deletions(-)
 mode change 100755 => 100644 kernel-headers/rdma/rvt-abi.h
 mode change 100644 => 100755 providers/hfi1verbs/verbs.c

diff --git a/kernel-headers/rdma/rvt-abi.h b/kernel-headers/rdma/rvt-abi.h
old mode 100755
new mode 100644
index c30f2fe..2e14075
--- a/kernel-headers/rdma/rvt-abi.h
+++ b/kernel-headers/rdma/rvt-abi.h
@@ -10,6 +10,7 @@
 
 #include <linux/types.h>
 #include <rdma/ib_user_verbs.h>
+#include <infiniband/verbs.h>
 #ifndef RDMA_ATOMIC_UAPI
 #define RDMA_ATOMIC_UAPI(_type, _name) _type _name
 #endif
@@ -28,4 +29,31 @@ struct rvt_cq_wc {
 	struct ib_uverbs_wc uqueue[0];
 };
 
+/*
+ * Receive work request queue entry.
+ * The size of the sg_list is determined when the QP (or SRQ) is created
+ * and stored in qp->r_rq.max_sge (or srq->rq.max_sge).
+ */
+struct rvt_rwqe {
+	__u64 wr_id;
+	__u8 num_sge;
+	__u8 padding[7];
+	struct ibv_sge sg_list[0];
+};
+
+/*
+ * This structure is used to contain the head pointer, tail pointer,
+ * and receive work queue entries as a single memory allocation so
+ * it can be mmap'ed into user space.
+ * Note that the wq array elements are variable size so you can't
+ * just index into the array to get the N'th element;
+ * use get_rwqe_ptr() instead.
+ */
+struct rvt_rwq {
+	/* new work requests posted to the head */
+	RDMA_ATOMIC_UAPI(__u32, head);
+	/* receives pull requests from here. */
+	RDMA_ATOMIC_UAPI(__u32, tail);
+	struct rvt_rwqe wq[0];
+};
 #endif /* RVT_ABI_USER_H */
diff --git a/providers/hfi1verbs/hfiverbs.h b/providers/hfi1verbs/hfiverbs.h
index 7ce27c8..9931c32 100644
--- a/providers/hfi1verbs/hfiverbs.h
+++ b/providers/hfi1verbs/hfiverbs.h
@@ -83,34 +83,8 @@ struct hfi1_cq {
        struct rvt_cq_wc       *queue;
        pthread_spinlock_t      lock;
 };
-/*
- * Receive work request queue entry.
- * The size of the sg_list is determined when the QP is created and stored
- * in qp->r_max_sge.
- */
-struct hfi1_rwqe {
-	uint64_t		wr_id;
-	uint8_t			num_sge;
-	uint8_t			padding[7];
-	struct ibv_sge		sg_list[0];
-};
-
-/*
- * This struture is used to contain the head pointer, tail pointer,
- * and receive work queue entries as a single memory allocation so
- * it can be mmap'ed into user space.
- * Note that the wq array elements are variable size so you can't
- * just index into the array to get the N'th element;
- * use get_rwqe_ptr() instead.
- */
-struct hfi1_rwq {
-	_Atomic(uint32_t)	head;	/* new requests posted to the head. */
-	_Atomic(uint32_t)	tail;	/* receives pull requests from here. */
-	struct hfi1_rwqe	wq[0];
-};
-
 struct hfi1_rq {
-	struct hfi1_rwq       *rwq;
+	struct rvt_rwq		*rwq;
 	pthread_spinlock_t	lock;
 	uint32_t		size;
 	uint32_t		max_sge;
@@ -158,12 +132,12 @@ static inline struct hfi1_srq *to_isrq(struct ibv_srq *ibsrq)
  * Since struct hfi1_rwqe is not a fixed size, we can't simply index into
  * struct hfi1_rq.wq.  This function does the array index computation.
  */
-static inline struct hfi1_rwqe *get_rwqe_ptr(struct hfi1_rq *rq,
+static inline struct rvt_rwqe *get_rwqe_ptr(struct hfi1_rq *rq,
 					      unsigned n)
 {
-	return (struct hfi1_rwqe *)
+	return (struct rvt_rwqe *)
 		((char *) rq->rwq->wq +
-		 (sizeof(struct hfi1_rwqe) +
+		 (sizeof(struct rvt_rwqe) +
 		  rq->max_sge * sizeof(struct ibv_sge)) * n);
 }
 
diff --git a/providers/hfi1verbs/verbs.c b/providers/hfi1verbs/verbs.c
old mode 100644
new mode 100755
index dcf6714..5a527ab
--- a/providers/hfi1verbs/verbs.c
+++ b/providers/hfi1verbs/verbs.c
@@ -342,8 +342,8 @@ struct ibv_qp *hfi1_create_qp(struct ibv_pd *pd, struct ibv_qp_init_attr *attr)
 	} else {
 		qp->rq.size = attr->cap.max_recv_wr + 1;
 		qp->rq.max_sge = attr->cap.max_recv_sge;
-		size = sizeof(struct hfi1_rwq) +
-			(sizeof(struct hfi1_rwqe) +
+		size = sizeof(struct rvt_rwq) +
+			(sizeof(struct rvt_rwqe) +
 			 (sizeof(struct ibv_sge) * qp->rq.max_sge)) *
 			qp->rq.size;
 		qp->rq.rwq = mmap(NULL, size,
@@ -412,8 +412,8 @@ int hfi1_destroy_qp(struct ibv_qp *ibqp)
 	if (qp->rq.rwq) {
 		size_t size;
 
-		size = sizeof(struct hfi1_rwq) +
-			(sizeof(struct hfi1_rwqe) +
+		size = sizeof(struct rvt_rwq) +
+			(sizeof(struct rvt_rwqe) +
 			 (sizeof(struct ibv_sge) * qp->rq.max_sge)) *
 			qp->rq.size;
 		(void) munmap(qp->rq.rwq, size);
@@ -470,8 +470,8 @@ static int post_recv(struct hfi1_rq *rq, struct ibv_recv_wr *wr,
 		     struct ibv_recv_wr **bad_wr)
 {
 	struct ibv_recv_wr *i;
-	struct hfi1_rwq *rwq;
-	struct hfi1_rwqe *wqe;
+	struct rvt_rwq *rwq;
+	struct rvt_rwqe *wqe;
 	uint32_t head;
 	int n, ret;
 
@@ -541,8 +541,8 @@ struct ibv_srq *hfi1_create_srq(struct ibv_pd *pd,
 
 	srq->rq.size = attr->attr.max_wr + 1;
 	srq->rq.max_sge = attr->attr.max_sge;
-	size = sizeof(struct hfi1_rwq) +
-		(sizeof(struct hfi1_rwqe) +
+	size = sizeof(struct rvt_rwq) +
+		(sizeof(struct rvt_rwqe) +
 		 (sizeof(struct ibv_sge) * srq->rq.max_sge)) * srq->rq.size;
 	srq->rq.rwq = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED,
 			   pd->context->cmd_fd, resp.offset);
@@ -591,8 +591,8 @@ int hfi1_modify_srq(struct ibv_srq *ibsrq,
 	if (attr_mask & IBV_SRQ_MAX_WR) {
 		pthread_spin_lock(&srq->rq.lock);
 		/* Save the old size so we can unmmap the queue. */
-		size = sizeof(struct hfi1_rwq) +
-			(sizeof(struct hfi1_rwqe) +
+		size = sizeof(struct rvt_rwq) +
+			(sizeof(struct rvt_rwqe) +
 			 (sizeof(struct ibv_sge) * srq->rq.max_sge)) *
 			srq->rq.size;
 	}
@@ -607,8 +607,8 @@ int hfi1_modify_srq(struct ibv_srq *ibsrq,
 	if (attr_mask & IBV_SRQ_MAX_WR) {
 		(void) munmap(srq->rq.rwq, size);
 		srq->rq.size = attr->max_wr + 1;
-		size = sizeof(struct hfi1_rwq) +
-			(sizeof(struct hfi1_rwqe) +
+		size = sizeof(struct rvt_rwq) +
+			(sizeof(struct rvt_rwqe) +
 			 (sizeof(struct ibv_sge) * srq->rq.max_sge)) *
 			srq->rq.size;
 		srq->rq.rwq = mmap(NULL, size,
@@ -649,8 +649,8 @@ int hfi1_destroy_srq(struct ibv_srq *ibsrq)
 	if (ret)
 		return ret;
 
-	size = sizeof(struct hfi1_rwq) +
-		(sizeof(struct hfi1_rwqe) +
+	size = sizeof(struct rvt_rwq) +
+		(sizeof(struct rvt_rwqe) +
 		 (sizeof(struct ibv_sge) * srq->rq.max_sge)) * srq->rq.size;
 	(void) munmap(srq->rq.rwq, size);
 	free(srq);




[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Photo]     [Yosemite News]     [Yosemite Photos]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux