svn commit: r295306 - head/sys/dev/hyperv/netvsc

Sepherosa Ziehau sephe at FreeBSD.org
Fri Feb 5 05:50:54 UTC 2016


Author: sephe
Date: Fri Feb  5 05:50:53 2016
New Revision: 295306
URL: https://svnweb.freebsd.org/changeset/base/295306

Log:
  hyperv/hn: Add an option to always do transmission scheduling
  
  It is off by default. This eases more experiment on hn(4).
  
  Reviewed by:	adrian, Hongjiang Zhang <honzhan microsoft com>
  Approved by:	adrian (mentor)
  MFC after:	1 week
  Sponsored by:	Microsoft OSTC
  Differential Revision:	https://reviews.freebsd.org/D5175

Modified:
  head/sys/dev/hyperv/netvsc/hv_net_vsc.h
  head/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c

Modified: head/sys/dev/hyperv/netvsc/hv_net_vsc.h
==============================================================================
--- head/sys/dev/hyperv/netvsc/hv_net_vsc.h	Fri Feb  5 05:44:31 2016	(r295305)
+++ head/sys/dev/hyperv/netvsc/hv_net_vsc.h	Fri Feb  5 05:50:53 2016	(r295306)
@@ -1023,6 +1023,7 @@ typedef struct hn_softc {
 	int		hn_txdesc_avail;
 	int		hn_txeof;
 
+	int		hn_sched_tx;
 	int		hn_direct_tx_size;
 	struct taskqueue *hn_tx_taskq;
 	struct task	hn_start_task;

Modified: head/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c
==============================================================================
--- head/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c	Fri Feb  5 05:44:31 2016	(r295305)
+++ head/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c	Fri Feb  5 05:50:53 2016	(r295306)
@@ -534,6 +534,10 @@ netvsc_attach(device_t dev)
 	SYSCTL_ADD_INT(ctx, child, OID_AUTO, "direct_tx_size",
 	    CTLFLAG_RW, &sc->hn_direct_tx_size, 0,
 	    "Size of the packet for direct transmission");
+	SYSCTL_ADD_INT(ctx, child, OID_AUTO, "sched_tx",
+	    CTLFLAG_RW, &sc->hn_sched_tx, 0,
+	    "Always schedule transmission "
+	    "instead of doing direct transmission");
 
 	if (unit == 0) {
 		struct sysctl_ctx_list *dc_ctx;
@@ -1602,9 +1606,11 @@ hn_stop(hn_softc_t *sc)
 static void
 hn_start(struct ifnet *ifp)
 {
-	hn_softc_t *sc;
+	struct hn_softc *sc = ifp->if_softc;
+
+	if (sc->hn_sched_tx)
+		goto do_sched;
 
-	sc = ifp->if_softc;
 	if (NV_TRYLOCK(sc)) {
 		int sched;
 
@@ -1613,15 +1619,18 @@ hn_start(struct ifnet *ifp)
 		if (!sched)
 			return;
 	}
+do_sched:
 	taskqueue_enqueue_fast(sc->hn_tx_taskq, &sc->hn_start_task);
 }
 
 static void
 hn_start_txeof(struct ifnet *ifp)
 {
-	hn_softc_t *sc;
+	struct hn_softc *sc = ifp->if_softc;
+
+	if (sc->hn_sched_tx)
+		goto do_sched;
 
-	sc = ifp->if_softc;
 	if (NV_TRYLOCK(sc)) {
 		int sched;
 
@@ -1633,6 +1642,7 @@ hn_start_txeof(struct ifnet *ifp)
 			    &sc->hn_start_task);
 		}
 	} else {
+do_sched:
 		/*
 		 * Release the OACTIVE earlier, with the hope, that
 		 * others could catch up.  The task will clear the


More information about the svn-src-head mailing list