summaryrefslogtreecommitdiff
path: root/drivers/infiniband/hw/qib
diff options
context:
space:
mode:
authorHarish Chegondi <harish.chegondi@intel.com>2016-02-04 01:20:35 +0300
committerDoug Ledford <dledford@redhat.com>2016-03-11 04:37:34 +0300
commit8e4c066634aa35e7da08981439f4f1b6693fd9fb (patch)
treec73bb6543472be45412f903583080468820a5ebf /drivers/infiniband/hw/qib
parent70696ea75b0b9d2cb220a09ea19d72a49f501d8e (diff)
downloadlinux-8e4c066634aa35e7da08981439f4f1b6693fd9fb.tar.xz
IB/qib: Remove destroy queue pair code
Destroy QP functionality in rdmavt will be used instead. Remove the remove_qp function being called exclusively by destroy qp code. Reviewed-by: Dennis Dalessandro <dennis.dalessandro@intel.com> Signed-off-by: Harish Chegondi <harish.chegondi@intel.com> Signed-off-by: Doug Ledford <dledford@redhat.com>
Diffstat (limited to 'drivers/infiniband/hw/qib')
-rw-r--r--drivers/infiniband/hw/qib/qib_qp.c105
-rw-r--r--drivers/infiniband/hw/qib/qib_verbs.c1
-rw-r--r--drivers/infiniband/hw/qib/qib_verbs.h2
3 files changed, 0 insertions, 108 deletions
diff --git a/drivers/infiniband/hw/qib/qib_qp.c b/drivers/infiniband/hw/qib/qib_qp.c
index cee4aa35ab70..45bed5f2bba4 100644
--- a/drivers/infiniband/hw/qib/qib_qp.c
+++ b/drivers/infiniband/hw/qib/qib_qp.c
@@ -209,58 +209,6 @@ bail:
return ret;
}
-static inline unsigned qpn_hash(struct qib_ibdev *dev, u32 qpn)
-{
- return hash_32(qpn, dev->rdi.qp_dev->qp_table_bits);
-}
-
-/*
- * Remove the QP from the table so it can't be found asynchronously by
- * the receive interrupt routine.
- */
-static void remove_qp(struct qib_ibdev *dev, struct rvt_qp *qp)
-{
- struct qib_ibport *ibp = to_iport(qp->ibqp.device, qp->port_num);
- unsigned n = qpn_hash(dev, qp->ibqp.qp_num);
- unsigned long flags;
- int removed = 1;
- spinlock_t *qpt_lock_ptr; /* Pointer to make checkpatch happy */
-
- spin_lock_irqsave(&dev->rdi.qp_dev->qpt_lock, flags);
-
- qpt_lock_ptr = &dev->rdi.qp_dev->qpt_lock;
- if (rcu_dereference_protected(ibp->rvp.qp[0],
- lockdep_is_held(qpt_lock_ptr)) == qp) {
- RCU_INIT_POINTER(ibp->rvp.qp[0], NULL);
- } else if (rcu_dereference_protected(ibp->rvp.qp[1],
- lockdep_is_held(&dev->rdi.qp_dev->qpt_lock)) == qp) {
- RCU_INIT_POINTER(ibp->rvp.qp[1], NULL);
- } else {
- struct rvt_qp *q;
- struct rvt_qp __rcu **qpp;
-
- removed = 0;
- qpp = &dev->rdi.qp_dev->qp_table[n];
- for (; (q = rcu_dereference_protected(*qpp,
- lockdep_is_held(qpt_lock_ptr))) != NULL;
- qpp = &q->next)
- if (q == qp) {
- RCU_INIT_POINTER(*qpp,
- rcu_dereference_protected(qp->next,
- lockdep_is_held(qpt_lock_ptr)));
- removed = 1;
- break;
- }
- }
-
- spin_unlock_irqrestore(&dev->rdi.qp_dev->qpt_lock, flags);
- if (removed) {
- synchronize_rcu();
- if (atomic_dec_and_test(&qp->refcount))
- wake_up(&qp->wait);
- }
-}
-
/**
* qib_free_all_qps - check for QPs still in use
*/
@@ -489,59 +437,6 @@ void flush_qp_waiters(struct rvt_qp *qp)
}
/**
- * qib_destroy_qp - destroy a queue pair
- * @ibqp: the queue pair to destroy
- *
- * Returns 0 on success.
- *
- * Note that this can be called while the QP is actively sending or
- * receiving!
- */
-int qib_destroy_qp(struct ib_qp *ibqp)
-{
- struct rvt_qp *qp = ibqp_to_rvtqp(ibqp);
- struct qib_ibdev *dev = to_idev(ibqp->device);
- struct qib_qp_priv *priv = qp->priv;
-
- /* Make sure HW and driver activity is stopped. */
- spin_lock_irq(&qp->s_lock);
- if (qp->state != IB_QPS_RESET) {
- qp->state = IB_QPS_RESET;
- spin_lock(&dev->rdi.pending_lock);
- if (!list_empty(&priv->iowait))
- list_del_init(&priv->iowait);
- spin_unlock(&dev->rdi.pending_lock);
- qp->s_flags &= ~(RVT_S_TIMER | RVT_S_ANY_WAIT);
- spin_unlock_irq(&qp->s_lock);
- cancel_work_sync(&priv->s_work);
- del_timer_sync(&qp->s_timer);
- wait_event(priv->wait_dma, !atomic_read(&priv->s_dma_busy));
- if (priv->s_tx) {
- qib_put_txreq(priv->s_tx);
- priv->s_tx = NULL;
- }
- remove_qp(dev, qp);
- wait_event(qp->wait, !atomic_read(&qp->refcount));
- rvt_clear_mr_refs(qp, 1);
- } else
- spin_unlock_irq(&qp->s_lock);
-
- /* all user's cleaned up, mark it available */
- rvt_free_qpn(&dev->rdi.qp_dev->qpn_table, qp->ibqp.qp_num);
- rvt_dec_qp_cnt(&dev->rdi);
-
- if (qp->ip)
- kref_put(&qp->ip->ref, rvt_release_mmap_info);
- else
- vfree(qp->r_rq.wq);
- vfree(qp->s_wq);
- kfree(priv->s_hdr);
- kfree(priv);
- kfree(qp);
- return 0;
-}
-
-/**
* qib_get_credit - flush the send work queue of a QP
* @qp: the qp who's send work queue to flush
* @aeth: the Acknowledge Extended Transport Header
diff --git a/drivers/infiniband/hw/qib/qib_verbs.c b/drivers/infiniband/hw/qib/qib_verbs.c
index 187f150b1ff7..e534355c37db 100644
--- a/drivers/infiniband/hw/qib/qib_verbs.c
+++ b/drivers/infiniband/hw/qib/qib_verbs.c
@@ -1697,7 +1697,6 @@ int qib_register_ib_device(struct qib_devdata *dd)
ibdev->query_port = qib_query_port;
ibdev->modify_port = qib_modify_port;
ibdev->query_gid = qib_query_gid;
- ibdev->destroy_qp = qib_destroy_qp;
ibdev->process_mad = qib_process_mad;
ibdev->get_port_immutable = qib_port_immutable;
diff --git a/drivers/infiniband/hw/qib/qib_verbs.h b/drivers/infiniband/hw/qib/qib_verbs.h
index 0487d62b9cdd..e12bb9dc376d 100644
--- a/drivers/infiniband/hw/qib/qib_verbs.h
+++ b/drivers/infiniband/hw/qib/qib_verbs.h
@@ -346,8 +346,6 @@ int qib_get_counters(struct qib_pportdata *ppd,
__be32 qib_compute_aeth(struct rvt_qp *qp);
-int qib_destroy_qp(struct ib_qp *ibqp);
-
/*
* Functions provided by qib driver for rdmavt to use
*/