Date: Tue, 7 Aug 2012 10:43:35 +0200 From: Fabien Thomas <fabien.thomas@netasq.com> To: Jack F Vogel <jfv@freebsd.org> Cc: svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org Subject: Re: svn commit: r239105 - head/sys/dev/e1000 Message-ID: <905F03BA-907F-4330-BF59-77F0A2DB1B02@netasq.com> In-Reply-To: <201208062044.q76Ki59o081002@svn.freebsd.org> References: <201208062044.q76Ki59o081002@svn.freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
--Apple-Mail=_355BEF34-3FDC-4197-8401-CC7FF59FF36E
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain;
charset=us-ascii
>=20
> @@ -961,7 +961,15 @@ igb_mq_start(struct ifnet *ifp, struct m
> que =3D &adapter->queues[i];
> if (((txr->queue_status & IGB_QUEUE_DEPLETED) =3D=3D 0) &&
> IGB_TX_TRYLOCK(txr)) {
> - err =3D igb_mq_start_locked(ifp, txr, m);
> + struct mbuf *pm =3D NULL;
> + /*
> + ** Try to queue first to avoid
> + ** out-of-order delivery, but=20
> + ** settle for it if that fails
> + */
> + if (m && drbr_enqueue(ifp, txr->br, m))
> + pm =3D m;
> + err =3D igb_mq_start_locked(ifp, txr, pm);
> IGB_TX_UNLOCK(txr);
> } else {
Why not just enqueue / start with NULL ?
err =3D drbr_enqueue(ifp, txr->br, m);
igb_mq_start_locked(ifp, txr, NULL);
It seems that in case the queue is full you will send out of order with =
the current patch.
> err =3D drbr_enqueue(ifp, txr->br, m);
> @@ -981,7 +989,7 @@ igb_mq_start_locked(struct ifnet *ifp, s
> IGB_TX_LOCK_ASSERT(txr);
>=20
> if (((ifp->if_drv_flags & IFF_DRV_RUNNING) =3D=3D 0) ||
> - (txr->queue_status =3D=3D IGB_QUEUE_DEPLETED) ||
> + (txr->queue_status & IGB_QUEUE_DEPLETED) ||
> adapter->link_active =3D=3D 0) {
> if (m !=3D NULL)
> err =3D drbr_enqueue(ifp, txr->br, m);
--Apple-Mail=_355BEF34-3FDC-4197-8401-CC7FF59FF36E--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?905F03BA-907F-4330-BF59-77F0A2DB1B02>
