ixgbe: Purge queue on inactive interfaces
authorFrançois Tigeot <ftigeot@wolfpond.org>
Sun, 30 Sep 2012 11:27:15 +0000 (13:27 +0200)
committerFrançois Tigeot <ftigeot@wolfpond.org>
Sun, 30 Sep 2012 12:10:38 +0000 (14:10 +0200)
* The transmission code needs to process all queued packets in one way or
  another; if this is not done, the kernel will busy loop

* Fix a kernel freeze issue when bringing up network interfaces not having
  an active link (cable not plugged...)

sys/dev/netif/ixgbe/ixgbe.c

index a2f675f..e8e138d 100644 (file)
@@ -689,8 +689,11 @@ ixgbe_start_locked(struct tx_ring *txr, struct ifnet * ifp)
 
        if ((ifp->if_flags & (IFF_RUNNING|IFF_OACTIVE)) != IFF_RUNNING)
                return;
-       if (!adapter->link_active)
+
+       if (!adapter->link_active) {
+               ifq_purge(&ifp->if_snd);
                return;
+       }
 
        while (!ifq_is_empty(&ifp->if_snd)) {
                if (txr->tx_avail <= IXGBE_QUEUE_MIN_FREE) {