diff options
Diffstat (limited to 'drivers/infiniband/hw/qib/qib_qp.c')
| -rw-r--r-- | drivers/infiniband/hw/qib/qib_qp.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/drivers/infiniband/hw/qib/qib_qp.c b/drivers/infiniband/hw/qib/qib_qp.c index 7e7e16fbee99..1ce56b51ab1a 100644 --- a/drivers/infiniband/hw/qib/qib_qp.c +++ b/drivers/infiniband/hw/qib/qib_qp.c | |||
| @@ -1038,6 +1038,11 @@ struct ib_qp *qib_create_qp(struct ib_pd *ibpd, | |||
| 1038 | goto bail_swq; | 1038 | goto bail_swq; |
| 1039 | } | 1039 | } |
| 1040 | RCU_INIT_POINTER(qp->next, NULL); | 1040 | RCU_INIT_POINTER(qp->next, NULL); |
| 1041 | qp->s_hdr = kzalloc(sizeof(*qp->s_hdr), GFP_KERNEL); | ||
| 1042 | if (!qp->s_hdr) { | ||
| 1043 | ret = ERR_PTR(-ENOMEM); | ||
| 1044 | goto bail_qp; | ||
| 1045 | } | ||
| 1041 | qp->timeout_jiffies = | 1046 | qp->timeout_jiffies = |
| 1042 | usecs_to_jiffies((4096UL * (1UL << qp->timeout)) / | 1047 | usecs_to_jiffies((4096UL * (1UL << qp->timeout)) / |
| 1043 | 1000UL); | 1048 | 1000UL); |
| @@ -1159,6 +1164,7 @@ bail_ip: | |||
| 1159 | vfree(qp->r_rq.wq); | 1164 | vfree(qp->r_rq.wq); |
| 1160 | free_qpn(&dev->qpn_table, qp->ibqp.qp_num); | 1165 | free_qpn(&dev->qpn_table, qp->ibqp.qp_num); |
| 1161 | bail_qp: | 1166 | bail_qp: |
| 1167 | kfree(qp->s_hdr); | ||
| 1162 | kfree(qp); | 1168 | kfree(qp); |
| 1163 | bail_swq: | 1169 | bail_swq: |
| 1164 | vfree(swq); | 1170 | vfree(swq); |
| @@ -1214,6 +1220,7 @@ int qib_destroy_qp(struct ib_qp *ibqp) | |||
| 1214 | else | 1220 | else |
| 1215 | vfree(qp->r_rq.wq); | 1221 | vfree(qp->r_rq.wq); |
| 1216 | vfree(qp->s_wq); | 1222 | vfree(qp->s_wq); |
| 1223 | kfree(qp->s_hdr); | ||
| 1217 | kfree(qp); | 1224 | kfree(qp); |
| 1218 | return 0; | 1225 | return 0; |
| 1219 | } | 1226 | } |
