aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/infiniband/hw/cxgb4/qp.c13
1 files changed, 5 insertions, 8 deletions
diff --git a/drivers/infiniband/hw/cxgb4/qp.c b/drivers/infiniband/hw/cxgb4/qp.c
index 90833d701631..9fe6f1e84373 100644
--- a/drivers/infiniband/hw/cxgb4/qp.c
+++ b/drivers/infiniband/hw/cxgb4/qp.c
@@ -140,7 +140,7 @@ static int create_qp(struct c4iw_rdev *rdev, struct t4_wq *wq,
140 int wr_len; 140 int wr_len;
141 struct c4iw_wr_wait wr_wait; 141 struct c4iw_wr_wait wr_wait;
142 struct sk_buff *skb; 142 struct sk_buff *skb;
143 int ret; 143 int ret = 0;
144 int eqsize; 144 int eqsize;
145 145
146 wq->sq.qid = c4iw_get_qpid(rdev, uctx); 146 wq->sq.qid = c4iw_get_qpid(rdev, uctx);
@@ -180,17 +180,14 @@ static int create_qp(struct c4iw_rdev *rdev, struct t4_wq *wq,
180 } 180 }
181 181
182 if (user) { 182 if (user) {
183 ret = alloc_oc_sq(rdev, &wq->sq); 183 if (alloc_oc_sq(rdev, &wq->sq) && alloc_host_sq(rdev, &wq->sq))
184 if (ret)
185 goto free_hwaddr; 184 goto free_hwaddr;
186 185 } else {
187 ret = alloc_host_sq(rdev, &wq->sq);
188 if (ret)
189 goto free_sq;
190 } else
191 ret = alloc_host_sq(rdev, &wq->sq); 186 ret = alloc_host_sq(rdev, &wq->sq);
192 if (ret) 187 if (ret)
193 goto free_hwaddr; 188 goto free_hwaddr;
189 }
190
194 memset(wq->sq.queue, 0, wq->sq.memsize); 191 memset(wq->sq.queue, 0, wq->sq.memsize);
195 dma_unmap_addr_set(&wq->sq, mapping, wq->sq.dma_addr); 192 dma_unmap_addr_set(&wq->sq, mapping, wq->sq.dma_addr);
196 193