svn commit: r295918 - head/sys/dev/hyperv/netvsc
Sepherosa Ziehau
sephe at FreeBSD.org
Tue Feb 23 09:25:21 UTC 2016
Author: sephe
Date: Tue Feb 23 09:25:20 2016
New Revision: 295918
URL: https://svnweb.freebsd.org/changeset/base/295918
Log:
hyperv/hn: Use IFQ_DRV_PREPEND instead of IF_PREPEND
IF_PREPEND promises out-of-order packet sending when the TX desc list
is depleted. It was overlooked and copied blindly when the transmission
path was partially rewritten.
MFC after: 1 week
Sponsored by: Microsoft OSTC
Differential Revision: https://reviews.freebsd.org/D5386
Modified:
head/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c
Modified: head/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c
==============================================================================
--- head/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c Tue Feb 23 09:22:00 2016 (r295917)
+++ head/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c Tue Feb 23 09:25:20 2016 (r295918)
@@ -998,14 +998,14 @@ hn_start_locked(struct hn_tx_ring *txr,
* dispatch this packet sending (and sending of any
* following up packets) to tx taskqueue.
*/
- IF_PREPEND(&ifp->if_snd, m_head);
+ IFQ_DRV_PREPEND(&ifp->if_snd, m_head);
return 1;
}
txd = hn_txdesc_get(txr);
if (txd == NULL) {
txr->hn_no_txdescs++;
- IF_PREPEND(&ifp->if_snd, m_head);
+ IFQ_DRV_PREPEND(&ifp->if_snd, m_head);
atomic_set_int(&ifp->if_drv_flags, IFF_DRV_OACTIVE);
break;
}
@@ -1019,7 +1019,7 @@ hn_start_locked(struct hn_tx_ring *txr,
error = hn_send_pkt(ifp, device_ctx, txr, txd);
if (__predict_false(error)) {
/* txd is freed, but m_head is not */
- IF_PREPEND(&ifp->if_snd, m_head);
+ IFQ_DRV_PREPEND(&ifp->if_snd, m_head);
atomic_set_int(&ifp->if_drv_flags, IFF_DRV_OACTIVE);
break;
}
More information about the svn-src-head
mailing list