| 1333 | } |
| 1334 | |
| 1335 | static void |
| 1336 | exec_release_args_kva(struct exec_args_kva *argkva, u_int gen) |
| 1337 | { |
| 1338 | vm_offset_t base; |
| 1339 | |
| 1340 | base = argkva->addr; |
| 1341 | if (argkva->gen != gen) { |
| 1342 | (void)vm_map_madvise(exec_map, base, base + exec_map_entry_size, |
| 1343 | MADV_FREE); |
| 1344 | argkva->gen = gen; |
| 1345 | } |
| 1346 | if (!atomic_cmpset_ptr((uintptr_t *)DPCPU_PTR(exec_args_kva), |
| 1347 | (uintptr_t)NULL, (uintptr_t)argkva)) { |
| 1348 | mtx_lock(&exec_args_kva_mtx); |
| 1349 | SLIST_INSERT_HEAD(&exec_args_kva_freelist, argkva, next); |
| 1350 | wakeup_one(&exec_args_kva_freelist); |
| 1351 | mtx_unlock(&exec_args_kva_mtx); |
| 1352 | } |
| 1353 | } |
| 1354 | |
| 1355 | static void |
| 1356 | exec_free_args_kva(void *cookie) |
no test coverage detected