svn commit: r280376 - head/sys/dev/sfxge

Andrew Rybchenko arybchik at FreeBSD.org
Mon Mar 23 15:47:40 UTC 2015


Author: arybchik
Date: Mon Mar 23 15:47:37 2015
New Revision: 280376
URL: https://svnweb.freebsd.org/changeset/base/280376

Log:
  sfxge: remove obsolete Tx non-multi queue support
  
  Tx multi queue is added in FreeBSD 8.0. So, the changeset drops earlier
  versions support.
  
  Sponsored by:   Solarflare Communications, Inc.
  Differential Revision: https://reviews.freebsd.org/D2081

Modified:
  head/sys/dev/sfxge/sfxge.c
  head/sys/dev/sfxge/sfxge.h
  head/sys/dev/sfxge/sfxge_rx.c
  head/sys/dev/sfxge/sfxge_tx.c
  head/sys/dev/sfxge/sfxge_tx.h

Modified: head/sys/dev/sfxge/sfxge.c
==============================================================================
--- head/sys/dev/sfxge/sfxge.c	Mon Mar 23 15:45:39 2015	(r280375)
+++ head/sys/dev/sfxge/sfxge.c	Mon Mar 23 15:47:37 2015	(r280376)
@@ -330,19 +330,8 @@ sfxge_ifnet_init(struct ifnet *ifp, stru
 
 	ether_ifattach(ifp, encp->enc_mac_addr);
 
-#ifdef SFXGE_HAVE_MQ
 	ifp->if_transmit = sfxge_if_transmit;
 	ifp->if_qflush = sfxge_if_qflush;
-#else
-	ifp->if_start = sfxge_if_start;
-	IFQ_SET_MAXLEN(&ifp->if_snd, sc->txq_entries - 1);
-	ifp->if_snd.ifq_drv_maxlen = sc->txq_entries - 1;
-	IFQ_SET_READY(&ifp->if_snd);
-
-	snprintf(sc->tx_lock_name, sizeof(sc->tx_lock_name),
-		 "%s:tx", device_get_nameunit(sc->dev));
-	mtx_init(&sc->tx_lock, sc->tx_lock_name, NULL, MTX_DEF);
-#endif
 
 	ifp->if_get_counter = sfxge_get_counter;
 

Modified: head/sys/dev/sfxge/sfxge.h
==============================================================================
--- head/sys/dev/sfxge/sfxge.h	Mon Mar 23 15:45:39 2015	(r280375)
+++ head/sys/dev/sfxge/sfxge.h	Mon Mar 23 15:47:37 2015	(r280376)
@@ -67,12 +67,6 @@
 #ifndef IFM_10G_KX4
 #define	IFM_10G_KX4 IFM_10G_CX4
 #endif
-#if __FreeBSD_version >= 800054
-/* Networking core is multiqueue aware. We can manage our own TX
- * queues and use m_pkthdr.flowid.
- */
-#define	SFXGE_HAVE_MQ
-#endif
 #if (__FreeBSD_version >= 800501 && __FreeBSD_version < 900000) || \
 	__FreeBSD_version >= 900003
 #define	SFXGE_HAVE_DESCRIBE_INTR
@@ -243,11 +237,7 @@ struct sfxge_softc {
 	struct sfxge_rxq		*rxq[SFXGE_RX_SCALE_MAX];
 	unsigned int			rx_indir_table[SFXGE_RX_SCALE_MAX];
 
-#ifdef SFXGE_HAVE_MQ
 	struct sfxge_txq		*txq[SFXGE_TXQ_NTYPES + SFXGE_RX_SCALE_MAX];
-#else
-	struct sfxge_txq		*txq[SFXGE_TXQ_NTYPES];
-#endif
 
 	struct ifmedia			media;
 
@@ -255,11 +245,6 @@ struct sfxge_softc {
 	size_t				rx_buffer_size;
 	uma_zone_t			rx_buffer_zone;
 
-#ifndef SFXGE_HAVE_MQ
-	struct mtx			tx_lock __aligned(CACHE_LINE_SIZE);
-	char				tx_lock_name[SFXGE_LOCK_NAME_MAX];
-#endif
-
 	unsigned int			evq_count;
 	unsigned int			rxq_count;
 	unsigned int			txq_count;

Modified: head/sys/dev/sfxge/sfxge_rx.c
==============================================================================
--- head/sys/dev/sfxge/sfxge_rx.c	Mon Mar 23 15:45:39 2015	(r280375)
+++ head/sys/dev/sfxge/sfxge_rx.c	Mon Mar 23 15:47:37 2015	(r280376)
@@ -330,14 +330,12 @@ sfxge_rx_deliver(struct sfxge_softc *sc,
 	if (rx_desc->flags & EFX_CKSUM_TCPUDP)
 		csum_flags |= CSUM_DATA_VALID | CSUM_PSEUDO_HDR;
 
-#ifdef SFXGE_HAVE_MQ
 	/* The hash covers a 4-tuple for TCP only */
 	if (rx_desc->flags & EFX_PKT_TCP) {
 		m->m_pkthdr.flowid = EFX_RX_HASH_VALUE(EFX_RX_HASHALG_TOEPLITZ,
 						       mtod(m, uint8_t *));
 		M_HASHTYPE_SET(m, M_HASHTYPE_OPAQUE);
 	}
-#endif
 	m->m_data += sc->rx_prefix_size;
 	m->m_len = rx_desc->size - sc->rx_prefix_size;
 	m->m_pkthdr.len = m->m_len;
@@ -386,10 +384,9 @@ sfxge_lro_deliver(struct sfxge_lro_state
 		memcpy(c_th + 1, c->th_last + 1, optlen);
 	}
 
-#ifdef SFXGE_HAVE_MQ
 	m->m_pkthdr.flowid = c->conn_hash;
 	M_HASHTYPE_SET(m, M_HASHTYPE_OPAQUE);
-#endif
+
 	m->m_pkthdr.csum_flags = csum_flags;
 	__sfxge_rx_deliver(sc, m);
 

Modified: head/sys/dev/sfxge/sfxge_tx.c
==============================================================================
--- head/sys/dev/sfxge/sfxge_tx.c	Mon Mar 23 15:45:39 2015	(r280375)
+++ head/sys/dev/sfxge/sfxge_tx.c	Mon Mar 23 15:47:37 2015	(r280376)
@@ -84,7 +84,6 @@ __FBSDID("$FreeBSD$");
 #define	SFXGE_TXQ_BLOCK_LEVEL(_entries)					\
 	(EFX_TXQ_LIMIT(_entries) - SFXGE_TSO_MAX_DESC)
 
-#ifdef SFXGE_HAVE_MQ
 
 #define	SFXGE_PARAM_TX_DPL_GET_MAX	SFXGE_PARAM(tx_dpl_get_max)
 static int sfxge_tx_dpl_get_max = SFXGE_TX_DPL_GET_PKT_LIMIT_DEFAULT;
@@ -109,8 +108,6 @@ SYSCTL_INT(_hw_sfxge, OID_AUTO, tx_dpl_p
 	   &sfxge_tx_dpl_put_max, 0,
 	   "Maximum number of any packets in deferred packet put-list");
 
-#endif
-
 
 /* Forward declarations. */
 static void sfxge_tx_qdpl_service(struct sfxge_txq *txq);
@@ -160,8 +157,6 @@ sfxge_tx_qcomplete(struct sfxge_txq *txq
 	}
 }
 
-#ifdef SFXGE_HAVE_MQ
-
 static unsigned int
 sfxge_is_mbuf_non_tcp(struct mbuf *mbuf)
 {
@@ -225,8 +220,6 @@ sfxge_tx_qdpl_swizzle(struct sfxge_txq *
 	stdp->std_get_non_tcp_count += non_tcp_count;
 }
 
-#endif /* SFXGE_HAVE_MQ */
-
 static void
 sfxge_tx_qreap(struct sfxge_txq *txq)
 {
@@ -401,8 +394,6 @@ reject:
 	return (rc);
 }
 
-#ifdef SFXGE_HAVE_MQ
-
 /*
  * Drain the deferred packet list into the transmit queue.
  */
@@ -709,88 +700,6 @@ sfxge_if_transmit(struct ifnet *ifp, str
 	return (rc);
 }
 
-#else /* !SFXGE_HAVE_MQ */
-
-static void sfxge_if_start_locked(struct ifnet *ifp)
-{
-	struct sfxge_softc *sc = ifp->if_softc;
-	struct sfxge_txq *txq;
-	struct mbuf *mbuf;
-	unsigned int pushed[SFXGE_TXQ_NTYPES];
-	unsigned int q_index;
-
-	if ((ifp->if_drv_flags & (IFF_DRV_RUNNING|IFF_DRV_OACTIVE)) !=
-	    IFF_DRV_RUNNING)
-		return;
-
-	if (!sc->port.link_up)
-		return;
-
-	for (q_index = 0; q_index < SFXGE_TXQ_NTYPES; q_index++) {
-		txq = sc->txq[q_index];
-		pushed[q_index] = txq->added;
-	}
-
-	while (!IFQ_DRV_IS_EMPTY(&ifp->if_snd)) {
-		IFQ_DRV_DEQUEUE(&ifp->if_snd, mbuf);
-		if (mbuf == NULL)
-			break;
-
-		ETHER_BPF_MTAP(ifp, mbuf); /* packet capture */
-
-		/* Pick the desired transmit queue. */
-		if (mbuf->m_pkthdr.csum_flags & (CSUM_DELAY_DATA | CSUM_TSO))
-			q_index = SFXGE_TXQ_IP_TCP_UDP_CKSUM;
-		else if (mbuf->m_pkthdr.csum_flags & CSUM_DELAY_IP)
-			q_index = SFXGE_TXQ_IP_CKSUM;
-		else
-			q_index = SFXGE_TXQ_NON_CKSUM;
-		txq = sc->txq[q_index];
-
-		if (sfxge_tx_queue_mbuf(txq, mbuf) != 0)
-			continue;
-
-		if (txq->blocked) {
-			ifp->if_drv_flags |= IFF_DRV_OACTIVE;
-			break;
-		}
-
-		/* Push the fragments to the hardware in batches. */
-		if (txq->added - pushed[q_index] >= SFXGE_TX_BATCH) {
-			efx_tx_qpush(txq->common, txq->added);
-			pushed[q_index] = txq->added;
-		}
-	}
-
-	for (q_index = 0; q_index < SFXGE_TXQ_NTYPES; q_index++) {
-		txq = sc->txq[q_index];
-		if (txq->added != pushed[q_index])
-			efx_tx_qpush(txq->common, txq->added);
-	}
-}
-
-void sfxge_if_start(struct ifnet *ifp)
-{
-	struct sfxge_softc *sc = ifp->if_softc;
-
-	SFXGE_TXQ_LOCK(sc->txq[0]);
-	sfxge_if_start_locked(ifp);
-	SFXGE_TXQ_UNLOCK(sc->txq[0]);
-}
-
-static void
-sfxge_tx_qdpl_service(struct sfxge_txq *txq)
-{
-	struct ifnet *ifp = txq->sc->ifnet;
-
-	SFXGE_TXQ_LOCK_ASSERT_OWNED(txq);
-	ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
-	sfxge_if_start_locked(ifp);
-	SFXGE_TXQ_UNLOCK(txq);
-}
-
-#endif /* SFXGE_HAVE_MQ */
-
 /*
  * Software "TSO".  Not quite as good as doing it in hardware, but
  * still faster than segmenting in the stack.
@@ -1379,9 +1288,7 @@ sfxge_tx_qfini(struct sfxge_softc *sc, u
 
 	sc->txq[index] = NULL;
 
-#ifdef SFXGE_HAVE_MQ
 	SFXGE_TXQ_LOCK_DESTROY(txq);
-#endif
 
 	free(txq, M_SFXGE);
 }
@@ -1395,10 +1302,8 @@ sfxge_tx_qinit(struct sfxge_softc *sc, u
 	struct sysctl_oid *txq_node;
 	struct sfxge_txq *txq;
 	struct sfxge_evq *evq;
-#ifdef SFXGE_HAVE_MQ
 	struct sfxge_tx_dpl *stdp;
 	struct sysctl_oid *dpl_node;
-#endif
 	efsys_mem_t *esmp;
 	unsigned int nmaps;
 	int rc;
@@ -1457,7 +1362,6 @@ sfxge_tx_qinit(struct sfxge_softc *sc, u
 	    (rc = tso_init(txq)) != 0)
 		goto fail3;
 
-#ifdef SFXGE_HAVE_MQ
 	if (sfxge_tx_dpl_get_max <= 0) {
 		log(LOG_ERR, "%s=%d must be greater than 0",
 		    SFXGE_PARAM_TX_DPL_GET_MAX, sfxge_tx_dpl_get_max);
@@ -1507,7 +1411,6 @@ sfxge_tx_qinit(struct sfxge_softc *sc, u
 	SYSCTL_ADD_UINT(ctx, SYSCTL_CHILDREN(dpl_node), OID_AUTO,
 			"put_hiwat", CTLFLAG_RD | CTLFLAG_STATS,
 			&stdp->std_put_hiwat, 0, "");
-#endif
 
 	txq->type = type;
 	txq->evq_index = evq_index;
@@ -1637,11 +1540,7 @@ sfxge_tx_init(struct sfxge_softc *sc)
 	KASSERT(intr->state == SFXGE_INTR_INITIALIZED,
 	    ("intr->state != SFXGE_INTR_INITIALIZED"));
 
-#ifdef SFXGE_HAVE_MQ
 	sc->txq_count = SFXGE_TXQ_NTYPES - 1 + sc->intr.n_alloc;
-#else
-	sc->txq_count = SFXGE_TXQ_NTYPES;
-#endif
 
 	sc->txqs_node = SYSCTL_ADD_NODE(
 		device_get_sysctl_ctx(sc->dev),

Modified: head/sys/dev/sfxge/sfxge_tx.h
==============================================================================
--- head/sys/dev/sfxge/sfxge_tx.h	Mon Mar 23 15:45:39 2015	(r280375)
+++ head/sys/dev/sfxge/sfxge_tx.h	Mon Mar 23 15:47:37 2015	(r280376)
@@ -128,12 +128,6 @@ enum sfxge_txq_type {
 
 #define	SFXGE_TX_BATCH	64
 
-#ifdef SFXGE_HAVE_MQ
-#define	SFXGE_TX_LOCK(txq)		(&(txq)->lock)
-#else
-#define	SFXGE_TX_LOCK(txq)		(&(txq)->sc->tx_lock)
-#endif
-
 #define	SFXGE_TXQ_LOCK_INIT(_txq, _ifname, _txq_index)			\
 	do {								\
 		struct sfxge_txq  *__txq = (_txq);			\
@@ -147,13 +141,13 @@ enum sfxge_txq_type {
 #define	SFXGE_TXQ_LOCK_DESTROY(_txq)					\
 	mtx_destroy(&(_txq)->lock)
 #define	SFXGE_TXQ_LOCK(_txq)						\
-	mtx_lock(SFXGE_TX_LOCK(_txq))
+	mtx_lock(&(_txq)->lock)
 #define	SFXGE_TXQ_TRYLOCK(_txq)						\
-	mtx_trylock(SFXGE_TX_LOCK(_txq))
+	mtx_trylock(&(_txq)->lock)
 #define	SFXGE_TXQ_UNLOCK(_txq)						\
-	mtx_unlock(SFXGE_TX_LOCK(_txq))
+	mtx_unlock(&(_txq)->lock)
 #define	SFXGE_TXQ_LOCK_ASSERT_OWNED(_txq)				\
-	mtx_assert(SFXGE_TX_LOCK(_txq), MA_OWNED)
+	mtx_assert(&(_txq)->lock, MA_OWNED)
 
 
 struct sfxge_txq {
@@ -186,13 +180,9 @@ struct sfxge_txq {
 	/* The following fields change more often, and are used mostly
 	 * on the initiation path
 	 */
-#ifdef SFXGE_HAVE_MQ
 	struct mtx			lock __aligned(CACHE_LINE_SIZE);
 	struct sfxge_tx_dpl		dpl;	/* Deferred packet list. */
 	unsigned int			n_pend_desc;
-#else
-	unsigned int			n_pend_desc __aligned(CACHE_LINE_SIZE);
-#endif
 	unsigned int			added;
 	unsigned int			reaped;
 	/* Statistics */
@@ -227,11 +217,7 @@ extern int sfxge_tx_start(struct sfxge_s
 extern void sfxge_tx_stop(struct sfxge_softc *sc);
 extern void sfxge_tx_qcomplete(struct sfxge_txq *txq, struct sfxge_evq *evq);
 extern void sfxge_tx_qflush_done(struct sfxge_txq *txq);
-#ifdef SFXGE_HAVE_MQ
 extern void sfxge_if_qflush(struct ifnet *ifp);
 extern int sfxge_if_transmit(struct ifnet *ifp, struct mbuf *m);
-#else
-extern void sfxge_if_start(struct ifnet *ifp);
-#endif
 
 #endif


More information about the svn-src-head mailing list