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

Function iflib_fl_setup

freebsd/net/iflib.c:2230–2278  ·  view source on GitHub ↗

* * Initialize a free list and its buffers. * **********************************************************************/

Source from the content-addressed store, hash-verified

2228 *
2229 **********************************************************************/
2230static int
2231iflib_fl_setup(iflib_fl_t fl)
2232{
2233 iflib_rxq_t rxq = fl->ifl_rxq;
2234 if_ctx_t ctx = rxq->ifr_ctx;
2235 if_softc_ctx_t scctx = &ctx->ifc_softc_ctx;
2236 int qidx;
2237
2238 bit_nclear(fl->ifl_rx_bitmap, 0, fl->ifl_size - 1);
2239 /*
2240 ** Free current RX buffer structs and their mbufs
2241 */
2242 iflib_fl_bufs_free(fl);
2243 /* Now replenish the mbufs */
2244 MPASS(fl->ifl_credits == 0);
2245 qidx = rxq->ifr_fl_offset + fl->ifl_id;
2246 if (scctx->isc_rxd_buf_size[qidx] != 0)
2247 fl->ifl_buf_size = scctx->isc_rxd_buf_size[qidx];
2248 else
2249 fl->ifl_buf_size = ctx->ifc_rx_mbuf_sz;
2250 /*
2251 * ifl_buf_size may be a driver-supplied value, so pull it up
2252 * to the selected mbuf size.
2253 */
2254 fl->ifl_buf_size = iflib_get_mbuf_size_for(fl->ifl_buf_size);
2255 if (fl->ifl_buf_size > ctx->ifc_max_fl_buf_size)
2256 ctx->ifc_max_fl_buf_size = fl->ifl_buf_size;
2257 fl->ifl_cltype = m_gettype(fl->ifl_buf_size);
2258 fl->ifl_zone = m_getzone(fl->ifl_buf_size);
2259
2260 /*
2261 * Avoid pre-allocating zillions of clusters to an idle card
2262 * potentially speeding up attach. In any case make sure
2263 * to leave a descriptor unavailable. See the comment in
2264 * iflib_fl_refill_all().
2265 */
2266 MPASS(fl->ifl_size > 0);
2267 (void)iflib_fl_refill(ctx, fl, min(128, fl->ifl_size - 1));
2268 if (min(128, fl->ifl_size - 1) != fl->ifl_credits)
2269 return (ENOBUFS);
2270 /*
2271 * handle failure
2272 */
2273 MPASS(rxq != NULL);
2274 MPASS(fl->ifl_ifdi != NULL);
2275 bus_dmamap_sync(fl->ifl_ifdi->idi_tag, fl->ifl_ifdi->idi_map,
2276 BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE);
2277 return (0);
2278}
2279
2280/*********************************************************************
2281 *

Callers 1

iflib_init_lockedFunction · 0.85

Calls 8

bit_nclearFunction · 0.85
iflib_fl_bufs_freeFunction · 0.85
iflib_get_mbuf_size_forFunction · 0.85
iflib_fl_refillFunction · 0.85
minFunction · 0.85
m_gettypeFunction · 0.50
m_getzoneFunction · 0.50
bus_dmamap_syncFunction · 0.50

Tested by

no test coverage detected