diff options
author | Parav Pandit <parav.pandit@emulex.com> | 2012-05-23 11:32:07 -0400 |
---|---|---|
committer | Roland Dreier <roland@purestorage.com> | 2012-05-29 15:49:36 -0400 |
commit | cd4fedf9cfe2d453148dce0f105a41725e5107a3 (patch) | |
tree | 4564eb25bb7870a1cc00317b030edae84143ed65 /drivers | |
parent | c23ddf7857bdb2e8001b0a058603497c765a580d (diff) |
RDMA/ocrdma: Correct queue free count math
Correct queue free count math for SQ, RQ for all hardware type.
Update user-kernel ABI interface.
Signed-off-by: Parav Pandit <parav.pandit@emulex.com>
Signed-off-by: Roland Dreier <roland@purestorage.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/infiniband/hw/ocrdma/ocrdma.h | 1 | ||||
-rw-r--r-- | drivers/infiniband/hw/ocrdma/ocrdma_abi.h | 5 | ||||
-rw-r--r-- | drivers/infiniband/hw/ocrdma/ocrdma_hw.c | 7 | ||||
-rw-r--r-- | drivers/infiniband/hw/ocrdma/ocrdma_verbs.c | 5 |
4 files changed, 1 insertions, 17 deletions
diff --git a/drivers/infiniband/hw/ocrdma/ocrdma.h b/drivers/infiniband/hw/ocrdma/ocrdma.h index 85a69c958559..037f5cea85bd 100644 --- a/drivers/infiniband/hw/ocrdma/ocrdma.h +++ b/drivers/infiniband/hw/ocrdma/ocrdma.h | |||
@@ -231,7 +231,6 @@ struct ocrdma_qp_hwq_info { | |||
231 | u32 entry_size; | 231 | u32 entry_size; |
232 | u32 max_cnt; | 232 | u32 max_cnt; |
233 | u32 max_wqe_idx; | 233 | u32 max_wqe_idx; |
234 | u32 free_delta; | ||
235 | u16 dbid; /* qid, where to ring the doorbell. */ | 234 | u16 dbid; /* qid, where to ring the doorbell. */ |
236 | u32 len; | 235 | u32 len; |
237 | dma_addr_t pa; | 236 | dma_addr_t pa; |
diff --git a/drivers/infiniband/hw/ocrdma/ocrdma_abi.h b/drivers/infiniband/hw/ocrdma/ocrdma_abi.h index a411a4e3193d..517ab20b727c 100644 --- a/drivers/infiniband/hw/ocrdma/ocrdma_abi.h +++ b/drivers/infiniband/hw/ocrdma/ocrdma_abi.h | |||
@@ -101,8 +101,6 @@ struct ocrdma_create_qp_uresp { | |||
101 | u32 rsvd1; | 101 | u32 rsvd1; |
102 | u32 num_wqe_allocated; | 102 | u32 num_wqe_allocated; |
103 | u32 num_rqe_allocated; | 103 | u32 num_rqe_allocated; |
104 | u32 free_wqe_delta; | ||
105 | u32 free_rqe_delta; | ||
106 | u32 db_sq_offset; | 104 | u32 db_sq_offset; |
107 | u32 db_rq_offset; | 105 | u32 db_rq_offset; |
108 | u32 db_shift; | 106 | u32 db_shift; |
@@ -126,8 +124,7 @@ struct ocrdma_create_srq_uresp { | |||
126 | u32 db_rq_offset; | 124 | u32 db_rq_offset; |
127 | u32 db_shift; | 125 | u32 db_shift; |
128 | 126 | ||
129 | u32 free_rqe_delta; | 127 | u64 rsvd2; |
130 | u32 rsvd2; | ||
131 | u64 rsvd3; | 128 | u64 rsvd3; |
132 | } __packed; | 129 | } __packed; |
133 | 130 | ||
diff --git a/drivers/infiniband/hw/ocrdma/ocrdma_hw.c b/drivers/infiniband/hw/ocrdma/ocrdma_hw.c index 9b204b1ba336..f26314fd5f6e 100644 --- a/drivers/infiniband/hw/ocrdma/ocrdma_hw.c +++ b/drivers/infiniband/hw/ocrdma/ocrdma_hw.c | |||
@@ -1990,19 +1990,12 @@ static void ocrdma_get_create_qp_rsp(struct ocrdma_create_qp_rsp *rsp, | |||
1990 | max_wqe_allocated = 1 << max_wqe_allocated; | 1990 | max_wqe_allocated = 1 << max_wqe_allocated; |
1991 | max_rqe_allocated = 1 << ((u16)rsp->max_wqe_rqe); | 1991 | max_rqe_allocated = 1 << ((u16)rsp->max_wqe_rqe); |
1992 | 1992 | ||
1993 | if (qp->dev->nic_info.dev_family == OCRDMA_GEN2_FAMILY) { | ||
1994 | qp->sq.free_delta = 0; | ||
1995 | qp->rq.free_delta = 1; | ||
1996 | } else | ||
1997 | qp->sq.free_delta = 1; | ||
1998 | |||
1999 | qp->sq.max_cnt = max_wqe_allocated; | 1993 | qp->sq.max_cnt = max_wqe_allocated; |
2000 | qp->sq.max_wqe_idx = max_wqe_allocated - 1; | 1994 | qp->sq.max_wqe_idx = max_wqe_allocated - 1; |
2001 | 1995 | ||
2002 | if (!attrs->srq) { | 1996 | if (!attrs->srq) { |
2003 | qp->rq.max_cnt = max_rqe_allocated; | 1997 | qp->rq.max_cnt = max_rqe_allocated; |
2004 | qp->rq.max_wqe_idx = max_rqe_allocated - 1; | 1998 | qp->rq.max_wqe_idx = max_rqe_allocated - 1; |
2005 | qp->rq.free_delta = 1; | ||
2006 | } | 1999 | } |
2007 | } | 2000 | } |
2008 | 2001 | ||
diff --git a/drivers/infiniband/hw/ocrdma/ocrdma_verbs.c b/drivers/infiniband/hw/ocrdma/ocrdma_verbs.c index e9f74d1b48f6..d16d172b6b6b 100644 --- a/drivers/infiniband/hw/ocrdma/ocrdma_verbs.c +++ b/drivers/infiniband/hw/ocrdma/ocrdma_verbs.c | |||
@@ -940,8 +940,6 @@ static int ocrdma_copy_qp_uresp(struct ocrdma_qp *qp, | |||
940 | uresp.db_rq_offset = OCRDMA_DB_RQ_OFFSET; | 940 | uresp.db_rq_offset = OCRDMA_DB_RQ_OFFSET; |
941 | uresp.db_shift = 16; | 941 | uresp.db_shift = 16; |
942 | } | 942 | } |
943 | uresp.free_wqe_delta = qp->sq.free_delta; | ||
944 | uresp.free_rqe_delta = qp->rq.free_delta; | ||
945 | 943 | ||
946 | if (qp->dpp_enabled) { | 944 | if (qp->dpp_enabled) { |
947 | uresp.dpp_credit = dpp_credit_lmt; | 945 | uresp.dpp_credit = dpp_credit_lmt; |
@@ -1307,8 +1305,6 @@ static int ocrdma_hwq_free_cnt(struct ocrdma_qp_hwq_info *q) | |||
1307 | free_cnt = (q->max_cnt - q->head) + q->tail; | 1305 | free_cnt = (q->max_cnt - q->head) + q->tail; |
1308 | else | 1306 | else |
1309 | free_cnt = q->tail - q->head; | 1307 | free_cnt = q->tail - q->head; |
1310 | if (q->free_delta) | ||
1311 | free_cnt -= q->free_delta; | ||
1312 | return free_cnt; | 1308 | return free_cnt; |
1313 | } | 1309 | } |
1314 | 1310 | ||
@@ -1501,7 +1497,6 @@ static int ocrdma_copy_srq_uresp(struct ocrdma_srq *srq, struct ib_udata *udata) | |||
1501 | (srq->pd->id * srq->dev->nic_info.db_page_size); | 1497 | (srq->pd->id * srq->dev->nic_info.db_page_size); |
1502 | uresp.db_page_size = srq->dev->nic_info.db_page_size; | 1498 | uresp.db_page_size = srq->dev->nic_info.db_page_size; |
1503 | uresp.num_rqe_allocated = srq->rq.max_cnt; | 1499 | uresp.num_rqe_allocated = srq->rq.max_cnt; |
1504 | uresp.free_rqe_delta = 1; | ||
1505 | if (srq->dev->nic_info.dev_family == OCRDMA_GEN2_FAMILY) { | 1500 | if (srq->dev->nic_info.dev_family == OCRDMA_GEN2_FAMILY) { |
1506 | uresp.db_rq_offset = OCRDMA_DB_GEN2_RQ1_OFFSET; | 1501 | uresp.db_rq_offset = OCRDMA_DB_GEN2_RQ1_OFFSET; |
1507 | uresp.db_shift = 24; | 1502 | uresp.db_shift = 24; |