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

Function iflib_fl_bufs_free

freebsd/net/iflib.c:2181–2223  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2179}
2180
2181static void
2182iflib_fl_bufs_free(iflib_fl_t fl)
2183{
2184 iflib_dma_info_t idi = fl->ifl_ifdi;
2185 bus_dmamap_t sd_map;
2186 uint32_t i;
2187
2188 for (i = 0; i < fl->ifl_size; i++) {
2189 struct mbuf **sd_m = &fl->ifl_sds.ifsd_m[i];
2190 caddr_t *sd_cl = &fl->ifl_sds.ifsd_cl[i];
2191
2192 if (*sd_cl != NULL) {
2193 sd_map = fl->ifl_sds.ifsd_map[i];
2194 bus_dmamap_sync(fl->ifl_buf_tag, sd_map,
2195 BUS_DMASYNC_POSTREAD);
2196 bus_dmamap_unload(fl->ifl_buf_tag, sd_map);
2197 uma_zfree(fl->ifl_zone, *sd_cl);
2198 *sd_cl = NULL;
2199 if (*sd_m != NULL) {
2200 m_init(*sd_m, M_NOWAIT, MT_DATA, 0);
2201 uma_zfree(zone_mbuf, *sd_m);
2202 *sd_m = NULL;
2203 }
2204 } else {
2205 MPASS(*sd_m == NULL);
2206 }
2207#if MEMORY_LOGGING
2208 fl->ifl_m_dequeued++;
2209 fl->ifl_cl_dequeued++;
2210#endif
2211 }
2212#ifdef INVARIANTS
2213 for (i = 0; i < fl->ifl_size; i++) {
2214 MPASS(fl->ifl_sds.ifsd_cl[i] == NULL);
2215 MPASS(fl->ifl_sds.ifsd_m[i] == NULL);
2216 }
2217#endif
2218 /*
2219 * Reset free list values
2220 */
2221 fl->ifl_credits = fl->ifl_cidx = fl->ifl_pidx = fl->ifl_gen = fl->ifl_fragidx = 0;
2222 bzero(idi->idi_vaddr, idi->idi_size);
2223}
2224
2225/*********************************************************************
2226 *

Callers 2

iflib_fl_setupFunction · 0.85
iflib_stopFunction · 0.85

Calls 5

bzeroFunction · 0.85
bus_dmamap_syncFunction · 0.50
bus_dmamap_unloadFunction · 0.50
uma_zfreeFunction · 0.50
m_initFunction · 0.50

Tested by

no test coverage detected