Call em_start() when we detect a link state change such that packets start
authorkettenis <kettenis@openbsd.org>
Thu, 8 Oct 2015 09:21:26 +0000 (09:21 +0000)
committerkettenis <kettenis@openbsd.org>
Thu, 8 Oct 2015 09:21:26 +0000 (09:21 +0000)
flowing again even if the send queue is currently full.  Restores the fix
made by makeb@ in rev 1.263 which was lost in making the tx completion path
mpsafe.

ok mikeb@

sys/dev/pci/if_em.c

index 9b860d5..f2ddb32 100644 (file)
@@ -31,7 +31,7 @@ POSSIBILITY OF SUCH DAMAGE.
 
 ***************************************************************************/
 
-/* $OpenBSD: if_em.c,v 1.307 2015/10/06 15:21:16 kettenis Exp $ */
+/* $OpenBSD: if_em.c,v 1.308 2015/10/08 09:21:26 kettenis Exp $ */
 /* $FreeBSD: if_em.c,v 1.46 2004/09/29 18:28:28 mlaier Exp $ */
 
 #include <dev/pci/if_em.h>
@@ -926,6 +926,8 @@ em_intr(void *arg)
                sc->hw.get_link_status = 1;
                em_check_for_link(&sc->hw);
                em_update_link_status(sc);
+               if (!IFQ_IS_EMPTY(&ifp->if_snd))
+                       em_start(ifp);
                KERNEL_UNLOCK();
        }