• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /macosx-10.10/xnu-2782.1.97/osfmk/vm/

Lines Matching refs:pager

76  * This pager mostly handles page-in request (from memory_object_data_request())
134 "swapfile pager"
146 boolean_t is_ready; /* is this pager ready ? */
147 boolean_t is_mapped; /* is this pager mapped ? */
176 void swapfile_pager_dequeue(swapfile_pager_t pager);
177 void swapfile_pager_deallocate_internal(swapfile_pager_t pager,
179 void swapfile_pager_terminate_internal(swapfile_pager_t pager);
203 lck_grp_init(&swapfile_pager_lck_grp, "swapfile pager", &swapfile_pager_lck_grp_attr);
223 swapfile_pager_t pager;
234 pager = swapfile_pager_lookup(mem_obj);
238 pager->pager_control = control;
316 swapfile_pager_t pager;
337 pager = swapfile_pager_lookup(mem_obj);
338 assert(pager->is_ready);
339 assert(pager->ref_count > 1); /* pager is alive and mapped */
341 PAGER_DEBUG(PAGER_PAGEIN, ("swapfile_pager_data_request: %p, %llx, %x, %x, pager %p\n", mem_obj, offset, length, protection_required, pager));
346 mo_control = pager->pager_control;
442 * provided by us, the pager.
480 * i.e one should not "revive" a dead pager this way.
486 swapfile_pager_t pager;
488 pager = swapfile_pager_lookup(mem_obj);
491 assert(pager->ref_count > 0);
492 pager->ref_count++;
500 * Removes a pager from the list of pagers.
506 swapfile_pager_t pager)
508 assert(!pager->is_mapped);
511 pager,
514 pager->pager_queue.next = NULL;
515 pager->pager_queue.prev = NULL;
524 * with this pager.
530 * We don't need the lock because the pager has already been removed from
535 swapfile_pager_t pager)
537 assert(pager->is_ready);
538 assert(!pager->is_mapped);
540 if (pager->swapfile_vnode != NULL) {
541 pager->swapfile_vnode = NULL;
545 memory_object_destroy(pager->pager_control, 0);
551 * Release a reference on this pager and free it when the last
558 swapfile_pager_t pager,
565 /* drop a reference on this pager */
566 pager->ref_count--;
568 if (pager->ref_count == 1) {
571 * no one is really holding on to this pager anymore.
574 swapfile_pager_dequeue(pager);
575 /* the pager is all ours: no need for the lock now */
577 swapfile_pager_terminate_internal(pager);
578 } else if (pager->ref_count == 0) {
582 * pager structure.
585 if (pager->pager_control != MEMORY_OBJECT_CONTROL_NULL) {
586 memory_object_control_deallocate(pager->pager_control);
587 pager->pager_control = MEMORY_OBJECT_CONTROL_NULL;
589 kfree(pager, sizeof (*pager));
590 pager = SWAPFILE_PAGER_NULL;
602 * Release a reference on this pager and free it when the last
609 swapfile_pager_t pager;
612 pager = swapfile_pager_lookup(mem_obj);
613 swapfile_pager_deallocate_internal(pager, FALSE);
641 swapfile_pager_t pager;
645 pager = swapfile_pager_lookup(mem_obj);
647 memory_object_synchronize_completed(pager->pager_control,
666 swapfile_pager_t pager;
670 pager = swapfile_pager_lookup(mem_obj);
673 assert(pager->is_ready);
674 assert(pager->ref_count > 0); /* pager is alive */
675 if (pager->is_mapped == FALSE) {
677 * First mapping of this pager: take an extra reference
678 * that will remain until all the mappings of this pager
681 pager->is_mapped = TRUE;
682 pager->ref_count++;
698 swapfile_pager_t pager;
703 pager = swapfile_pager_lookup(mem_obj);
706 if (pager->is_mapped) {
709 * reference that represents all the mappings of this pager.
711 pager->is_mapped = FALSE;
712 swapfile_pager_deallocate_internal(pager, TRUE);
729 swapfile_pager_t pager;
731 pager = (swapfile_pager_t) mem_obj;
732 assert(pager->pager_ops == &swapfile_pager_ops);
733 assert(pager->ref_count > 0);
734 return pager;
741 swapfile_pager_t pager, pager2;
745 pager = (swapfile_pager_t) kalloc(sizeof (*pager));
746 if (pager == SWAPFILE_PAGER_NULL) {
757 pager->pager_ops = &swapfile_pager_ops;
758 pager->pager_ikot = IKOT_MEMORY_OBJECT;
759 pager->is_ready = FALSE;/* not ready until it has a "name" */
760 pager->ref_count = 1; /* setup reference */
761 pager->is_mapped = FALSE;
762 pager->pager_control = MEMORY_OBJECT_CONTROL_NULL;
763 pager->swapfile_vnode = vp;
766 /* see if anyone raced us to create a pager for the same object */
781 pager->swapfile_vnode = NULL;
782 kfree(pager, sizeof (*pager));
784 pager = pager2;
785 /* let the winner make sure the pager gets ready */
786 return pager;
789 /* enter new pager at the head of our list of pagers */
791 pager,
800 kr = memory_object_create_named((memory_object_t) pager,
806 /* the new pager is now ready to be used */
807 pager->is_ready = TRUE;
810 /* wakeup anyone waiting for this pager to be ready */
811 thread_wakeup(&pager->is_ready);
813 return pager;
827 swapfile_pager_t pager;
832 pager,
835 if (pager->swapfile_vnode == vp) {
840 (queue_entry_t) pager)) {
841 /* no existing pager for this backing object */
842 pager = SWAPFILE_PAGER_NULL;
844 /* make sure pager doesn't disappear */
845 pager->ref_count++;
850 if (pager == SWAPFILE_PAGER_NULL) {
851 pager = swapfile_pager_create(vp);
852 if (pager == SWAPFILE_PAGER_NULL) {
858 while (!pager->is_ready) {
861 &pager->is_ready,
866 return (memory_object_t) pager;
873 swapfile_pager_t pager;
875 pager = swapfile_pager_lookup(mem_obj);
877 return pager->pager_control;