diff options
Diffstat (limited to 'drivers/infiniband/hw/cxgb3/iwch_qp.c')
-rw-r--r-- | drivers/infiniband/hw/cxgb3/iwch_qp.c | 17 |
1 files changed, 7 insertions, 10 deletions
diff --git a/drivers/infiniband/hw/cxgb3/iwch_qp.c b/drivers/infiniband/hw/cxgb3/iwch_qp.c index 19661b2f040..c758fbd5847 100644 --- a/drivers/infiniband/hw/cxgb3/iwch_qp.c +++ b/drivers/infiniband/hw/cxgb3/iwch_qp.c | |||
@@ -99,8 +99,8 @@ static int build_rdma_write(union t3_wr *wqe, struct ib_send_wr *wr, | |||
99 | if (wr->opcode == IB_WR_RDMA_WRITE_WITH_IMM) { | 99 | if (wr->opcode == IB_WR_RDMA_WRITE_WITH_IMM) { |
100 | plen = 4; | 100 | plen = 4; |
101 | wqe->write.sgl[0].stag = wr->ex.imm_data; | 101 | wqe->write.sgl[0].stag = wr->ex.imm_data; |
102 | wqe->write.sgl[0].len = __constant_cpu_to_be32(0); | 102 | wqe->write.sgl[0].len = cpu_to_be32(0); |
103 | wqe->write.num_sgle = __constant_cpu_to_be32(0); | 103 | wqe->write.num_sgle = cpu_to_be32(0); |
104 | *flit_cnt = 6; | 104 | *flit_cnt = 6; |
105 | } else { | 105 | } else { |
106 | plen = 0; | 106 | plen = 0; |
@@ -195,15 +195,12 @@ static int build_inv_stag(union t3_wr *wqe, struct ib_send_wr *wr, | |||
195 | return 0; | 195 | return 0; |
196 | } | 196 | } |
197 | 197 | ||
198 | /* | ||
199 | * TBD: this is going to be moved to firmware. Missing pdid/qpid check for now. | ||
200 | */ | ||
201 | static int iwch_sgl2pbl_map(struct iwch_dev *rhp, struct ib_sge *sg_list, | 198 | static int iwch_sgl2pbl_map(struct iwch_dev *rhp, struct ib_sge *sg_list, |
202 | u32 num_sgle, u32 * pbl_addr, u8 * page_size) | 199 | u32 num_sgle, u32 * pbl_addr, u8 * page_size) |
203 | { | 200 | { |
204 | int i; | 201 | int i; |
205 | struct iwch_mr *mhp; | 202 | struct iwch_mr *mhp; |
206 | u32 offset; | 203 | u64 offset; |
207 | for (i = 0; i < num_sgle; i++) { | 204 | for (i = 0; i < num_sgle; i++) { |
208 | 205 | ||
209 | mhp = get_mhp(rhp, (sg_list[i].lkey) >> 8); | 206 | mhp = get_mhp(rhp, (sg_list[i].lkey) >> 8); |
@@ -235,8 +232,8 @@ static int iwch_sgl2pbl_map(struct iwch_dev *rhp, struct ib_sge *sg_list, | |||
235 | return -EINVAL; | 232 | return -EINVAL; |
236 | } | 233 | } |
237 | offset = sg_list[i].addr - mhp->attr.va_fbo; | 234 | offset = sg_list[i].addr - mhp->attr.va_fbo; |
238 | offset += ((u32) mhp->attr.va_fbo) % | 235 | offset += mhp->attr.va_fbo & |
239 | (1UL << (12 + mhp->attr.page_size)); | 236 | ((1UL << (12 + mhp->attr.page_size)) - 1); |
240 | pbl_addr[i] = ((mhp->attr.pbl_addr - | 237 | pbl_addr[i] = ((mhp->attr.pbl_addr - |
241 | rhp->rdev.rnic_info.pbl_base) >> 3) + | 238 | rhp->rdev.rnic_info.pbl_base) >> 3) + |
242 | (offset >> (12 + mhp->attr.page_size)); | 239 | (offset >> (12 + mhp->attr.page_size)); |
@@ -266,8 +263,8 @@ static int build_rdma_recv(struct iwch_qp *qhp, union t3_wr *wqe, | |||
266 | wqe->recv.sgl[i].len = cpu_to_be32(wr->sg_list[i].length); | 263 | wqe->recv.sgl[i].len = cpu_to_be32(wr->sg_list[i].length); |
267 | 264 | ||
268 | /* to in the WQE == the offset into the page */ | 265 | /* to in the WQE == the offset into the page */ |
269 | wqe->recv.sgl[i].to = cpu_to_be64(((u32) wr->sg_list[i].addr) % | 266 | wqe->recv.sgl[i].to = cpu_to_be64(((u32)wr->sg_list[i].addr) & |
270 | (1UL << (12 + page_size[i]))); | 267 | ((1UL << (12 + page_size[i])) - 1)); |
271 | 268 | ||
272 | /* pbl_addr is the adapters address in the PBL */ | 269 | /* pbl_addr is the adapters address in the PBL */ |
273 | wqe->recv.pbl_addr[i] = cpu_to_be32(pbl_addr[i]); | 270 | wqe->recv.pbl_addr[i] = cpu_to_be32(pbl_addr[i]); |