svn commit: r355458 - stable/12/sys/vm
Mark Johnston
markj at FreeBSD.org
Fri Dec 6 18:51:17 UTC 2019
Author: markj
Date: Fri Dec 6 18:51:16 2019
New Revision: 355458
URL: https://svnweb.freebsd.org/changeset/base/355458
Log:
MFC r355003:
Update the checks in vm_page_zone_import().
Modified:
stable/12/sys/vm/vm_page.c
Directory Properties:
stable/12/ (props changed)
Modified: stable/12/sys/vm/vm_page.c
==============================================================================
--- stable/12/sys/vm/vm_page.c Fri Dec 6 18:39:05 2019 (r355457)
+++ stable/12/sys/vm/vm_page.c Fri Dec 6 18:51:16 2019 (r355458)
@@ -1755,21 +1755,14 @@ vm_page_alloc_after(vm_object_t object, vm_pindex_t pi
* Returns true if the number of free pages exceeds the minimum
* for the request class and false otherwise.
*/
-int
-vm_domain_allocate(struct vm_domain *vmd, int req, int npages)
+static int
+_vm_domain_allocate(struct vm_domain *vmd, int req_class, int npages)
{
u_int limit, old, new;
- req = req & VM_ALLOC_CLASS_MASK;
-
- /*
- * The page daemon is allowed to dig deeper into the free page list.
- */
- if (curproc == pageproc && req != VM_ALLOC_INTERRUPT)
- req = VM_ALLOC_SYSTEM;
- if (req == VM_ALLOC_INTERRUPT)
+ if (req_class == VM_ALLOC_INTERRUPT)
limit = 0;
- else if (req == VM_ALLOC_SYSTEM)
+ else if (req_class == VM_ALLOC_SYSTEM)
limit = vmd->vmd_interrupt_free_min;
else
limit = vmd->vmd_free_reserved;
@@ -1797,6 +1790,20 @@ vm_domain_allocate(struct vm_domain *vmd, int req, int
return (1);
}
+int
+vm_domain_allocate(struct vm_domain *vmd, int req, int npages)
+{
+ int req_class;
+
+ /*
+ * The page daemon is allowed to dig deeper into the free page list.
+ */
+ req_class = req & VM_ALLOC_CLASS_MASK;
+ if (curproc == pageproc && req_class != VM_ALLOC_INTERRUPT)
+ req_class = VM_ALLOC_SYSTEM;
+ return (_vm_domain_allocate(vmd, req_class, npages));
+}
+
vm_page_t
vm_page_alloc_domain_after(vm_object_t object, vm_pindex_t pindex, int domain,
int req, vm_page_t mpred)
@@ -2244,8 +2251,13 @@ vm_page_zone_import(void *arg, void **store, int cnt,
pgcache = arg;
vmd = VM_DOMAIN(pgcache->domain);
- /* Only import if we can bring in a full bucket. */
- if (cnt == 1 || !vm_domain_allocate(vmd, VM_ALLOC_NORMAL, cnt))
+
+ /*
+ * The page daemon should avoid creating extra memory pressure since its
+ * main purpose is to replenish the store of free pages.
+ */
+ if (vmd->vmd_severeset || curproc == pageproc ||
+ !_vm_domain_allocate(vmd, VM_ALLOC_NORMAL, cnt))
return (0);
domain = vmd->vmd_domain;
vm_domain_free_lock(vmd);
More information about the svn-src-stable
mailing list