summaryrefslogtreecommitdiffstats
path: root/sys/vm/vm_page.h
diff options
context:
space:
mode:
authorkib <kib@FreeBSD.org>2012-11-14 20:01:40 +0000
committerkib <kib@FreeBSD.org>2012-11-14 20:01:40 +0000
commite8ae50d444598a029ceb39f734aeda3b5ee77521 (patch)
treefe0b937a1c55b958f76306b0964a8d88a0f20367 /sys/vm/vm_page.h
parent32941467f0eddd9305a7be708a05bdc2b91beb3a (diff)
downloadFreeBSD-src-e8ae50d444598a029ceb39f734aeda3b5ee77521.zip
FreeBSD-src-e8ae50d444598a029ceb39f734aeda3b5ee77521.tar.gz
Flip the semantic of M_NOWAIT to only require the allocation to not
sleep, and perform the page allocations with VM_ALLOC_SYSTEM class. Previously, the allocation was also allowed to completely drain the reserve of the free pages, being translated to VM_ALLOC_INTERRUPT request class for vm_page_alloc() and similar functions. Allow the caller of malloc* to request the 'deep drain' semantic by providing M_USE_RESERVE flag, now translated to VM_ALLOC_INTERRUPT class. Previously, it resulted in less aggressive VM_ALLOC_SYSTEM allocation class. Centralize the translation of the M_* malloc(9) flags in the single inline function malloc2vm_flags(). Discussion started by: "Sears, Steven" <Steven.Sears@netapp.com> Reviewed by: alc, mdf (previous version) Tested by: pho (previous version) MFC after: 2 weeks
Diffstat (limited to 'sys/vm/vm_page.h')
-rw-r--r--sys/vm/vm_page.h16
1 files changed, 16 insertions, 0 deletions
diff --git a/sys/vm/vm_page.h b/sys/vm/vm_page.h
index 76cee03..d9e4692 100644
--- a/sys/vm/vm_page.h
+++ b/sys/vm/vm_page.h
@@ -347,6 +347,22 @@ vm_page_t PHYS_TO_VM_PAGE(vm_paddr_t pa);
#define VM_ALLOC_COUNT_SHIFT 16
#define VM_ALLOC_COUNT(count) ((count) << VM_ALLOC_COUNT_SHIFT)
+#ifdef M_NOWAIT
+static inline int
+malloc2vm_flags(int malloc_flags)
+{
+ int pflags;
+
+ pflags = (malloc_flags & M_USE_RESERVE) != 0 ? VM_ALLOC_INTERRUPT :
+ VM_ALLOC_SYSTEM;
+ if ((malloc_flags & M_ZERO) != 0)
+ pflags |= VM_ALLOC_ZERO;
+ if ((malloc_flags & M_NODUMP) != 0)
+ pflags |= VM_ALLOC_NODUMP;
+ return (pflags);
+}
+#endif
+
void vm_page_busy(vm_page_t m);
void vm_page_flash(vm_page_t m);
void vm_page_io_start(vm_page_t m);
OpenPOWER on IntegriCloud