The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/compat/linuxkpi/common/include/linux/gfp.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*-
    2  * Copyright (c) 2010 Isilon Systems, Inc.
    3  * Copyright (c) 2010 iX Systems, Inc.
    4  * Copyright (c) 2010 Panasas, Inc.
    5  * Copyright (c) 2013-2017 Mellanox Technologies, Ltd.
    6  * All rights reserved.
    7  *
    8  * Redistribution and use in source and binary forms, with or without
    9  * modification, are permitted provided that the following conditions
   10  * are met:
   11  * 1. Redistributions of source code must retain the above copyright
   12  *    notice unmodified, this list of conditions, and the following
   13  *    disclaimer.
   14  * 2. Redistributions in binary form must reproduce the above copyright
   15  *    notice, this list of conditions and the following disclaimer in the
   16  *    documentation and/or other materials provided with the distribution.
   17  *
   18  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
   19  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   20  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
   21  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
   22  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
   23  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
   24  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
   25  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
   26  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
   27  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
   28  *
   29  * $FreeBSD$
   30  */
   31 #ifndef _LINUXKPI_LINUX_GFP_H_
   32 #define _LINUXKPI_LINUX_GFP_H_
   33 
   34 #include <sys/cdefs.h>
   35 #include <sys/types.h>
   36 #include <sys/systm.h>
   37 #include <sys/malloc.h>
   38 
   39 #include <linux/page.h>
   40 
   41 #include <vm/vm_param.h>
   42 #include <vm/vm_object.h>
   43 #include <vm/vm_extern.h>
   44 #include <vm/vm_kern.h>
   45 
   46 #define __GFP_NOWARN    0
   47 #define __GFP_HIGHMEM   0
   48 #define __GFP_ZERO      M_ZERO
   49 #define __GFP_NORETRY   0
   50 #define __GFP_NOMEMALLOC 0
   51 #define __GFP_RECLAIM   0
   52 #define __GFP_RECLAIMABLE   0
   53 #define __GFP_RETRY_MAYFAIL 0
   54 #define __GFP_MOVABLE   0
   55 #define __GFP_COMP      0
   56 #define __GFP_KSWAPD_RECLAIM 0
   57 
   58 #define __GFP_IO        0
   59 #define __GFP_NO_KSWAPD 0
   60 #define __GFP_KSWAPD_RECLAIM    0
   61 #define __GFP_WAIT      M_WAITOK
   62 #define __GFP_DMA32     (1U << 24) /* LinuxKPI only */
   63 #define __GFP_BITS_SHIFT 25
   64 #define __GFP_BITS_MASK ((1 << __GFP_BITS_SHIFT) - 1)
   65 #define __GFP_NOFAIL    M_WAITOK
   66 
   67 #define GFP_NOWAIT      M_NOWAIT
   68 #define GFP_ATOMIC      (M_NOWAIT | M_USE_RESERVE)
   69 #define GFP_KERNEL      M_WAITOK
   70 #define GFP_USER        M_WAITOK
   71 #define GFP_HIGHUSER    M_WAITOK
   72 #define GFP_HIGHUSER_MOVABLE    M_WAITOK
   73 #define GFP_IOFS        M_NOWAIT
   74 #define GFP_NOIO        M_NOWAIT
   75 #define GFP_NOFS        M_NOWAIT
   76 #define GFP_DMA32       __GFP_DMA32
   77 #define GFP_TEMPORARY   M_NOWAIT
   78 #define GFP_NATIVE_MASK (M_NOWAIT | M_WAITOK | M_USE_RESERVE | M_ZERO)
   79 #define GFP_TRANSHUGE   0
   80 #define GFP_TRANSHUGE_LIGHT     0
   81 
   82 CTASSERT((__GFP_DMA32 & GFP_NATIVE_MASK) == 0);
   83 CTASSERT((__GFP_BITS_MASK & GFP_NATIVE_MASK) == GFP_NATIVE_MASK);
   84 
   85 struct page_frag_cache {
   86         void *va;
   87         int pagecnt_bias;
   88 };
   89 
   90 /*
   91  * Resolve a page into a virtual address:
   92  *
   93  * NOTE: This function only works for pages allocated by the kernel.
   94  */
   95 extern void *linux_page_address(struct page *);
   96 
   97 #define page_address(page) linux_page_address(page)
   98 
   99 /*
  100  * Page management for unmapped pages:
  101  */
  102 extern vm_page_t linux_alloc_pages(gfp_t flags, unsigned int order);
  103 extern void linux_free_pages(vm_page_t page, unsigned int order);
  104 void *linuxkpi_page_frag_alloc(struct page_frag_cache *, size_t, gfp_t);
  105 void linuxkpi_page_frag_free(void *);
  106 void linuxkpi__page_frag_cache_drain(struct page *, size_t);
  107 
  108 static inline struct page *
  109 alloc_page(gfp_t flags)
  110 {
  111 
  112         return (linux_alloc_pages(flags, 0));
  113 }
  114 
  115 static inline struct page *
  116 alloc_pages(gfp_t flags, unsigned int order)
  117 {
  118 
  119         return (linux_alloc_pages(flags, order));
  120 }
  121 
  122 static inline struct page *
  123 alloc_pages_node(int node_id, gfp_t flags, unsigned int order)
  124 {
  125 
  126         return (linux_alloc_pages(flags, order));
  127 }
  128 
  129 static inline void
  130 __free_pages(struct page *page, unsigned int order)
  131 {
  132 
  133         linux_free_pages(page, order);
  134 }
  135 
  136 static inline void
  137 __free_page(struct page *page)
  138 {
  139 
  140         linux_free_pages(page, 0);
  141 }
  142 
  143 /*
  144  * Page management for mapped pages:
  145  */
  146 extern vm_offset_t linux_alloc_kmem(gfp_t flags, unsigned int order);
  147 extern void linux_free_kmem(vm_offset_t, unsigned int order);
  148 
  149 static inline vm_offset_t
  150 get_zeroed_page(gfp_t flags)
  151 {
  152 
  153         return (linux_alloc_kmem(flags | __GFP_ZERO, 0));
  154 }
  155 
  156 static inline vm_offset_t
  157 __get_free_page(gfp_t flags)
  158 {
  159 
  160         return (linux_alloc_kmem(flags, 0));
  161 }
  162 
  163 static inline vm_offset_t
  164 __get_free_pages(gfp_t flags, unsigned int order)
  165 {
  166 
  167         return (linux_alloc_kmem(flags, order));
  168 }
  169 
  170 static inline void
  171 free_pages(uintptr_t addr, unsigned int order)
  172 {
  173         if (addr == 0)
  174                 return;
  175 
  176         linux_free_kmem(addr, order);
  177 }
  178 
  179 static inline void
  180 free_page(uintptr_t addr)
  181 {
  182         if (addr == 0)
  183                 return;
  184 
  185         linux_free_kmem(addr, 0);
  186 }
  187 
  188 static inline void *
  189 page_frag_alloc(struct page_frag_cache *pfc, size_t fragsz, gfp_t gfp)
  190 {
  191 
  192         return (linuxkpi_page_frag_alloc(pfc, fragsz, gfp));
  193 }
  194 
  195 static inline void
  196 page_frag_free(void *addr)
  197 {
  198 
  199         linuxkpi_page_frag_free(addr);
  200 }
  201 
  202 static inline void
  203 __page_frag_cache_drain(struct page *page, size_t count)
  204 {
  205 
  206         linuxkpi__page_frag_cache_drain(page, count);
  207 }
  208 
  209 static inline bool
  210 gfpflags_allow_blocking(const gfp_t gfp_flags)
  211 {
  212         return ((gfp_flags & (M_WAITOK | M_NOWAIT)) == M_WAITOK);
  213 }
  214 
  215 #define SetPageReserved(page)   do { } while (0)        /* NOP */
  216 #define ClearPageReserved(page) do { } while (0)        /* NOP */
  217 
  218 #endif  /* _LINUXKPI_LINUX_GFP_H_ */

Cache object: d5af37d4d37e7ffa21a973f7109f11db


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.