Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 9 Jul 2016 11:48:57 +0000 (UTC)
From:      Alexander Motin <mav@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r302492 - head/sys/dev/ntb
Message-ID:  <201607091148.u69BmvmP094587@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: mav
Date: Sat Jul  9 11:48:57 2016
New Revision: 302492
URL: https://svnweb.freebsd.org/changeset/base/302492

Log:
  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:
  head/sys/dev/ntb/ntb_transport.c

Modified: head/sys/dev/ntb/ntb_transport.c
==============================================================================
--- head/sys/dev/ntb/ntb_transport.c	Sat Jul  9 11:47:52 2016	(r302491)
+++ head/sys/dev/ntb/ntb_transport.c	Sat Jul  9 11:48:57 2016	(r302492)
@@ -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 */



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201607091148.u69BmvmP094587>