Author: gnn
Date: Wed Apr  8 20:25:51 2015
New Revision: 281276
URL: https://svnweb.freebsd.org/changeset/base/281276

Log:
  Add support for a netisr polling tunable, which allows run time switching of
  device polling rather than having it only be controlled by the compile
  time option.
  
  Summary: Rubicon Communications (Netgate)
  
  Reviewers: #network, hiren
  
  Reviewed By: #network, hiren
  
  Subscribers: hiren
  
  Differential Revision: https://reviews.freebsd.org/D2258

Modified:
  head/sys/net/netisr.c

Modified: head/sys/net/netisr.c
==============================================================================
--- head/sys/net/netisr.c       Wed Apr  8 20:10:42 2015        (r281275)
+++ head/sys/net/netisr.c       Wed Apr  8 20:25:51 2015        (r281276)
@@ -126,6 +126,13 @@ static struct rmlock       netisr_rmlock;
 
 static SYSCTL_NODE(_net, OID_AUTO, isr, CTLFLAG_RW, 0, "netisr");
 
+#ifdef DEVICE_POLLING
+static int     netisr_polling = 0;     /* Enable Polling. */
+TUNABLE_INT("net.isr.polling_enable", &netisr_polling);
+SYSCTL_INT(_net_isr, OID_AUTO, polling_enable, CTLFLAG_RW,
+    &netisr_polling, 0, "Enable polling");
+#endif
+
 /*-
  * Three global direct dispatch policies are supported:
  *
@@ -789,9 +796,11 @@ swi_net(void *arg)
        nwsp = arg;
 
 #ifdef DEVICE_POLLING
-       KASSERT(nws_count == 1,
-           ("%s: device_polling but nws_count != 1", __func__));
-       netisr_poll();
+       if (netisr_polling) {
+               KASSERT(nws_count == 1,
+                   ("%s: device_polling but nws_count != 1", __func__));
+               netisr_poll();
+       }
 #endif
 #ifdef NETISR_LOCKING
        NETISR_RLOCK(&tracker);
@@ -816,7 +825,8 @@ out:
        NETISR_RUNLOCK(&tracker);
 #endif
 #ifdef DEVICE_POLLING
-       netisr_pollmore();
+       if (netisr_polling)
+               netisr_pollmore();
 #endif
 }
 
@@ -1071,6 +1081,9 @@ netisr_sched_poll(void)
 {
        struct netisr_workstream *nwsp;
 
+       if (!netisr_polling)
+               return;
+
        nwsp = DPCPU_ID_PTR(nws_array[0], nws);
        NWS_SIGNAL(nwsp);
 }
@@ -1138,7 +1151,7 @@ netisr_init(void *arg)
         * multiple netisr threads, so for the time being compiling in device
         * polling disables parallel netisr workers.
         */
-       if (netisr_maxthreads != 1 || netisr_bindthreads != 0) {
+       if (netisr_polling && (netisr_maxthreads != 1 || netisr_bindthreads != 
0)) {
                printf("netisr_init: forcing maxthreads to 1 and "
                    "bindthreads to 0 for device polling\n");
                netisr_maxthreads = 1;
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to