* vm_wait_domain: * * Sleep until free pages are available for allocation. * - Called in various places after failed memory allocations. */
| 3214 | * - Called in various places after failed memory allocations. |
| 3215 | */ |
| 3216 | void |
| 3217 | vm_wait_domain(int domain) |
| 3218 | { |
| 3219 | struct vm_domain *vmd; |
| 3220 | domainset_t wdom; |
| 3221 | |
| 3222 | vmd = VM_DOMAIN(domain); |
| 3223 | vm_domain_free_assert_unlocked(vmd); |
| 3224 | |
| 3225 | if (curproc == pageproc) { |
| 3226 | mtx_lock(&vm_domainset_lock); |
| 3227 | if (vmd->vmd_free_count < vmd->vmd_pageout_free_min) { |
| 3228 | vmd->vmd_pageout_pages_needed = 1; |
| 3229 | msleep(&vmd->vmd_pageout_pages_needed, |
| 3230 | &vm_domainset_lock, PDROP | PSWP, "VMWait", 0); |
| 3231 | } else |
| 3232 | mtx_unlock(&vm_domainset_lock); |
| 3233 | } else { |
| 3234 | if (pageproc == NULL) |
| 3235 | panic("vm_wait in early boot"); |
| 3236 | DOMAINSET_ZERO(&wdom); |
| 3237 | DOMAINSET_SET(vmd->vmd_domain, &wdom); |
| 3238 | vm_wait_doms(&wdom, 0); |
| 3239 | } |
| 3240 | } |
| 3241 | |
| 3242 | static int |
| 3243 | vm_wait_flags(vm_object_t obj, int mflags) |
no test coverage detected