diff options
| author | Mike Marciniszyn <mike.marciniszyn@intel.com> | 2016-09-06 07:34:35 -0400 |
|---|---|---|
| committer | Doug Ledford <dledford@redhat.com> | 2016-09-16 14:35:27 -0400 |
| commit | 4d6f85c3fa55e00ebde75a74b070f2ed4b93e869 (patch) | |
| tree | 6b3caa27ab5681f1483163fd727b3e5781e7584a | |
| parent | 4107b8a029995e4a2c928b395a12ebc67d8e3689 (diff) | |
IB/rdmavt, IB/qib, IB/hfi1: Use new QP put get routines
This improves readability and hides the reference count
mechanism from the client drivers.
Reviewed-by: Dennis Dalessandro <dennis.dalessandro@intel.com>
Signed-off-by: Mike Marciniszyn <mike.marciniszyn@intel.com>
Signed-off-by: Dennis Dalessandro <dennis.dalessandro@intel.com>
Signed-off-by: Doug Ledford <dledford@redhat.com>
| -rw-r--r-- | drivers/infiniband/hw/hfi1/qp.c | 11 | ||||
| -rw-r--r-- | drivers/infiniband/hw/hfi1/rc.c | 9 | ||||
| -rw-r--r-- | drivers/infiniband/hw/hfi1/verbs.c | 4 | ||||
| -rw-r--r-- | drivers/infiniband/hw/hfi1/verbs_txreq.c | 2 | ||||
| -rw-r--r-- | drivers/infiniband/hw/qib/qib_driver.c | 3 | ||||
| -rw-r--r-- | drivers/infiniband/hw/qib/qib_rc.c | 12 | ||||
| -rw-r--r-- | drivers/infiniband/sw/rdmavt/qp.c | 5 |
7 files changed, 20 insertions, 26 deletions
diff --git a/drivers/infiniband/hw/hfi1/qp.c b/drivers/infiniband/hw/hfi1/qp.c index 4e4d8317c281..63f56a8bb332 100644 --- a/drivers/infiniband/hw/hfi1/qp.c +++ b/drivers/infiniband/hw/hfi1/qp.c | |||
| @@ -202,8 +202,7 @@ static void flush_iowait(struct rvt_qp *qp) | |||
| 202 | write_seqlock_irqsave(&dev->iowait_lock, flags); | 202 | write_seqlock_irqsave(&dev->iowait_lock, flags); |
| 203 | if (!list_empty(&priv->s_iowait.list)) { | 203 | if (!list_empty(&priv->s_iowait.list)) { |
| 204 | list_del_init(&priv->s_iowait.list); | 204 | list_del_init(&priv->s_iowait.list); |
| 205 | if (atomic_dec_and_test(&qp->refcount)) | 205 | rvt_put_qp(qp); |
| 206 | wake_up(&qp->wait); | ||
| 207 | } | 206 | } |
| 208 | write_sequnlock_irqrestore(&dev->iowait_lock, flags); | 207 | write_sequnlock_irqrestore(&dev->iowait_lock, flags); |
| 209 | } | 208 | } |
| @@ -503,8 +502,7 @@ void hfi1_qp_wakeup(struct rvt_qp *qp, u32 flag) | |||
| 503 | } | 502 | } |
| 504 | spin_unlock_irqrestore(&qp->s_lock, flags); | 503 | spin_unlock_irqrestore(&qp->s_lock, flags); |
| 505 | /* Notify hfi1_destroy_qp() if it is waiting. */ | 504 | /* Notify hfi1_destroy_qp() if it is waiting. */ |
| 506 | if (atomic_dec_and_test(&qp->refcount)) | 505 | rvt_put_qp(qp); |
| 507 | wake_up(&qp->wait); | ||
| 508 | } | 506 | } |
| 509 | 507 | ||
| 510 | static int iowait_sleep( | 508 | static int iowait_sleep( |
| @@ -544,7 +542,7 @@ static int iowait_sleep( | |||
| 544 | qp->s_flags |= RVT_S_WAIT_DMA_DESC; | 542 | qp->s_flags |= RVT_S_WAIT_DMA_DESC; |
| 545 | list_add_tail(&priv->s_iowait.list, &sde->dmawait); | 543 | list_add_tail(&priv->s_iowait.list, &sde->dmawait); |
| 546 | trace_hfi1_qpsleep(qp, RVT_S_WAIT_DMA_DESC); | 544 | trace_hfi1_qpsleep(qp, RVT_S_WAIT_DMA_DESC); |
| 547 | atomic_inc(&qp->refcount); | 545 | rvt_get_qp(qp); |
| 548 | } | 546 | } |
| 549 | write_sequnlock(&dev->iowait_lock); | 547 | write_sequnlock(&dev->iowait_lock); |
| 550 | qp->s_flags &= ~RVT_S_BUSY; | 548 | qp->s_flags &= ~RVT_S_BUSY; |
| @@ -963,8 +961,7 @@ void notify_error_qp(struct rvt_qp *qp) | |||
| 963 | if (!list_empty(&priv->s_iowait.list) && !(qp->s_flags & RVT_S_BUSY)) { | 961 | if (!list_empty(&priv->s_iowait.list) && !(qp->s_flags & RVT_S_BUSY)) { |
| 964 | qp->s_flags &= ~RVT_S_ANY_WAIT_IO; | 962 | qp->s_flags &= ~RVT_S_ANY_WAIT_IO; |
| 965 | list_del_init(&priv->s_iowait.list); | 963 | list_del_init(&priv->s_iowait.list); |
| 966 | if (atomic_dec_and_test(&qp->refcount)) | 964 | rvt_put_qp(qp); |
| 967 | wake_up(&qp->wait); | ||
| 968 | } | 965 | } |
| 969 | write_sequnlock(&dev->iowait_lock); | 966 | write_sequnlock(&dev->iowait_lock); |
| 970 | 967 | ||
diff --git a/drivers/infiniband/hw/hfi1/rc.c b/drivers/infiniband/hw/hfi1/rc.c index 5da190e6011b..acf0eb87ed2a 100644 --- a/drivers/infiniband/hw/hfi1/rc.c +++ b/drivers/infiniband/hw/hfi1/rc.c | |||
| @@ -1389,7 +1389,7 @@ static int do_rc_ack(struct rvt_qp *qp, u32 aeth, u32 psn, int opcode, | |||
| 1389 | restart_rc(qp, qp->s_last_psn + 1, 0); | 1389 | restart_rc(qp, qp->s_last_psn + 1, 0); |
| 1390 | if (list_empty(&qp->rspwait)) { | 1390 | if (list_empty(&qp->rspwait)) { |
| 1391 | qp->r_flags |= RVT_R_RSP_SEND; | 1391 | qp->r_flags |= RVT_R_RSP_SEND; |
| 1392 | atomic_inc(&qp->refcount); | 1392 | rvt_get_qp(qp); |
| 1393 | list_add_tail(&qp->rspwait, | 1393 | list_add_tail(&qp->rspwait, |
| 1394 | &rcd->qp_wait_list); | 1394 | &rcd->qp_wait_list); |
| 1395 | } | 1395 | } |
| @@ -1573,7 +1573,7 @@ static void rdma_seq_err(struct rvt_qp *qp, struct hfi1_ibport *ibp, u32 psn, | |||
| 1573 | restart_rc(qp, qp->s_last_psn + 1, 0); | 1573 | restart_rc(qp, qp->s_last_psn + 1, 0); |
| 1574 | if (list_empty(&qp->rspwait)) { | 1574 | if (list_empty(&qp->rspwait)) { |
| 1575 | qp->r_flags |= RVT_R_RSP_SEND; | 1575 | qp->r_flags |= RVT_R_RSP_SEND; |
| 1576 | atomic_inc(&qp->refcount); | 1576 | rvt_get_qp(qp); |
| 1577 | list_add_tail(&qp->rspwait, &rcd->qp_wait_list); | 1577 | list_add_tail(&qp->rspwait, &rcd->qp_wait_list); |
| 1578 | } | 1578 | } |
| 1579 | } | 1579 | } |
| @@ -1782,7 +1782,7 @@ static inline void rc_defered_ack(struct hfi1_ctxtdata *rcd, | |||
| 1782 | { | 1782 | { |
| 1783 | if (list_empty(&qp->rspwait)) { | 1783 | if (list_empty(&qp->rspwait)) { |
| 1784 | qp->r_flags |= RVT_R_RSP_NAK; | 1784 | qp->r_flags |= RVT_R_RSP_NAK; |
| 1785 | atomic_inc(&qp->refcount); | 1785 | rvt_get_qp(qp); |
| 1786 | list_add_tail(&qp->rspwait, &rcd->qp_wait_list); | 1786 | list_add_tail(&qp->rspwait, &rcd->qp_wait_list); |
| 1787 | } | 1787 | } |
| 1788 | } | 1788 | } |
| @@ -1796,8 +1796,7 @@ static inline void rc_cancel_ack(struct rvt_qp *qp) | |||
| 1796 | return; | 1796 | return; |
| 1797 | list_del_init(&qp->rspwait); | 1797 | list_del_init(&qp->rspwait); |
| 1798 | qp->r_flags &= ~RVT_R_RSP_NAK; | 1798 | qp->r_flags &= ~RVT_R_RSP_NAK; |
| 1799 | if (atomic_dec_and_test(&qp->refcount)) | 1799 | rvt_put_qp(qp); |
| 1800 | wake_up(&qp->wait); | ||
| 1801 | } | 1800 | } |
| 1802 | 1801 | ||
| 1803 | /** | 1802 | /** |
diff --git a/drivers/infiniband/hw/hfi1/verbs.c b/drivers/infiniband/hw/hfi1/verbs.c index 2b359540901d..92a61c47dedc 100644 --- a/drivers/infiniband/hw/hfi1/verbs.c +++ b/drivers/infiniband/hw/hfi1/verbs.c | |||
| @@ -748,7 +748,7 @@ static int wait_kmem(struct hfi1_ibdev *dev, | |||
| 748 | qp->s_flags |= RVT_S_WAIT_KMEM; | 748 | qp->s_flags |= RVT_S_WAIT_KMEM; |
| 749 | list_add_tail(&priv->s_iowait.list, &dev->memwait); | 749 | list_add_tail(&priv->s_iowait.list, &dev->memwait); |
| 750 | trace_hfi1_qpsleep(qp, RVT_S_WAIT_KMEM); | 750 | trace_hfi1_qpsleep(qp, RVT_S_WAIT_KMEM); |
| 751 | atomic_inc(&qp->refcount); | 751 | rvt_get_qp(qp); |
| 752 | } | 752 | } |
| 753 | write_sequnlock(&dev->iowait_lock); | 753 | write_sequnlock(&dev->iowait_lock); |
| 754 | qp->s_flags &= ~RVT_S_BUSY; | 754 | qp->s_flags &= ~RVT_S_BUSY; |
| @@ -959,7 +959,7 @@ static int pio_wait(struct rvt_qp *qp, | |||
| 959 | was_empty = list_empty(&sc->piowait); | 959 | was_empty = list_empty(&sc->piowait); |
| 960 | list_add_tail(&priv->s_iowait.list, &sc->piowait); | 960 | list_add_tail(&priv->s_iowait.list, &sc->piowait); |
| 961 | trace_hfi1_qpsleep(qp, RVT_S_WAIT_PIO); | 961 | trace_hfi1_qpsleep(qp, RVT_S_WAIT_PIO); |
| 962 | atomic_inc(&qp->refcount); | 962 | rvt_get_qp(qp); |
| 963 | /* counting: only call wantpiobuf_intr if first user */ | 963 | /* counting: only call wantpiobuf_intr if first user */ |
| 964 | if (was_empty) | 964 | if (was_empty) |
| 965 | hfi1_sc_wantpiobuf_intr(sc, 1); | 965 | hfi1_sc_wantpiobuf_intr(sc, 1); |
diff --git a/drivers/infiniband/hw/hfi1/verbs_txreq.c b/drivers/infiniband/hw/hfi1/verbs_txreq.c index d8fb056526f8..094ab829ec42 100644 --- a/drivers/infiniband/hw/hfi1/verbs_txreq.c +++ b/drivers/infiniband/hw/hfi1/verbs_txreq.c | |||
| @@ -109,7 +109,7 @@ struct verbs_txreq *__get_txreq(struct hfi1_ibdev *dev, | |||
| 109 | qp->s_flags |= RVT_S_WAIT_TX; | 109 | qp->s_flags |= RVT_S_WAIT_TX; |
| 110 | list_add_tail(&priv->s_iowait.list, &dev->txwait); | 110 | list_add_tail(&priv->s_iowait.list, &dev->txwait); |
| 111 | trace_hfi1_qpsleep(qp, RVT_S_WAIT_TX); | 111 | trace_hfi1_qpsleep(qp, RVT_S_WAIT_TX); |
| 112 | atomic_inc(&qp->refcount); | 112 | rvt_get_qp(qp); |
| 113 | } | 113 | } |
| 114 | qp->s_flags &= ~RVT_S_BUSY; | 114 | qp->s_flags &= ~RVT_S_BUSY; |
| 115 | } | 115 | } |
diff --git a/drivers/infiniband/hw/qib/qib_driver.c b/drivers/infiniband/hw/qib/qib_driver.c index 67ee6438cf59..df77d5f6bb3a 100644 --- a/drivers/infiniband/hw/qib/qib_driver.c +++ b/drivers/infiniband/hw/qib/qib_driver.c | |||
| @@ -588,8 +588,7 @@ move_along: | |||
| 588 | qib_schedule_send(qp); | 588 | qib_schedule_send(qp); |
| 589 | spin_unlock_irqrestore(&qp->s_lock, flags); | 589 | spin_unlock_irqrestore(&qp->s_lock, flags); |
| 590 | } | 590 | } |
| 591 | if (atomic_dec_and_test(&qp->refcount)) | 591 | rvt_put_qp(qp); |
| 592 | wake_up(&qp->wait); | ||
| 593 | } | 592 | } |
| 594 | 593 | ||
| 595 | bail: | 594 | bail: |
diff --git a/drivers/infiniband/hw/qib/qib_rc.c b/drivers/infiniband/hw/qib/qib_rc.c index 444028a3582a..38cd87135b19 100644 --- a/drivers/infiniband/hw/qib/qib_rc.c +++ b/drivers/infiniband/hw/qib/qib_rc.c | |||
| @@ -1177,7 +1177,7 @@ static int do_rc_ack(struct rvt_qp *qp, u32 aeth, u32 psn, int opcode, | |||
| 1177 | qib_restart_rc(qp, qp->s_last_psn + 1, 0); | 1177 | qib_restart_rc(qp, qp->s_last_psn + 1, 0); |
| 1178 | if (list_empty(&qp->rspwait)) { | 1178 | if (list_empty(&qp->rspwait)) { |
| 1179 | qp->r_flags |= RVT_R_RSP_SEND; | 1179 | qp->r_flags |= RVT_R_RSP_SEND; |
| 1180 | atomic_inc(&qp->refcount); | 1180 | rvt_get_qp(qp); |
| 1181 | list_add_tail(&qp->rspwait, | 1181 | list_add_tail(&qp->rspwait, |
| 1182 | &rcd->qp_wait_list); | 1182 | &rcd->qp_wait_list); |
| 1183 | } | 1183 | } |
| @@ -1361,7 +1361,7 @@ static void rdma_seq_err(struct rvt_qp *qp, struct qib_ibport *ibp, u32 psn, | |||
| 1361 | qib_restart_rc(qp, qp->s_last_psn + 1, 0); | 1361 | qib_restart_rc(qp, qp->s_last_psn + 1, 0); |
| 1362 | if (list_empty(&qp->rspwait)) { | 1362 | if (list_empty(&qp->rspwait)) { |
| 1363 | qp->r_flags |= RVT_R_RSP_SEND; | 1363 | qp->r_flags |= RVT_R_RSP_SEND; |
| 1364 | atomic_inc(&qp->refcount); | 1364 | rvt_get_qp(qp); |
| 1365 | list_add_tail(&qp->rspwait, &rcd->qp_wait_list); | 1365 | list_add_tail(&qp->rspwait, &rcd->qp_wait_list); |
| 1366 | } | 1366 | } |
| 1367 | } | 1367 | } |
| @@ -1640,7 +1640,7 @@ static int qib_rc_rcv_error(struct qib_other_headers *ohdr, | |||
| 1640 | */ | 1640 | */ |
| 1641 | if (list_empty(&qp->rspwait)) { | 1641 | if (list_empty(&qp->rspwait)) { |
| 1642 | qp->r_flags |= RVT_R_RSP_NAK; | 1642 | qp->r_flags |= RVT_R_RSP_NAK; |
| 1643 | atomic_inc(&qp->refcount); | 1643 | rvt_get_qp(qp); |
| 1644 | list_add_tail(&qp->rspwait, &rcd->qp_wait_list); | 1644 | list_add_tail(&qp->rspwait, &rcd->qp_wait_list); |
| 1645 | } | 1645 | } |
| 1646 | } | 1646 | } |
| @@ -2233,7 +2233,7 @@ rnr_nak: | |||
| 2233 | /* Queue RNR NAK for later */ | 2233 | /* Queue RNR NAK for later */ |
| 2234 | if (list_empty(&qp->rspwait)) { | 2234 | if (list_empty(&qp->rspwait)) { |
| 2235 | qp->r_flags |= RVT_R_RSP_NAK; | 2235 | qp->r_flags |= RVT_R_RSP_NAK; |
| 2236 | atomic_inc(&qp->refcount); | 2236 | rvt_get_qp(qp); |
| 2237 | list_add_tail(&qp->rspwait, &rcd->qp_wait_list); | 2237 | list_add_tail(&qp->rspwait, &rcd->qp_wait_list); |
| 2238 | } | 2238 | } |
| 2239 | return; | 2239 | return; |
| @@ -2245,7 +2245,7 @@ nack_op_err: | |||
| 2245 | /* Queue NAK for later */ | 2245 | /* Queue NAK for later */ |
| 2246 | if (list_empty(&qp->rspwait)) { | 2246 | if (list_empty(&qp->rspwait)) { |
| 2247 | qp->r_flags |= RVT_R_RSP_NAK; | 2247 | qp->r_flags |= RVT_R_RSP_NAK; |
| 2248 | atomic_inc(&qp->refcount); | 2248 | rvt_get_qp(qp); |
| 2249 | list_add_tail(&qp->rspwait, &rcd->qp_wait_list); | 2249 | list_add_tail(&qp->rspwait, &rcd->qp_wait_list); |
| 2250 | } | 2250 | } |
| 2251 | return; | 2251 | return; |
| @@ -2259,7 +2259,7 @@ nack_inv: | |||
| 2259 | /* Queue NAK for later */ | 2259 | /* Queue NAK for later */ |
| 2260 | if (list_empty(&qp->rspwait)) { | 2260 | if (list_empty(&qp->rspwait)) { |
| 2261 | qp->r_flags |= RVT_R_RSP_NAK; | 2261 | qp->r_flags |= RVT_R_RSP_NAK; |
| 2262 | atomic_inc(&qp->refcount); | 2262 | rvt_get_qp(qp); |
| 2263 | list_add_tail(&qp->rspwait, &rcd->qp_wait_list); | 2263 | list_add_tail(&qp->rspwait, &rcd->qp_wait_list); |
| 2264 | } | 2264 | } |
| 2265 | return; | 2265 | return; |
diff --git a/drivers/infiniband/sw/rdmavt/qp.c b/drivers/infiniband/sw/rdmavt/qp.c index 870b4f212fbc..da5c8d6eed99 100644 --- a/drivers/infiniband/sw/rdmavt/qp.c +++ b/drivers/infiniband/sw/rdmavt/qp.c | |||
| @@ -488,8 +488,7 @@ static void rvt_remove_qp(struct rvt_dev_info *rdi, struct rvt_qp *qp) | |||
| 488 | spin_unlock_irqrestore(&rdi->qp_dev->qpt_lock, flags); | 488 | spin_unlock_irqrestore(&rdi->qp_dev->qpt_lock, flags); |
| 489 | if (removed) { | 489 | if (removed) { |
| 490 | synchronize_rcu(); | 490 | synchronize_rcu(); |
| 491 | if (atomic_dec_and_test(&qp->refcount)) | 491 | rvt_put_qp(qp); |
| 492 | wake_up(&qp->wait); | ||
| 493 | } | 492 | } |
| 494 | } | 493 | } |
| 495 | 494 | ||
| @@ -980,7 +979,7 @@ static void rvt_insert_qp(struct rvt_dev_info *rdi, struct rvt_qp *qp) | |||
| 980 | struct rvt_ibport *rvp = rdi->ports[qp->port_num - 1]; | 979 | struct rvt_ibport *rvp = rdi->ports[qp->port_num - 1]; |
| 981 | unsigned long flags; | 980 | unsigned long flags; |
| 982 | 981 | ||
| 983 | atomic_inc(&qp->refcount); | 982 | rvt_get_qp(qp); |
| 984 | spin_lock_irqsave(&rdi->qp_dev->qpt_lock, flags); | 983 | spin_lock_irqsave(&rdi->qp_dev->qpt_lock, flags); |
| 985 | 984 | ||
| 986 | if (qp->ibqp.qp_num <= 1) { | 985 | if (qp->ibqp.qp_num <= 1) { |
