| 2179 | } |
| 2180 | |
| 2181 | static void |
| 2182 | iflib_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 | * |
no test coverage detected