MCPcopy Create free account
hub / github.com/F-Stack/f-stack / iflib_rxeof

Function iflib_rxeof

freebsd/net/iflib.c:2867–3028  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2865}
2866
2867static uint8_t
2868iflib_rxeof(iflib_rxq_t rxq, qidx_t budget)
2869{
2870 if_t ifp;
2871 if_ctx_t ctx = rxq->ifr_ctx;
2872 if_shared_ctx_t sctx = ctx->ifc_sctx;
2873 if_softc_ctx_t scctx = &ctx->ifc_softc_ctx;
2874 int avail, i;
2875 qidx_t *cidxp;
2876 struct if_rxd_info ri;
2877 int err, budget_left, rx_bytes, rx_pkts;
2878 iflib_fl_t fl;
2879 int lro_enabled;
2880 bool v4_forwarding, v6_forwarding, lro_possible;
2881 uint8_t retval = 0;
2882
2883 /*
2884 * XXX early demux data packets so that if_input processing only handles
2885 * acks in interrupt context
2886 */
2887 struct mbuf *m, *mh, *mt, *mf;
2888
2889 NET_EPOCH_ASSERT();
2890
2891 lro_possible = v4_forwarding = v6_forwarding = false;
2892 ifp = ctx->ifc_ifp;
2893 mh = mt = NULL;
2894 MPASS(budget > 0);
2895 rx_pkts = rx_bytes = 0;
2896 if (sctx->isc_flags & IFLIB_HAS_RXCQ)
2897 cidxp = &rxq->ifr_cq_cidx;
2898 else
2899 cidxp = &rxq->ifr_fl[0].ifl_cidx;
2900 if ((avail = iflib_rxd_avail(ctx, rxq, *cidxp, budget)) == 0) {
2901 for (i = 0, fl = &rxq->ifr_fl[0]; i < sctx->isc_nfl; i++, fl++)
2902 retval |= iflib_fl_refill_all(ctx, fl);
2903 DBG_COUNTER_INC(rx_unavail);
2904 return (retval);
2905 }
2906
2907 /* pfil needs the vnet to be set */
2908 CURVNET_SET_QUIET(ifp->if_vnet);
2909 for (budget_left = budget; budget_left > 0 && avail > 0;) {
2910 if (__predict_false(!CTX_ACTIVE(ctx))) {
2911 DBG_COUNTER_INC(rx_ctx_inactive);
2912 break;
2913 }
2914 /*
2915 * Reset client set fields to their default values
2916 */
2917 rxd_info_zero(&ri);
2918 ri.iri_qsidx = rxq->ifr_id;
2919 ri.iri_cidx = *cidxp;
2920 ri.iri_ifp = ifp;
2921 ri.iri_frags = rxq->ifr_frags;
2922 err = ctx->isc_rxd_pkt_get(ctx->ifc_softc, &ri);
2923
2924 if (err)

Callers 2

_task_fn_rxFunction · 0.85
iflib_debugnet_pollFunction · 0.85

Calls 12

iflib_rxd_availFunction · 0.85
iflib_fl_refill_allFunction · 0.85
rxd_info_zeroFunction · 0.85
iflib_rxd_pkt_getFunction · 0.85
if_getcapenableFunction · 0.85
iflib_get_ip_forwardingFunction · 0.85
iflib_fixup_rxFunction · 0.85
iflib_check_lro_possibleFunction · 0.85
tcp_lro_rxFunction · 0.85
if_inc_counterFunction · 0.85
tcp_lro_flush_allFunction · 0.85

Tested by

no test coverage detected