Author: emax
Date: Tue Jun  5 18:48:02 2012
New Revision: 236627
URL: http://svn.freebsd.org/changeset/base/236627

Log:
  Before it gets lost in the noise.
  
  Put a bandaid to prevent ixgbe(4) from completely locking up the system
  under high load. Our platform has a few CPU cores and a single active
  ixgbe(4) port with 4 queues. Under high enough traffic load, at about
  7.5GBs and 700,000 packets/sec (outbound), the entire system would
  deadlock. What we found was that each CPU was in an endless loop on a
  different ix taskqueue thread. The OACTIVE flag had gotten set on each
  queue, and the ixgbe_handle_queue() function was continuously rescheduling
  itself via the taskqueue_enqueue. Since all CPUs were busy with their
  taskqueue threads, the ixgbe_local_timer() function couldn't run to clear
  the OACTIVE flag.
  
  Submitted by: scottl
  MFC after:    1 week

Modified:
  head/sys/dev/ixgbe/ixgbe.c

Modified: head/sys/dev/ixgbe/ixgbe.c
==============================================================================
--- head/sys/dev/ixgbe/ixgbe.c  Tue Jun  5 18:19:52 2012        (r236626)
+++ head/sys/dev/ixgbe/ixgbe.c  Tue Jun  5 18:48:02 2012        (r236627)
@@ -1368,7 +1368,7 @@ ixgbe_handle_que(void *context, int pend
                        ixgbe_start_locked(txr, ifp);
 #endif
                IXGBE_TX_UNLOCK(txr);
-               if (more || (ifp->if_drv_flags & IFF_DRV_OACTIVE)) {
+               if (more) {
                        taskqueue_enqueue(que->tq, &que->que_task);
                        return;
                }
_______________________________________________
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