Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 17 Jun 2016 16:28:03 GMT
From:      vincenzo@FreeBSD.org
To:        svn-soc-all@FreeBSD.org
Subject:   socsvn commit: r305309 - soc2016/vincenzo/head/sys/dev/netmap
Message-ID:  <201606171628.u5HGS3X0031433@socsvn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: vincenzo
Date: Fri Jun 17 16:28:02 2016
New Revision: 305309
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=305309

Log:
   freebsd: allocate task for transmission

Modified:
  soc2016/vincenzo/head/sys/dev/netmap/if_ptnet.c

Modified: soc2016/vincenzo/head/sys/dev/netmap/if_ptnet.c
==============================================================================
--- soc2016/vincenzo/head/sys/dev/netmap/if_ptnet.c	Fri Jun 17 16:27:43 2016	(r305308)
+++ soc2016/vincenzo/head/sys/dev/netmap/if_ptnet.c	Fri Jun 17 16:28:02 2016	(r305309)
@@ -109,6 +109,7 @@
 };
 
 #define PTNET_Q_LOCK(_pq)	mtx_lock(&(_pq)->lock)
+#define PTNET_Q_TRYLOCK(_pq)	mtx_trylock(&(_pq)->lock)
 #define PTNET_Q_UNLOCK(_pq)	mtx_unlock(&(_pq)->lock)
 
 struct ptnet_softc {
@@ -157,6 +158,7 @@
 static int	ptnet_stop(struct ptnet_softc *sc);
 static int	ptnet_transmit(struct ifnet *ifp, struct mbuf *m);
 static void	ptnet_qflush(struct ifnet *ifp);
+static void	ptnet_tx_task(void *context, int pending);
 
 static int	ptnet_media_change(struct ifnet *ifp);
 static void	ptnet_media_status(struct ifnet *ifp, struct ifmediareq *ifmr);
@@ -576,13 +578,11 @@
 	cpu_cur = CPU_FIRST();
 	for (i = 0; i < nvecs; i++) {
 		struct ptnet_queue *pq = sc->queues + i;
+		static void (*handler)(void *context, int pending);
 
-		if (i < num_tx_rings) {
-			/* Only support RX queues for now. */
-			continue;
-		}
+		handler = (i < num_tx_rings) ? ptnet_tx_task : ptnet_rx_task;
 
-		TASK_INIT(&pq->task, 0, ptnet_rx_task, pq);
+		TASK_INIT(&pq->task, 0, handler, pq);
 		pq->taskq = taskqueue_create_fast("ptnet_queue", M_NOWAIT,
 					taskqueue_thread_enqueue, &pq->taskq);
 		taskqueue_start_threads(&pq->taskq, 1, PI_NET, "%s-pq-%d",
@@ -1319,3 +1319,12 @@
 	ptnet_rx_eof(pq);
 }
 
+static void
+ptnet_tx_task(void *context, int pending)
+{
+	struct ptnet_queue *pq = context;
+
+	device_printf(pq->sc->dev, "%s: pq #%u\n", __func__, pq->kring_id);
+	ptnet_transmit(pq->sc->ifp, NULL);
+}
+



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