On Tue, Jan 15, 2013 at 09:43:54PM -0800, Jack Vogel wrote:
> OK, will look at this as soon as I can.
> 
> Jack

below is a short patch that reschedule the task if the queue
has not been drained. Tested on qemu. I can do the commit if you like.

cheers
luigi

Index: ../head/sys/dev/e1000/if_lem.c
===================================================================
--- ../head/sys/dev/e1000/if_lem.c      (revision 245218)
+++ ../head/sys/dev/e1000/if_lem.c      (working copy)
@@ -1337,12 +1411,16 @@
 
 
        if (ifp->if_drv_flags & IFF_DRV_RUNNING) {
-               lem_rxeof(adapter, adapter->rx_process_limit, NULL);
+               bool more = lem_rxeof(adapter, adapter->rx_process_limit, NULL);
                EM_TX_LOCK(adapter);
                lem_txeof(adapter);
                if (!IFQ_DRV_IS_EMPTY(&ifp->if_snd))
                        lem_start_locked(ifp);
                EM_TX_UNLOCK(adapter);
+               if (more) {
+                       taskqueue_enqueue(adapter->tq, &adapter->rxtx_task);
+                       return;
+               }
        }
 
        if (ifp->if_drv_flags & IFF_DRV_RUNNING)
_______________________________________________
freebsd-net@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-net
To unsubscribe, send any mail to "freebsd-net-unsubscr...@freebsd.org"

Reply via email to