git: c8d56817b80f - main - vm_object: drop memq field
- Reply: Andriy Gapon : "Re: git: c8d56817b80f - main - vm_object: drop memq field"
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Tue, 06 May 2025 16:03:11 UTC
The branch main has been updated by dougm: URL: https://cgit.FreeBSD.org/src/commit/?id=c8d56817b80f49c30e5bfe2cbff1dc2aed27096b commit c8d56817b80f49c30e5bfe2cbff1dc2aed27096b Author: Doug Moore <dougm@FreeBSD.org> AuthorDate: 2025-05-06 16:01:51 +0000 Commit: Doug Moore <dougm@FreeBSD.org> CommitDate: 2025-05-06 16:01:51 +0000 vm_object: drop memq field The memq field in vm_object is used to maintain a list of mapped pages, sorted by pindex. Remove that field, and stop maintaining the list. Reviewed by: alc, kib, markj Differential Revision: https://reviews.freebsd.org/D48007 --- sys/vm/vm_object.c | 4 ---- sys/vm/vm_object.h | 1 - sys/vm/vm_page.c | 45 +++++++++------------------------------------ 3 files changed, 9 insertions(+), 41 deletions(-) diff --git a/sys/vm/vm_object.c b/sys/vm/vm_object.c index 5f505f87de67..bf6867d4ffcc 100644 --- a/sys/vm/vm_object.c +++ b/sys/vm/vm_object.c @@ -181,8 +181,6 @@ vm_object_zdtor(void *mem, int size, void *arg) object = (vm_object_t)mem; KASSERT(object->ref_count == 0, ("object %p ref_count = %d", object, object->ref_count)); - KASSERT(TAILQ_EMPTY(&object->memq), - ("object %p has resident pages in its memq", object)); KASSERT(vm_radix_is_empty(&object->rtree), ("object %p has resident pages in its trie", object)); #if VM_NRESERVLEVEL > 0 @@ -236,7 +234,6 @@ _vm_object_allocate(objtype_t type, vm_pindex_t size, u_short flags, vm_object_t object, void *handle) { - TAILQ_INIT(&object->memq); LIST_INIT(&object->shadow_head); object->type = type; @@ -922,7 +919,6 @@ vm_object_terminate_pages(vm_object_t object) vm_radix_reclaim_callback(&object->rtree, vm_object_terminate_single_page, object); - TAILQ_INIT(&object->memq); object->resident_page_count = 0; if (object->type == OBJT_VNODE) vdrop(object->handle); diff --git a/sys/vm/vm_object.h b/sys/vm/vm_object.h index 68cc41731b73..20e9fc1fcdcd 100644 --- a/sys/vm/vm_object.h +++ b/sys/vm/vm_object.h @@ -98,7 +98,6 @@ struct vm_object { TAILQ_ENTRY(vm_object) object_list; /* list of all objects */ LIST_HEAD(, vm_object) shadow_head; /* objects that this is a shadow for */ LIST_ENTRY(vm_object) shadow_list; /* chain of shadow objects */ - struct pglist memq; /* list of resident pages */ struct vm_radix rtree; /* root of the resident page radix trie*/ vm_pindex_t size; /* Object size */ struct domainset_ref domain; /* NUMA policy. */ diff --git a/sys/vm/vm_page.c b/sys/vm/vm_page.c index d254f08d4801..15d38dd436ae 100644 --- a/sys/vm/vm_page.c +++ b/sys/vm/vm_page.c @@ -171,8 +171,7 @@ static void vm_page_enqueue(vm_page_t m, uint8_t queue); static bool vm_page_free_prep(vm_page_t m); static void vm_page_free_toq(vm_page_t m); static void vm_page_init(void *dummy); -static void vm_page_insert_radixdone(vm_page_t m, vm_object_t object, - vm_page_t mpred); +static void vm_page_insert_radixdone(vm_page_t m, vm_object_t object); static void vm_page_mvqueue(vm_page_t m, const uint8_t queue, const uint16_t nflag); static int vm_page_reclaim_run(int req_class, int domain, u_long npages, @@ -1470,11 +1469,11 @@ vm_page_dirty_KBI(vm_page_t m) } /* - * Insert the given page into the given object at the given pindex. mpred is - * used for memq linkage. From vm_page_insert, iter is false, mpred is - * initially NULL, and this procedure looks it up. From vm_page_iter_insert, - * iter is true and mpred is known to the caller to be valid, and may be NULL if - * this will be the page with the lowest pindex. + * Insert the given page into the given object at the given pindex. From + * vm_page_insert, iter is false, mpred is initially NULL, and this procedure + * looks it up. From vm_page_iter_insert, iter is true and mpred is known to + * the caller to be valid, and may be NULL if this will be the page with the + * lowest pindex. * * The procedure is marked __always_inline to suggest to the compiler to * eliminate the lookup parameter and the associated alternate branch. @@ -1514,7 +1513,7 @@ vm_page_insert_lookup(vm_page_t m, vm_object_t object, vm_pindex_t pindex, /* * Now link into the object's ordered list of backed pages. */ - vm_page_insert_radixdone(m, object, mpred); + vm_page_insert_radixdone(m, object); vm_pager_page_inserted(object, m); return (0); } @@ -1563,7 +1562,7 @@ vm_page_iter_insert(struct pctrie_iter *pages, vm_page_t m, vm_object_t object, * The object must be locked. */ static void -vm_page_insert_radixdone(vm_page_t m, vm_object_t object, vm_page_t mpred) +vm_page_insert_radixdone(vm_page_t m, vm_object_t object) { VM_OBJECT_ASSERT_WLOCKED(object); @@ -1571,24 +1570,6 @@ vm_page_insert_radixdone(vm_page_t m, vm_object_t object, vm_page_t mpred) ("vm_page_insert_radixdone: page %p has inconsistent object", m)); KASSERT((m->ref_count & VPRC_OBJREF) != 0, ("vm_page_insert_radixdone: page %p is missing object ref", m)); - if (mpred != NULL) { - KASSERT(mpred->object == object, - ("vm_page_insert_radixdone: object doesn't contain mpred")); - KASSERT(mpred->pindex < m->pindex, - ("vm_page_insert_radixdone: mpred doesn't precede pindex")); - KASSERT(TAILQ_NEXT(mpred, listq) == NULL || - m->pindex < TAILQ_NEXT(mpred, listq)->pindex, - ("vm_page_insert_radixdone: pindex doesn't precede msucc")); - } else { - KASSERT(TAILQ_EMPTY(&object->memq) || - m->pindex < TAILQ_FIRST(&object->memq)->pindex, - ("vm_page_insert_radixdone: no mpred but not first page")); - } - - if (mpred != NULL) - TAILQ_INSERT_AFTER(&object->memq, mpred, m, listq); - else - TAILQ_INSERT_HEAD(&object->memq, m, listq); /* * Show that the object has one more resident page. @@ -1636,11 +1617,6 @@ vm_page_remove_radixdone(vm_page_t m) vm_pager_page_removed(object, m); m->object = NULL; - /* - * Now remove from the object's list of backed pages. - */ - TAILQ_REMOVE(&object->memq, m, listq); - /* * And show that the object has one fewer resident page. */ @@ -1914,9 +1890,6 @@ vm_page_replace_hold(vm_page_t mnew, vm_object_t object, vm_pindex_t pindex, (mnew->oflags & VPO_UNMANAGED), ("vm_page_replace: mismatched VPO_UNMANAGED")); - /* Keep the resident page list in sorted order. */ - TAILQ_INSERT_AFTER(&object->memq, mold, mnew, listq); - TAILQ_REMOVE(&object->memq, mold, listq); mold->object = NULL; /* @@ -1996,7 +1969,7 @@ vm_page_iter_rename(struct pctrie_iter *old_pages, vm_page_t m, m->pindex = new_pindex; m->object = new_object; - vm_page_insert_radixdone(m, new_object, mpred); + vm_page_insert_radixdone(m, new_object); if (vm_page_any_valid(m)) vm_page_dirty(m); vm_pager_page_inserted(new_object, m);