| 2865 | } |
| 2866 | |
| 2867 | static uint8_t |
| 2868 | iflib_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) |
no test coverage detected