diff options
-rw-r--r-- | drivers/infiniband/sw/rxe/rxe_loc.h | 2 | ||||
-rw-r--r-- | drivers/infiniband/sw/rxe/rxe_qp.c | 24 | ||||
-rw-r--r-- | drivers/infiniband/sw/rxe/rxe_resp.c | 2 |
3 files changed, 15 insertions, 13 deletions
diff --git a/drivers/infiniband/sw/rxe/rxe_loc.h b/drivers/infiniband/sw/rxe/rxe_loc.h index 4a5484ef604f..73849a5a91b3 100644 --- a/drivers/infiniband/sw/rxe/rxe_loc.h +++ b/drivers/infiniband/sw/rxe/rxe_loc.h | |||
@@ -198,7 +198,7 @@ void free_rd_atomic_resource(struct rxe_qp *qp, struct resp_res *res); | |||
198 | static inline void rxe_advance_resp_resource(struct rxe_qp *qp) | 198 | static inline void rxe_advance_resp_resource(struct rxe_qp *qp) |
199 | { | 199 | { |
200 | qp->resp.res_head++; | 200 | qp->resp.res_head++; |
201 | if (unlikely(qp->resp.res_head == qp->attr.max_rd_atomic)) | 201 | if (unlikely(qp->resp.res_head == qp->attr.max_dest_rd_atomic)) |
202 | qp->resp.res_head = 0; | 202 | qp->resp.res_head = 0; |
203 | } | 203 | } |
204 | 204 | ||
diff --git a/drivers/infiniband/sw/rxe/rxe_qp.c b/drivers/infiniband/sw/rxe/rxe_qp.c index 22ba24f2a2c1..62c37a563df9 100644 --- a/drivers/infiniband/sw/rxe/rxe_qp.c +++ b/drivers/infiniband/sw/rxe/rxe_qp.c | |||
@@ -146,7 +146,7 @@ static void free_rd_atomic_resources(struct rxe_qp *qp) | |||
146 | if (qp->resp.resources) { | 146 | if (qp->resp.resources) { |
147 | int i; | 147 | int i; |
148 | 148 | ||
149 | for (i = 0; i < qp->attr.max_rd_atomic; i++) { | 149 | for (i = 0; i < qp->attr.max_dest_rd_atomic; i++) { |
150 | struct resp_res *res = &qp->resp.resources[i]; | 150 | struct resp_res *res = &qp->resp.resources[i]; |
151 | 151 | ||
152 | free_rd_atomic_resource(qp, res); | 152 | free_rd_atomic_resource(qp, res); |
@@ -174,7 +174,7 @@ static void cleanup_rd_atomic_resources(struct rxe_qp *qp) | |||
174 | struct resp_res *res; | 174 | struct resp_res *res; |
175 | 175 | ||
176 | if (qp->resp.resources) { | 176 | if (qp->resp.resources) { |
177 | for (i = 0; i < qp->attr.max_rd_atomic; i++) { | 177 | for (i = 0; i < qp->attr.max_dest_rd_atomic; i++) { |
178 | res = &qp->resp.resources[i]; | 178 | res = &qp->resp.resources[i]; |
179 | free_rd_atomic_resource(qp, res); | 179 | free_rd_atomic_resource(qp, res); |
180 | } | 180 | } |
@@ -596,14 +596,21 @@ int rxe_qp_from_attr(struct rxe_qp *qp, struct ib_qp_attr *attr, int mask, | |||
596 | if (mask & IB_QP_MAX_QP_RD_ATOMIC) { | 596 | if (mask & IB_QP_MAX_QP_RD_ATOMIC) { |
597 | int max_rd_atomic = __roundup_pow_of_two(attr->max_rd_atomic); | 597 | int max_rd_atomic = __roundup_pow_of_two(attr->max_rd_atomic); |
598 | 598 | ||
599 | qp->attr.max_rd_atomic = max_rd_atomic; | ||
600 | atomic_set(&qp->req.rd_atomic, max_rd_atomic); | ||
601 | } | ||
602 | |||
603 | if (mask & IB_QP_MAX_DEST_RD_ATOMIC) { | ||
604 | int max_dest_rd_atomic = | ||
605 | __roundup_pow_of_two(attr->max_dest_rd_atomic); | ||
606 | |||
607 | qp->attr.max_dest_rd_atomic = max_dest_rd_atomic; | ||
608 | |||
599 | free_rd_atomic_resources(qp); | 609 | free_rd_atomic_resources(qp); |
600 | 610 | ||
601 | err = alloc_rd_atomic_resources(qp, max_rd_atomic); | 611 | err = alloc_rd_atomic_resources(qp, max_dest_rd_atomic); |
602 | if (err) | 612 | if (err) |
603 | return err; | 613 | return err; |
604 | |||
605 | qp->attr.max_rd_atomic = max_rd_atomic; | ||
606 | atomic_set(&qp->req.rd_atomic, max_rd_atomic); | ||
607 | } | 614 | } |
608 | 615 | ||
609 | if (mask & IB_QP_CUR_STATE) | 616 | if (mask & IB_QP_CUR_STATE) |
@@ -701,11 +708,6 @@ int rxe_qp_from_attr(struct rxe_qp *qp, struct ib_qp_attr *attr, int mask, | |||
701 | pr_debug("set req psn = 0x%x\n", qp->req.psn); | 708 | pr_debug("set req psn = 0x%x\n", qp->req.psn); |
702 | } | 709 | } |
703 | 710 | ||
704 | if (mask & IB_QP_MAX_DEST_RD_ATOMIC) { | ||
705 | qp->attr.max_dest_rd_atomic = | ||
706 | __roundup_pow_of_two(attr->max_dest_rd_atomic); | ||
707 | } | ||
708 | |||
709 | if (mask & IB_QP_PATH_MIG_STATE) | 711 | if (mask & IB_QP_PATH_MIG_STATE) |
710 | qp->attr.path_mig_state = attr->path_mig_state; | 712 | qp->attr.path_mig_state = attr->path_mig_state; |
711 | 713 | ||
diff --git a/drivers/infiniband/sw/rxe/rxe_resp.c b/drivers/infiniband/sw/rxe/rxe_resp.c index 3e0f0f2baace..d544b5e84797 100644 --- a/drivers/infiniband/sw/rxe/rxe_resp.c +++ b/drivers/infiniband/sw/rxe/rxe_resp.c | |||
@@ -383,7 +383,7 @@ static enum resp_states check_resource(struct rxe_qp *qp, | |||
383 | * too many read/atomic ops, we just | 383 | * too many read/atomic ops, we just |
384 | * recycle the responder resource queue | 384 | * recycle the responder resource queue |
385 | */ | 385 | */ |
386 | if (likely(qp->attr.max_rd_atomic > 0)) | 386 | if (likely(qp->attr.max_dest_rd_atomic > 0)) |
387 | return RESPST_CHK_LENGTH; | 387 | return RESPST_CHK_LENGTH; |
388 | else | 388 | else |
389 | return RESPST_ERR_TOO_MANY_RDMA_ATM_REQ; | 389 | return RESPST_ERR_TOO_MANY_RDMA_ATM_REQ; |