vm_page.c (7847e04111f2c2b06b36f6d19a46d78814d7836d) | vm_page.c (21f01f45847344239c364e6d6c5100e87731fd6c) |
---|---|
1/*- 2 * SPDX-License-Identifier: (BSD-3-Clause AND MIT-CMU) 3 * 4 * Copyright (c) 1991 Regents of the University of California. 5 * All rights reserved. 6 * Copyright (c) 1998 Matthew Dillon. All Rights Reserved. 7 * 8 * This code is derived from software contributed to Berkeley by --- 2613 unchanged lines hidden (view full) --- 2622 KASSERT(m_new->oflags == VPO_UNMANAGED, 2623 ("page %p is managed", m_new)); 2624 m_new->oflags = m->oflags & VPO_NOSYNC; 2625 pmap_copy_page(m, m_new); 2626 m_new->valid = m->valid; 2627 m_new->dirty = m->dirty; 2628 m->flags &= ~PG_ZERO; 2629 vm_page_xbusy(m); | 1/*- 2 * SPDX-License-Identifier: (BSD-3-Clause AND MIT-CMU) 3 * 4 * Copyright (c) 1991 Regents of the University of California. 5 * All rights reserved. 6 * Copyright (c) 1998 Matthew Dillon. All Rights Reserved. 7 * 8 * This code is derived from software contributed to Berkeley by --- 2613 unchanged lines hidden (view full) --- 2622 KASSERT(m_new->oflags == VPO_UNMANAGED, 2623 ("page %p is managed", m_new)); 2624 m_new->oflags = m->oflags & VPO_NOSYNC; 2625 pmap_copy_page(m, m_new); 2626 m_new->valid = m->valid; 2627 m_new->dirty = m->dirty; 2628 m->flags &= ~PG_ZERO; 2629 vm_page_xbusy(m); |
2630 vm_page_remque(m); | 2630 vm_page_dequeue(m); |
2631 vm_page_replace_checked(m_new, object, 2632 m->pindex, m); 2633 if (vm_page_free_prep(m)) 2634 SLIST_INSERT_HEAD(&free, m, 2635 plinks.s.ss); 2636 2637 /* 2638 * The new page must be deactivated 2639 * before the object is unlocked. 2640 */ 2641 vm_page_change_lock(m_new, &m_mtx); 2642 vm_page_deactivate(m_new); 2643 } else { 2644 m->flags &= ~PG_ZERO; | 2631 vm_page_replace_checked(m_new, object, 2632 m->pindex, m); 2633 if (vm_page_free_prep(m)) 2634 SLIST_INSERT_HEAD(&free, m, 2635 plinks.s.ss); 2636 2637 /* 2638 * The new page must be deactivated 2639 * before the object is unlocked. 2640 */ 2641 vm_page_change_lock(m_new, &m_mtx); 2642 vm_page_deactivate(m_new); 2643 } else { 2644 m->flags &= ~PG_ZERO; |
2645 vm_page_remque(m); | 2645 vm_page_dequeue(m); |
2646 vm_page_remove(m); 2647 if (vm_page_free_prep(m)) 2648 SLIST_INSERT_HEAD(&free, m, 2649 plinks.s.ss); 2650 KASSERT(m->dirty == 0, 2651 ("page %p is dirty", m)); 2652 } 2653 } else --- 745 unchanged lines hidden (view full) --- 3399 3400 if ((queue = vm_page_queue(m)) == PQ_ACTIVE || m->wire_count > 0 || 3401 (m->oflags & VPO_UNMANAGED) != 0) { 3402 if (queue == PQ_ACTIVE && m->act_count < ACT_INIT) 3403 m->act_count = ACT_INIT; 3404 return; 3405 } 3406 | 2646 vm_page_remove(m); 2647 if (vm_page_free_prep(m)) 2648 SLIST_INSERT_HEAD(&free, m, 2649 plinks.s.ss); 2650 KASSERT(m->dirty == 0, 2651 ("page %p is dirty", m)); 2652 } 2653 } else --- 745 unchanged lines hidden (view full) --- 3399 3400 if ((queue = vm_page_queue(m)) == PQ_ACTIVE || m->wire_count > 0 || 3401 (m->oflags & VPO_UNMANAGED) != 0) { 3402 if (queue == PQ_ACTIVE && m->act_count < ACT_INIT) 3403 m->act_count = ACT_INIT; 3404 return; 3405 } 3406 |
3407 vm_page_remque(m); | 3407 vm_page_dequeue(m); |
3408 if (m->act_count < ACT_INIT) 3409 m->act_count = ACT_INIT; 3410 vm_page_enqueue(m, PQ_ACTIVE); 3411} 3412 3413/* 3414 * vm_page_free_prep: 3415 * --- 255 unchanged lines hidden (view full) --- 3671{ 3672 3673 vm_page_assert_locked(m); 3674 3675 if (m->wire_count > 0 || (m->oflags & VPO_UNMANAGED) != 0) 3676 return; 3677 3678 if (!vm_page_inactive(m)) { | 3408 if (m->act_count < ACT_INIT) 3409 m->act_count = ACT_INIT; 3410 vm_page_enqueue(m, PQ_ACTIVE); 3411} 3412 3413/* 3414 * vm_page_free_prep: 3415 * --- 255 unchanged lines hidden (view full) --- 3671{ 3672 3673 vm_page_assert_locked(m); 3674 3675 if (m->wire_count > 0 || (m->oflags & VPO_UNMANAGED) != 0) 3676 return; 3677 3678 if (!vm_page_inactive(m)) { |
3679 vm_page_remque(m); | 3679 vm_page_dequeue(m); |
3680 vm_page_enqueue(m, PQ_INACTIVE); 3681 } else 3682 vm_page_requeue(m); 3683} 3684 3685/* 3686 * Move the specified page close to the head of the inactive queue, 3687 * bypassing LRU. A marker page is used to maintain FIFO ordering. --- 6 unchanged lines hidden (view full) --- 3694vm_page_deactivate_noreuse(vm_page_t m) 3695{ 3696 3697 vm_page_assert_locked(m); 3698 3699 if (m->wire_count > 0 || (m->oflags & VPO_UNMANAGED) != 0) 3700 return; 3701 | 3680 vm_page_enqueue(m, PQ_INACTIVE); 3681 } else 3682 vm_page_requeue(m); 3683} 3684 3685/* 3686 * Move the specified page close to the head of the inactive queue, 3687 * bypassing LRU. A marker page is used to maintain FIFO ordering. --- 6 unchanged lines hidden (view full) --- 3694vm_page_deactivate_noreuse(vm_page_t m) 3695{ 3696 3697 vm_page_assert_locked(m); 3698 3699 if (m->wire_count > 0 || (m->oflags & VPO_UNMANAGED) != 0) 3700 return; 3701 |
3702 if (!vm_page_inactive(m)) 3703 vm_page_remque(m); 3704 m->queue = PQ_INACTIVE; | 3702 if (!vm_page_inactive(m)) { 3703 vm_page_dequeue(m); 3704 m->queue = PQ_INACTIVE; 3705 } |
3705 if ((m->aflags & PGA_REQUEUE_HEAD) == 0) 3706 vm_page_aflag_set(m, PGA_REQUEUE_HEAD); 3707 vm_pqbatch_submit_page(m, PQ_INACTIVE); 3708} 3709 3710/* 3711 * vm_page_launder 3712 * --- 5 unchanged lines hidden (view full) --- 3718 3719 vm_page_assert_locked(m); 3720 if (m->wire_count > 0 || (m->oflags & VPO_UNMANAGED) != 0) 3721 return; 3722 3723 if (vm_page_in_laundry(m)) 3724 vm_page_requeue(m); 3725 else { | 3706 if ((m->aflags & PGA_REQUEUE_HEAD) == 0) 3707 vm_page_aflag_set(m, PGA_REQUEUE_HEAD); 3708 vm_pqbatch_submit_page(m, PQ_INACTIVE); 3709} 3710 3711/* 3712 * vm_page_launder 3713 * --- 5 unchanged lines hidden (view full) --- 3719 3720 vm_page_assert_locked(m); 3721 if (m->wire_count > 0 || (m->oflags & VPO_UNMANAGED) != 0) 3722 return; 3723 3724 if (vm_page_in_laundry(m)) 3725 vm_page_requeue(m); 3726 else { |
3726 vm_page_remque(m); | 3727 vm_page_dequeue(m); |
3727 vm_page_enqueue(m, PQ_LAUNDRY); 3728 } 3729} 3730 3731/* 3732 * vm_page_unswappable 3733 * 3734 * Put a page in the PQ_UNSWAPPABLE holding queue. 3735 */ 3736void 3737vm_page_unswappable(vm_page_t m) 3738{ 3739 3740 vm_page_assert_locked(m); 3741 KASSERT(m->wire_count == 0 && (m->oflags & VPO_UNMANAGED) == 0, 3742 ("page %p already unswappable", m)); 3743 | 3728 vm_page_enqueue(m, PQ_LAUNDRY); 3729 } 3730} 3731 3732/* 3733 * vm_page_unswappable 3734 * 3735 * Put a page in the PQ_UNSWAPPABLE holding queue. 3736 */ 3737void 3738vm_page_unswappable(vm_page_t m) 3739{ 3740 3741 vm_page_assert_locked(m); 3742 KASSERT(m->wire_count == 0 && (m->oflags & VPO_UNMANAGED) == 0, 3743 ("page %p already unswappable", m)); 3744 |
3744 vm_page_remque(m); | 3745 vm_page_dequeue(m); |
3745 vm_page_enqueue(m, PQ_UNSWAPPABLE); 3746} 3747 3748/* 3749 * Attempt to free the page. If it cannot be freed, do nothing. Returns true 3750 * if the page is freed and false otherwise. 3751 * 3752 * The page must be managed. The page and its containing object must be --- 753 unchanged lines hidden --- | 3746 vm_page_enqueue(m, PQ_UNSWAPPABLE); 3747} 3748 3749/* 3750 * Attempt to free the page. If it cannot be freed, do nothing. Returns true 3751 * if the page is freed and false otherwise. 3752 * 3753 * The page must be managed. The page and its containing object must be --- 753 unchanged lines hidden --- |