From owner-svn-src-head@FreeBSD.ORG Mon Aug 6 20:44:05 2012 Return-Path: Delivered-To: svn-src-head@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id CEA7E106566C; Mon, 6 Aug 2012 20:44:05 +0000 (UTC) (envelope-from jfv@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id BA3C28FC08; Mon, 6 Aug 2012 20:44:05 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q76Ki59J081004; Mon, 6 Aug 2012 20:44:05 GMT (envelope-from jfv@svn.freebsd.org) Received: (from jfv@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q76Ki59o081002; Mon, 6 Aug 2012 20:44:05 GMT (envelope-from jfv@svn.freebsd.org) Message-Id: <201208062044.q76Ki59o081002@svn.freebsd.org> From: Jack F Vogel Date: Mon, 6 Aug 2012 20:44:05 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239105 - head/sys/dev/e1000 X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 06 Aug 2012 20:44:05 -0000 Author: jfv Date: Mon Aug 6 20:44:05 2012 New Revision: 239105 URL: http://svn.freebsd.org/changeset/base/239105 Log: Correct the mq_start routine to avoid out-of-order packet delivery, always enqueue when possible. Also correct the DEPLETED test as multiple bits might be set. Thanks to Randall Stewart for the changes! Modified: head/sys/dev/e1000/if_igb.c Modified: head/sys/dev/e1000/if_igb.c ============================================================================== --- head/sys/dev/e1000/if_igb.c Mon Aug 6 20:01:32 2012 (r239104) +++ head/sys/dev/e1000/if_igb.c Mon Aug 6 20:44:05 2012 (r239105) @@ -100,7 +100,7 @@ int igb_display_debug_stats = 0; /********************************************************************* * Driver version: *********************************************************************/ -char igb_driver_version[] = "version - 2.3.4"; +char igb_driver_version[] = "version - 2.3.5"; /********************************************************************* @@ -961,7 +961,15 @@ igb_mq_start(struct ifnet *ifp, struct m que = &adapter->queues[i]; if (((txr->queue_status & IGB_QUEUE_DEPLETED) == 0) && IGB_TX_TRYLOCK(txr)) { - err = igb_mq_start_locked(ifp, txr, m); + struct mbuf *pm = NULL; + /* + ** Try to queue first to avoid + ** out-of-order delivery, but + ** settle for it if that fails + */ + if (m && drbr_enqueue(ifp, txr->br, m)) + pm = m; + err = igb_mq_start_locked(ifp, txr, pm); IGB_TX_UNLOCK(txr); } else { err = drbr_enqueue(ifp, txr->br, m); @@ -981,7 +989,7 @@ igb_mq_start_locked(struct ifnet *ifp, s IGB_TX_LOCK_ASSERT(txr); if (((ifp->if_drv_flags & IFF_DRV_RUNNING) == 0) || - (txr->queue_status == IGB_QUEUE_DEPLETED) || + (txr->queue_status & IGB_QUEUE_DEPLETED) || adapter->link_active == 0) { if (m != NULL) err = drbr_enqueue(ifp, txr->br, m);