View | Details | Raw Unified | Return to bug 252850
Collapse All | Expand All

(-)b/sys/net/iflib.c (+17 lines)
Lines 960-965 iflib_netmap_txsync(struct netmap_kring *kring, int flags) Link Here
960
	u_int const lim = kring->nkr_num_slots - 1;
960
	u_int const lim = kring->nkr_num_slots - 1;
961
	u_int const head = kring->rhead;
961
	u_int const head = kring->rhead;
962
	struct if_pkt_info pi;
962
	struct if_pkt_info pi;
963
	int tx_pkts, tx_bytes;
963
964
964
	/*
965
	/*
965
	 * interrupts on every tx packet are expensive so request
966
	 * interrupts on every tx packet are expensive so request
Lines 996-1001 iflib_netmap_txsync(struct netmap_kring *kring, int flags) Link Here
996
	 */
997
	 */
997
998
998
	nm_i = kring->nr_hwcur;
999
	nm_i = kring->nr_hwcur;
1000
	tx_pkts = tx_bytes = 0;
999
	if (nm_i != head) {	/* we have new packets to send */
1001
	if (nm_i != head) {	/* we have new packets to send */
1000
		pkt_info_zero(&pi);
1002
		pkt_info_zero(&pi);
1001
		pi.ipi_segs = txq->ift_segs;
1003
		pi.ipi_segs = txq->ift_segs;
Lines 1027-1032 iflib_netmap_txsync(struct netmap_kring *kring, int flags) Link Here
1027
			/* Fill the slot in the NIC ring. */
1029
			/* Fill the slot in the NIC ring. */
1028
			ctx->isc_txd_encap(ctx->ifc_softc, &pi);
1030
			ctx->isc_txd_encap(ctx->ifc_softc, &pi);
1029
			DBG_COUNTER_INC(tx_encap);
1031
			DBG_COUNTER_INC(tx_encap);
1032
			tx_pkts++;
1033
			tx_bytes += len;
1030
1034
1031
			/* prefetch for next round */
1035
			/* prefetch for next round */
1032
			__builtin_prefetch(&ring->slot[nm_i + 1]);
1036
			__builtin_prefetch(&ring->slot[nm_i + 1]);
Lines 1081-1086 iflib_netmap_txsync(struct netmap_kring *kring, int flags) Link Here
1081
			    iflib_netmap_timer, txq,
1085
			    iflib_netmap_timer, txq,
1082
			    txq->ift_netmap_timer.c_cpu, 0);
1086
			    txq->ift_netmap_timer.c_cpu, 0);
1083
		}
1087
		}
1088
1089
	if_inc_counter(ifp, IFCOUNTER_OBYTES, tx_bytes);
1090
	if_inc_counter(ifp, IFCOUNTER_OPACKETS, tx_pkts);
1091
1084
	return (0);
1092
	return (0);
1085
}
1093
}
1086
1094
Lines 1108-1113 iflib_netmap_rxsync(struct netmap_kring *kring, int flags) Link Here
1108
	u_int n;
1116
	u_int n;
1109
	u_int const lim = kring->nkr_num_slots - 1;
1117
	u_int const lim = kring->nkr_num_slots - 1;
1110
	int force_update = (flags & NAF_FORCE_READ) || kring->nr_kflags & NKR_PENDINTR;
1118
	int force_update = (flags & NAF_FORCE_READ) || kring->nr_kflags & NKR_PENDINTR;
1119
	int rx_bytes, rx_pkts;
1111
1120
1112
	if_ctx_t ctx = ifp->if_softc;
1121
	if_ctx_t ctx = ifp->if_softc;
1113
	if_shared_ctx_t sctx = ctx->ifc_sctx;
1122
	if_shared_ctx_t sctx = ctx->ifc_sctx;
Lines 1141-1146 iflib_netmap_rxsync(struct netmap_kring *kring, int flags) Link Here
1141
	 *
1150
	 *
1142
	 * fl->ifl_cidx is set to 0 on a ring reinit
1151
	 * fl->ifl_cidx is set to 0 on a ring reinit
1143
	 */
1152
	 */
1153
	rx_bytes = rx_pkts = 0;
1144
	if (netmap_no_pendintr || force_update) {
1154
	if (netmap_no_pendintr || force_update) {
1145
		uint32_t hwtail_lim = nm_prev(kring->nr_hwcur, lim);
1155
		uint32_t hwtail_lim = nm_prev(kring->nr_hwcur, lim);
1146
		bool have_rxcq = sctx->isc_flags & IFLIB_HAS_RXCQ;
1156
		bool have_rxcq = sctx->isc_flags & IFLIB_HAS_RXCQ;
Lines 1169-1174 iflib_netmap_rxsync(struct netmap_kring *kring, int flags) Link Here
1169
			ri.iri_cidx = *cidxp;
1179
			ri.iri_cidx = *cidxp;
1170
1180
1171
			error = ctx->isc_rxd_pkt_get(ctx->ifc_softc, &ri);
1181
			error = ctx->isc_rxd_pkt_get(ctx->ifc_softc, &ri);
1182
			if (!error) {
1183
				rx_pkts++;
1184
				rx_bytes += ri.iri_len;
1185
			}
1172
			ring->slot[nm_i].len = error ? 0 : ri.iri_len - crclen;
1186
			ring->slot[nm_i].len = error ? 0 : ri.iri_len - crclen;
1173
			ring->slot[nm_i].flags = 0;
1187
			ring->slot[nm_i].flags = 0;
1174
			if (have_rxcq) {
1188
			if (have_rxcq) {
Lines 1200-1205 iflib_netmap_rxsync(struct netmap_kring *kring, int flags) Link Here
1200
	 * nm_i == (nic_i + kring->nkr_hwofs) % ring_size
1214
	 * nm_i == (nic_i + kring->nkr_hwofs) % ring_size
1201
	 */
1215
	 */
1202
	netmap_fl_refill(rxq, kring, false);
1216
	netmap_fl_refill(rxq, kring, false);
1217
	
1218
	if_inc_counter(ifp, IFCOUNTER_IBYTES, rx_bytes);
1219
	if_inc_counter(ifp, IFCOUNTER_IPACKETS, rx_pkts);
1203
1220
1204
	return (0);
1221
	return (0);
1205
}
1222
}

Return to bug 252850