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 |
} |