aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/infiniband
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/infiniband')
-rw-r--r--drivers/infiniband/hw/cxgb4/qp.c25
1 files changed, 13 insertions, 12 deletions
diff --git a/drivers/infiniband/hw/cxgb4/qp.c b/drivers/infiniband/hw/cxgb4/qp.c
index 70b1808a08f4..ed49ab345b6e 100644
--- a/drivers/infiniband/hw/cxgb4/qp.c
+++ b/drivers/infiniband/hw/cxgb4/qp.c
@@ -100,6 +100,16 @@ static int alloc_host_sq(struct c4iw_rdev *rdev, struct t4_sq *sq)
100 return 0; 100 return 0;
101} 101}
102 102
103static int alloc_sq(struct c4iw_rdev *rdev, struct t4_sq *sq, int user)
104{
105 int ret = -ENOSYS;
106 if (user)
107 ret = alloc_oc_sq(rdev, sq);
108 if (ret)
109 ret = alloc_host_sq(rdev, sq);
110 return ret;
111}
112
103static int destroy_qp(struct c4iw_rdev *rdev, struct t4_wq *wq, 113static int destroy_qp(struct c4iw_rdev *rdev, struct t4_wq *wq,
104 struct c4iw_dev_ucontext *uctx) 114 struct c4iw_dev_ucontext *uctx)
105{ 115{
@@ -168,18 +178,9 @@ static int create_qp(struct c4iw_rdev *rdev, struct t4_wq *wq,
168 goto free_sw_rq; 178 goto free_sw_rq;
169 } 179 }
170 180
171 if (user) { 181 ret = alloc_sq(rdev, &wq->sq, user);
172 ret = alloc_oc_sq(rdev, &wq->sq); 182 if (ret)
173 if (ret) 183 goto free_hwaddr;
174 goto free_hwaddr;
175
176 ret = alloc_host_sq(rdev, &wq->sq);
177 if (ret)
178 goto free_sq;
179 } else
180 ret = alloc_host_sq(rdev, &wq->sq);
181 if (ret)
182 goto free_hwaddr;
183 memset(wq->sq.queue, 0, wq->sq.memsize); 184 memset(wq->sq.queue, 0, wq->sq.memsize);
184 dma_unmap_addr_set(&wq->sq, mapping, wq->sq.dma_addr); 185 dma_unmap_addr_set(&wq->sq, mapping, wq->sq.dma_addr);
185 186