From owner-svn-src-user@freebsd.org Tue Jan 30 21:34:35 2018 Return-Path: Delivered-To: svn-src-user@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 65B8DEE4A95 for ; Tue, 30 Jan 2018 21:34:35 +0000 (UTC) (envelope-from jeff@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 1BEC582CF6; Tue, 30 Jan 2018 21:34:35 +0000 (UTC) (envelope-from jeff@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 0FF831CCCE; Tue, 30 Jan 2018 21:34:35 +0000 (UTC) (envelope-from jeff@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id w0ULYYm0024552; Tue, 30 Jan 2018 21:34:34 GMT (envelope-from jeff@FreeBSD.org) Received: (from jeff@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w0ULYYT5024550; Tue, 30 Jan 2018 21:34:34 GMT (envelope-from jeff@FreeBSD.org) Message-Id: <201801302134.w0ULYYT5024550@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: jeff set sender to jeff@FreeBSD.org using -f From: Jeff Roberson Date: Tue, 30 Jan 2018 21:34:34 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r328607 - user/jeff/numa/sys/vm X-SVN-Group: user X-SVN-Commit-Author: jeff X-SVN-Commit-Paths: user/jeff/numa/sys/vm X-SVN-Commit-Revision: 328607 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.25 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 30 Jan 2018 21:34:35 -0000 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 */