Page MenuHomeFreeBSD

D32005.diff
No OneTemporary

D32005.diff

diff --git a/sys/vm/vm_page.h b/sys/vm/vm_page.h
--- a/sys/vm/vm_page.h
+++ b/sys/vm/vm_page.h
@@ -616,6 +616,12 @@
vm_page_t vm_page_alloc_freelist_domain(int, int, int);
vm_page_t vm_page_alloc_noobj(int);
vm_page_t vm_page_alloc_noobj_domain(int, int);
+vm_page_t vm_page_alloc_noobj_contig(int req, u_long npages, vm_paddr_t low,
+ vm_paddr_t high, u_long alignment, vm_paddr_t boundary,
+ vm_memattr_t memattr);
+vm_page_t vm_page_alloc_noobj_contig_domain(int domain, int req, u_long npages,
+ vm_paddr_t low, vm_paddr_t high, u_long alignment, vm_paddr_t boundary,
+ vm_memattr_t memattr);
void vm_page_bits_set(vm_page_t m, vm_page_bits_t *bits, vm_page_bits_t set);
bool vm_page_blacklist_add(vm_paddr_t pa, bool verbose);
vm_page_t vm_page_grab(vm_object_t, vm_pindex_t, int);
diff --git a/sys/vm/vm_page.c b/sys/vm/vm_page.c
--- a/sys/vm/vm_page.c
+++ b/sys/vm/vm_page.c
@@ -2509,6 +2509,49 @@
return (_vm_page_alloc_noobj_domain(domain, VM_NFREELIST, req));
}
+vm_page_t
+vm_page_alloc_noobj_contig(int req, u_long npages, vm_paddr_t low,
+ vm_paddr_t high, u_long alignment, vm_paddr_t boundary,
+ vm_memattr_t memattr)
+{
+ struct vm_domainset_iter di;
+ vm_page_t m;
+ int domain;
+
+ vm_domainset_iter_page_init(&di, NULL, 0, &domain, &req);
+ do {
+ m = vm_page_alloc_noobj_contig_domain(domain, req, npages, low,
+ high, alignment, boundary, memattr);
+ if (m != NULL)
+ break;
+ } while (vm_domainset_iter_page(&di, NULL, &domain) == 0);
+
+ return (m);
+}
+
+vm_page_t
+vm_page_alloc_noobj_contig_domain(int domain, int req, u_long npages,
+ vm_paddr_t low, vm_paddr_t high, u_long alignment, vm_paddr_t boundary,
+ vm_memattr_t memattr)
+{
+ vm_page_t m;
+ u_long i;
+
+ KASSERT((req & (VM_ALLOC_SBUSY | VM_ALLOC_IGN_SBUSY |
+ VM_ALLOC_NOOBJ)) == 0,
+ ("%s: invalid req %#x", __func__, req));
+
+ m = vm_page_alloc_contig_domain(NULL, 0, domain, req | VM_ALLOC_NOOBJ,
+ npages, low, high, alignment, boundary, memattr);
+ if (m != NULL && (req & VM_ALLOC_ZERO) != 0) {
+ for (i = 0; i < npages; i++) {
+ if ((m[i].flags & PG_ZERO) == 0)
+ pmap_zero_page(&m[i]);
+ }
+ }
+ return (m);
+}
+
/*
* Check a page that has been freshly dequeued from a freelist.
*/

File Metadata

Mime Type
text/plain
Expires
Tue, Feb 11, 9:19 PM (15 h, 2 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
16601336
Default Alt Text
D32005.diff (2 KB)

Event Timeline