1 /* Public domain. */ 2 3 #ifndef _LINUX_MM_H 4 #define _LINUX_MM_H 5 6 #include <sys/types.h> 7 #include <sys/param.h> 8 #include <sys/malloc.h> 9 #include <sys/stdint.h> 10 #include <sys/atomic.h> 11 #include <machine/cpu.h> 12 #include <uvm/uvm_extern.h> 13 #include <linux/fs.h> 14 #include <linux/shrinker.h> 15 #include <asm/pgtable.h> 16 17 #define PageHighMem(x) 0 18 19 #define page_address(x) VM_PAGE_TO_PHYS(x) 20 #define page_to_phys(page) (VM_PAGE_TO_PHYS(page)) 21 #define page_to_pfn(pp) (VM_PAGE_TO_PHYS(pp) / PAGE_SIZE) 22 #define pfn_to_page(pfn) (PHYS_TO_VM_PAGE(ptoa(pfn))) 23 #define nth_page(page, n) (&(page)[(n)]) 24 #define offset_in_page(off) ((off) & PAGE_MASK) 25 #define set_page_dirty(page) atomic_clearbits_int(&page->pg_flags, PG_CLEAN) 26 27 #define PAGE_ALIGN(addr) (((addr) + PAGE_MASK) & ~PAGE_MASK) 28 29 #define PFN_UP(x) (((x) + PAGE_SIZE-1) >> PAGE_SHIFT) 30 #define PFN_DOWN(x) ((x) >> PAGE_SHIFT) 31 32 #define is_vmalloc_addr(ptr) true 33 34 static inline void * 35 kvmalloc(size_t size, gfp_t flags) 36 { 37 return malloc(size, M_DRM, flags); 38 } 39 40 static inline void * 41 kvmalloc_array(size_t n, size_t size, int flags) 42 { 43 if (n != 0 && SIZE_MAX / n < size) 44 return NULL; 45 return malloc(n * size, M_DRM, flags); 46 } 47 48 static inline void * 49 kvcalloc(size_t n, size_t size, int flags) 50 { 51 return kvmalloc_array(n, size, flags | M_ZERO); 52 } 53 54 static inline void * 55 kvzalloc(size_t size, int flags) 56 { 57 return malloc(size, M_DRM, flags | M_ZERO); 58 } 59 60 static inline void 61 kvfree(const void *objp) 62 { 63 free((void *)objp, M_DRM, 0); 64 } 65 66 static inline long 67 si_mem_available(void) 68 { 69 return uvmexp.free; 70 } 71 72 #define MAX_ORDER 11 73 74 static inline unsigned int 75 get_order(size_t size) 76 { 77 return flsl((size - 1) >> PAGE_SHIFT); 78 } 79 80 #endif 81