| 3414 | } |
| 3415 | |
| 3416 | static bool |
| 3417 | vm_page_pqstate_commit_dequeue(vm_page_t m, vm_page_astate_t *old, |
| 3418 | vm_page_astate_t new) |
| 3419 | { |
| 3420 | struct vm_pagequeue *pq; |
| 3421 | vm_page_astate_t as; |
| 3422 | bool ret; |
| 3423 | |
| 3424 | pq = _vm_page_pagequeue(m, old->queue); |
| 3425 | |
| 3426 | /* |
| 3427 | * The queue field and PGA_ENQUEUED flag are stable only so long as the |
| 3428 | * corresponding page queue lock is held. |
| 3429 | */ |
| 3430 | vm_pagequeue_lock(pq); |
| 3431 | as = vm_page_astate_load(m); |
| 3432 | if (__predict_false(as._bits != old->_bits)) { |
| 3433 | *old = as; |
| 3434 | ret = false; |
| 3435 | } else { |
| 3436 | ret = _vm_page_pqstate_commit_dequeue(pq, m, old, new); |
| 3437 | } |
| 3438 | vm_pagequeue_unlock(pq); |
| 3439 | return (ret); |
| 3440 | } |
| 3441 | |
| 3442 | /* |
| 3443 | * Commit a queue state update that enqueues or requeues a page. |
no test coverage detected