svn commit: r304353 - stable/11/sys/dev/ntb

Alexander Motin mav at FreeBSD.org
Thu Aug 18 09:22:48 UTC 2016


Author: mav
Date: Thu Aug 18 09:22:46 2016
New Revision: 304353
URL: https://svnweb.freebsd.org/changeset/base/304353

Log:
  MFC r302492: Bring some more order into link and qp state handling.
  
  Do not touch scratchpad registers until link is reported up.
  Mask and do not handle doorbell events until respective qp is up.

Modified:
  stable/11/sys/dev/ntb/ntb_transport.c
Directory Properties:
  stable/11/   (props changed)

Modified: stable/11/sys/dev/ntb/ntb_transport.c
==============================================================================
--- stable/11/sys/dev/ntb/ntb_transport.c	Thu Aug 18 09:22:11 2016	(r304352)
+++ stable/11/sys/dev/ntb/ntb_transport.c	Thu Aug 18 09:22:46 2016	(r304353)
@@ -508,8 +508,6 @@ ntb_transport_init_queue(struct ntb_tran
 	STAILQ_INIT(&qp->rx_post_q);
 	STAILQ_INIT(&qp->rx_pend_q);
 	STAILQ_INIT(&qp->tx_free_q);
-
-	callout_reset(&qp->link_work, 0, ntb_qp_link_work, qp);
 }
 
 void
@@ -598,7 +596,6 @@ ntb_transport_create_queue(void *data, d
 	}
 
 	NTB_DB_CLEAR(ntb, 1ull << qp->qp_num);
-	NTB_DB_CLEAR_MASK(ntb, 1ull << qp->qp_num);
 	return (qp);
 }
 
@@ -967,7 +964,8 @@ ntb_transport_doorbell_callback(void *da
 
 		if (test_bit(qp_num, &db_bits)) {
 			qp = &nt->qp_vec[qp_num];
-			taskqueue_enqueue(qp->rxc_tq, &qp->rxc_db_work);
+			if (qp->link_is_up)
+				taskqueue_enqueue(qp->rxc_tq, &qp->rxc_db_work);
 		}
 
 		vec_mask &= ~(1ull << qp_num);
@@ -1216,6 +1214,7 @@ ntb_qp_link_work(void *arg)
 		if (qp->event_handler != NULL)
 			qp->event_handler(qp->cb_data, NTB_LINK_UP);
 
+		NTB_DB_CLEAR_MASK(ntb, 1ull << qp->qp_num);
 		taskqueue_enqueue(qp->rxc_tq, &qp->rxc_db_work);
 	} else if (nt->link_is_up)
 		callout_reset(&qp->link_work,
@@ -1272,6 +1271,7 @@ ntb_qp_link_down_reset(struct ntb_transp
 {
 
 	qp->link_is_up = false;
+	NTB_DB_SET_MASK(qp->ntb, 1ull << qp->qp_num);
 
 	qp->tx_index = qp->rx_index = 0;
 	qp->tx_bytes = qp->rx_bytes = 0;
@@ -1287,17 +1287,12 @@ ntb_qp_link_down_reset(struct ntb_transp
 static void
 ntb_qp_link_cleanup(struct ntb_transport_qp *qp)
 {
-	struct ntb_transport_ctx *nt = qp->transport;
 
 	callout_drain(&qp->link_work);
 	ntb_qp_link_down_reset(qp);
 
 	if (qp->event_handler != NULL)
 		qp->event_handler(qp->cb_data, NTB_LINK_DOWN);
-
-	if (nt->link_is_up)
-		callout_reset(&qp->link_work,
-		    NTB_LINK_DOWN_TIMEOUT * hz / 1000, ntb_qp_link_work, qp);
 }
 
 /* Link commanded down */


More information about the svn-src-all mailing list