svn commit: r328607 - user/jeff/numa/sys/vm
Jeff Roberson
jeff at FreeBSD.org
Tue Jan 30 21:34:35 UTC 2018
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 */
More information about the svn-src-user
mailing list