From 8b9ed12e568acb1fcccce4b393aca37d7194c395 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Fran=C3=A7ois=20Tigeot?= Date: Wed, 7 Aug 2013 14:36:50 +0200 Subject: [PATCH] kernel: Add a memattr argument to vm_page_alloc_contig() --- sys/vm/vm_contig.c | 3 ++- sys/vm/vm_page.c | 11 +++++++++-- sys/vm/vm_page.h | 2 +- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/sys/vm/vm_contig.c b/sys/vm/vm_contig.c index 822f6568e9..c045fd01b0 100644 --- a/sys/vm/vm_contig.c +++ b/sys/vm/vm_contig.c @@ -267,7 +267,8 @@ vm_contig_pg_alloc(unsigned long size, vm_paddr_t low, vm_paddr_t high, * alist. The returned pages will be allocated and wired but not * busied. */ - m = vm_page_alloc_contig(low, high, alignment, boundary, size); + m = vm_page_alloc_contig( + low, high, alignment, boundary, size, VM_MEMATTR_DEFAULT); if (m) return (m - &pga[0]); diff --git a/sys/vm/vm_page.c b/sys/vm/vm_page.c index 42ddcd09f8..fb5b12e144 100644 --- a/sys/vm/vm_page.c +++ b/sys/vm/vm_page.c @@ -1682,9 +1682,11 @@ done: vm_page_t vm_page_alloc_contig(vm_paddr_t low, vm_paddr_t high, unsigned long alignment, unsigned long boundary, - unsigned long size) + unsigned long size, vm_memattr_t memattr) { alist_blk_t blk; + vm_page_t m; + int i; alignment >>= PAGE_SHIFT; if (alignment == 0) @@ -1721,7 +1723,12 @@ vm_page_alloc_contig(vm_paddr_t low, vm_paddr_t high, (intmax_t)(vm_paddr_t)blk << PAGE_SHIFT, (size + PAGE_MASK) * (PAGE_SIZE / 1024)); } - return (PHYS_TO_VM_PAGE((vm_paddr_t)blk << PAGE_SHIFT)); + + m = PHYS_TO_VM_PAGE((vm_paddr_t)blk << PAGE_SHIFT); + if (memattr != VM_MEMATTR_DEFAULT) + for (i = 0;i < size;i++) + pmap_page_set_memattr(&m[i], memattr); + return m; } /* diff --git a/sys/vm/vm_page.h b/sys/vm/vm_page.h index ba35883c98..50a2bf12bf 100644 --- a/sys/vm/vm_page.h +++ b/sys/vm/vm_page.h @@ -444,7 +444,7 @@ void vm_page_pcpu_cache(void); vm_page_t vm_page_alloc (struct vm_object *, vm_pindex_t, int); vm_page_t vm_page_alloc_contig(vm_paddr_t low, vm_paddr_t high, unsigned long alignment, unsigned long boundary, - unsigned long size); + unsigned long size, vm_memattr_t memattr); vm_page_t vm_page_grab (struct vm_object *, vm_pindex_t, int); void vm_page_cache (vm_page_t); int vm_page_try_to_cache (vm_page_t); -- 2.41.0