* Returns an existing reservation or NULL and initialized successor pointer. */
| 517 | * Returns an existing reservation or NULL and initialized successor pointer. |
| 518 | */ |
| 519 | static vm_reserv_t |
| 520 | vm_reserv_from_object(vm_object_t object, vm_pindex_t pindex, |
| 521 | vm_page_t mpred, vm_page_t *msuccp) |
| 522 | { |
| 523 | vm_reserv_t rv; |
| 524 | vm_page_t msucc; |
| 525 | |
| 526 | msucc = NULL; |
| 527 | if (mpred != NULL) { |
| 528 | KASSERT(mpred->object == object, |
| 529 | ("vm_reserv_from_object: object doesn't contain mpred")); |
| 530 | KASSERT(mpred->pindex < pindex, |
| 531 | ("vm_reserv_from_object: mpred doesn't precede pindex")); |
| 532 | rv = vm_reserv_from_page(mpred); |
| 533 | if (rv->object == object && vm_reserv_has_pindex(rv, pindex)) |
| 534 | goto found; |
| 535 | msucc = TAILQ_NEXT(mpred, listq); |
| 536 | } else |
| 537 | msucc = TAILQ_FIRST(&object->memq); |
| 538 | if (msucc != NULL) { |
| 539 | KASSERT(msucc->pindex > pindex, |
| 540 | ("vm_reserv_from_object: msucc doesn't succeed pindex")); |
| 541 | rv = vm_reserv_from_page(msucc); |
| 542 | if (rv->object == object && vm_reserv_has_pindex(rv, pindex)) |
| 543 | goto found; |
| 544 | } |
| 545 | rv = NULL; |
| 546 | |
| 547 | found: |
| 548 | *msuccp = msucc; |
| 549 | |
| 550 | return (rv); |
| 551 | } |
| 552 | |
| 553 | /* |
| 554 | * Returns TRUE if the given reservation contains the given page index and |
no test coverage detected