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 | ||
