aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMike Marciniszyn <mike.marciniszyn@intel.com>2016-09-06 07:34:35 -0400
committerDoug Ledford <dledford@redhat.com>2016-09-16 14:35:27 -0400
commit4d6f85c3fa55e00ebde75a74b070f2ed4b93e869 (patch)
tree6b3caa27ab5681f1483163fd727b3e5781e7584a
parent4107b8a029995e4a2c928b395a12ebc67d8e3689 (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.c11
-rw-r--r--drivers/infiniband/hw/hfi1/rc.c9
-rw-r--r--drivers/infiniband/hw/hfi1/verbs.c4
-rw-r--r--drivers/infiniband/hw/hfi1/verbs_txreq.c2
-rw-r--r--drivers/infiniband/hw/qib/qib_driver.c3
-rw-r--r--drivers/infiniband/hw/qib/qib_rc.c12
-rw-r--r--drivers/infiniband/sw/rdmavt/qp.c5
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
510static int iowait_sleep( 508static 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
595bail: 594bail:
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) {