Date: Tue, 30 Jan 2018 21:34:34 +0000 (UTC) From: Jeff Roberson <jeff@FreeBSD.org> To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r328607 - user/jeff/numa/sys/vm Message-ID: <201801302134.w0ULYYT5024550@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: jeff Date: Tue Jan 30 21:34:34 2018 New Revision: 328607 URL: https://svnweb.freebsd.org/changeset/base/328607 Log: Fix some bugs and review feedback. Modified: user/jeff/numa/sys/vm/vm_page.c user/jeff/numa/sys/vm/vm_reserv.c Modified: user/jeff/numa/sys/vm/vm_page.c ============================================================================== --- user/jeff/numa/sys/vm/vm_page.c Tue Jan 30 21:26:31 2018 (r328606) +++ user/jeff/numa/sys/vm/vm_page.c Tue Jan 30 21:34:34 2018 (r328607) @@ -171,7 +171,7 @@ static uma_zone_t fakepg_zone; static void vm_page_alloc_check(vm_page_t m); static void vm_page_clear_dirty_mask(vm_page_t m, vm_page_bits_t pagebits); static void vm_page_enqueue(uint8_t queue, vm_page_t m); -static void vm_page_free_phys(vm_page_t m); +static void vm_page_free_phys(struct vm_domain *vmd, vm_page_t m); static void vm_page_init(void *dummy); static int vm_page_insert_after(vm_page_t m, vm_object_t object, vm_pindex_t pindex, vm_page_t mpred); @@ -2536,7 +2536,7 @@ unlock: do { MPASS(vm_phys_domain(m) == domain); SLIST_REMOVE_HEAD(&free, plinks.s.ss); - vm_page_free_phys(m); + vm_page_free_phys(vmd, m); } while ((m = SLIST_FIRST(&free)) != NULL); vm_domain_free_wakeup(vmd); vm_domain_free_unlock(vmd); @@ -2751,7 +2751,8 @@ vm_wait_severe(void) mtx_lock(&vm_domainset_lock); while (vm_page_count_severe()) { vm_severe_waiters++; - msleep(&vm_min_domains, &vm_domainset_lock, PVM, "vmwait", 0); + msleep(&vm_severe_domains, &vm_domainset_lock, PVM, + "vmwait", 0); } mtx_unlock(&vm_domainset_lock); } @@ -3165,12 +3166,12 @@ vm_page_free_prep(vm_page_t m, bool pagequeue_locked) * queues. This is the last step to free a page. */ static void -vm_page_free_phys(vm_page_t m) +vm_page_free_phys(struct vm_domain *vmd, vm_page_t m) { - vm_domain_free_assert_locked(vm_pagequeue_domain(m)); + vm_domain_free_assert_locked(vmd); - vm_domain_freecnt_adj(vm_pagequeue_domain(m), 1); + vm_domain_freecnt_adj(vmd, 1); #if VM_NRESERVLEVEL > 0 if (!vm_reserv_free_page(m)) #endif @@ -3195,7 +3196,7 @@ vm_page_free_phys_pglist(struct pglist *tq) vmd = vm_pagequeue_domain(m); vm_domain_free_lock(vmd); } - vm_page_free_phys(m); + vm_page_free_phys(vmd, m); } if (vmd != NULL) { vm_domain_free_wakeup(vmd); @@ -3221,7 +3222,7 @@ vm_page_free_toq(vm_page_t m) return; vmd = vm_pagequeue_domain(m); vm_domain_free_lock(vmd); - vm_page_free_phys(m); + vm_page_free_phys(vmd, m); vm_domain_free_wakeup(vmd); vm_domain_free_unlock(vmd); } Modified: user/jeff/numa/sys/vm/vm_reserv.c ============================================================================== --- user/jeff/numa/sys/vm/vm_reserv.c Tue Jan 30 21:26:31 2018 (r328606) +++ user/jeff/numa/sys/vm/vm_reserv.c Tue Jan 30 21:34:34 2018 (r328607) @@ -822,9 +822,11 @@ vm_reserv_extend(int req, vm_object_t object, vm_pinde /* Handle vm_page_rename(m, new_object, ...). */ popmap_is_set(rv->popmap, index)) m = NULL; - if (m != NULL) + if (m != NULL) { vm_reserv_populate(rv, index); - free_count = vm_domain_freecnt_adj(vmd, -1); + free_count = vm_domain_freecnt_adj(vmd, -1); + } else + free_count = vmd->vmd_free_count; vm_domain_free_unlock(vmd); if (vm_paging_needed(vmd, free_count)) @@ -1362,12 +1364,20 @@ vm_reserv_startup(vm_offset_t *vaddr, vm_paddr_t end, vm_page_t vm_reserv_to_superpage(vm_page_t m) { + struct vm_domain *vmd; vm_reserv_t rv; VM_OBJECT_ASSERT_LOCKED(m->object); rv = vm_reserv_from_page(m); - return (rv->object == m->object && rv->popcnt == VM_LEVEL_0_NPAGES ? - rv->pages : NULL); + vmd = VM_DOMAIN(rv->domain); + vm_domain_free_lock(vmd); + if (rv->object == m->object && rv->popcnt == VM_LEVEL_0_NPAGES) + m = rv->pages; + else + m = NULL; + vm_domain_free_unlock(vmd); + + return (m); } #endif /* VM_NRESERVLEVEL > 0 */
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201801302134.w0ULYYT5024550>