| 5254 | } |
| 5255 | |
| 5256 | static void |
| 5257 | iflib_tqg_detach(if_ctx_t ctx) |
| 5258 | { |
| 5259 | iflib_txq_t txq; |
| 5260 | iflib_rxq_t rxq; |
| 5261 | int i; |
| 5262 | struct taskqgroup *tqg; |
| 5263 | |
| 5264 | /* XXX drain any dependent tasks */ |
| 5265 | tqg = qgroup_if_io_tqg; |
| 5266 | for (txq = ctx->ifc_txqs, i = 0; i < NTXQSETS(ctx); i++, txq++) { |
| 5267 | callout_drain(&txq->ift_timer); |
| 5268 | #ifdef DEV_NETMAP |
| 5269 | callout_drain(&txq->ift_netmap_timer); |
| 5270 | #endif /* DEV_NETMAP */ |
| 5271 | if (txq->ift_task.gt_uniq != NULL) |
| 5272 | taskqgroup_detach(tqg, &txq->ift_task); |
| 5273 | } |
| 5274 | for (i = 0, rxq = ctx->ifc_rxqs; i < NRXQSETS(ctx); i++, rxq++) { |
| 5275 | if (rxq->ifr_task.gt_uniq != NULL) |
| 5276 | taskqgroup_detach(tqg, &rxq->ifr_task); |
| 5277 | } |
| 5278 | tqg = qgroup_if_config_tqg; |
| 5279 | if (ctx->ifc_admin_task.gt_uniq != NULL) |
| 5280 | taskqgroup_detach(tqg, &ctx->ifc_admin_task); |
| 5281 | if (ctx->ifc_vflr_task.gt_uniq != NULL) |
| 5282 | taskqgroup_detach(tqg, &ctx->ifc_vflr_task); |
| 5283 | } |
| 5284 | |
| 5285 | static void |
| 5286 | iflib_free_intr_mem(if_ctx_t ctx) |
no test coverage detected