Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 25 Mar 2015 13:50:39 +0000 (UTC)
From:      Andrew Rybchenko <arybchik@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org
Subject:   svn commit: r280606 - stable/10/sys/dev/sfxge
Message-ID:  <201503251350.t2PDodSD087190@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: arybchik
Date: Wed Mar 25 13:50:38 2015
New Revision: 280606
URL: https://svnweb.freebsd.org/changeset/base/280606

Log:
  MFC: 280376
  
  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.
  Original Differential Revision: https://reviews.freebsd.org/D2081

Modified:
  stable/10/sys/dev/sfxge/sfxge.c
  stable/10/sys/dev/sfxge/sfxge.h
  stable/10/sys/dev/sfxge/sfxge_rx.c
  stable/10/sys/dev/sfxge/sfxge_tx.c
  stable/10/sys/dev/sfxge/sfxge_tx.h
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/sys/dev/sfxge/sfxge.c
==============================================================================
--- stable/10/sys/dev/sfxge/sfxge.c	Wed Mar 25 13:48:54 2015	(r280605)
+++ stable/10/sys/dev/sfxge/sfxge.c	Wed Mar 25 13:50:38 2015	(r280606)
@@ -329,19 +329,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
 
 	if ((rc = sfxge_port_ifmedia_init(sc)) != 0)
 		goto fail;

Modified: stable/10/sys/dev/sfxge/sfxge.h
==============================================================================
--- stable/10/sys/dev/sfxge/sfxge.h	Wed Mar 25 13:48:54 2015	(r280605)
+++ stable/10/sys/dev/sfxge/sfxge.h	Wed Mar 25 13:50:38 2015	(r280606)
@@ -66,12 +66,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
@@ -242,11 +236,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;
 
@@ -254,11 +244,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: stable/10/sys/dev/sfxge/sfxge_rx.c
==============================================================================
--- stable/10/sys/dev/sfxge/sfxge_rx.c	Wed Mar 25 13:48:54 2015	(r280605)
+++ stable/10/sys/dev/sfxge/sfxge_rx.c	Wed Mar 25 13:50:38 2015	(r280606)
@@ -326,14 +326,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->m_flags |= M_FLOWID;
 	}
-#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;
@@ -380,10 +378,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->m_flags |= M_FLOWID;
-#endif
+
 	m->m_pkthdr.csum_flags = csum_flags;
 	__sfxge_rx_deliver(sc, m);
 

Modified: stable/10/sys/dev/sfxge/sfxge_tx.c
==============================================================================
--- stable/10/sys/dev/sfxge/sfxge_tx.c	Wed Mar 25 13:48:54 2015	(r280605)
+++ stable/10/sys/dev/sfxge/sfxge_tx.c	Wed Mar 25 13:50:38 2015	(r280606)
@@ -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.
  */
@@ -708,88 +699,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.
@@ -1378,9 +1287,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);
 }
@@ -1394,10 +1301,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;
@@ -1456,7 +1361,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);
@@ -1506,7 +1410,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;
@@ -1613,11 +1516,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: stable/10/sys/dev/sfxge/sfxge_tx.h
==============================================================================
--- stable/10/sys/dev/sfxge/sfxge_tx.h	Wed Mar 25 13:48:54 2015	(r280605)
+++ stable/10/sys/dev/sfxge/sfxge_tx.h	Wed Mar 25 13:50:38 2015	(r280606)
@@ -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 */
@@ -226,11 +216,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



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