diff options
-rw-r--r-- | drivers/infiniband/hw/cxgb4/qp.c | 25 |
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 | ||
103 | static 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 | |||
103 | static int destroy_qp(struct c4iw_rdev *rdev, struct t4_wq *wq, | 113 | static 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 | ||