LCOV - code coverage report
Current view: top level - include/linux - gfp.h (source / functions) Hit Total Coverage
Test: combined.info Lines: 31 34 91.2 %
Date: 2022-04-01 14:35:51 Functions: 0 1 0.0 %
Branches: 17 34 50.0 %

           Branch data     Line data    Source code
       1                 :            : /* SPDX-License-Identifier: GPL-2.0 */
       2                 :            : #ifndef __LINUX_GFP_H
       3                 :            : #define __LINUX_GFP_H
       4                 :            : 
       5                 :            : #include <linux/mmdebug.h>
       6                 :            : #include <linux/mmzone.h>
       7                 :            : #include <linux/stddef.h>
       8                 :            : #include <linux/linkage.h>
       9                 :            : #include <linux/topology.h>
      10                 :            : 
      11                 :            : struct vm_area_struct;
      12                 :            : 
      13                 :            : /*
      14                 :            :  * In case of changes, please don't forget to update
      15                 :            :  * include/trace/events/mmflags.h and tools/perf/builtin-kmem.c
      16                 :            :  */
      17                 :            : 
      18                 :            : /* Plain integer GFP bitmasks. Do not use this directly. */
      19                 :            : #define ___GFP_DMA              0x01u
      20                 :            : #define ___GFP_HIGHMEM          0x02u
      21                 :            : #define ___GFP_DMA32            0x04u
      22                 :            : #define ___GFP_MOVABLE          0x08u
      23                 :            : #define ___GFP_RECLAIMABLE      0x10u
      24                 :            : #define ___GFP_HIGH             0x20u
      25                 :            : #define ___GFP_IO               0x40u
      26                 :            : #define ___GFP_FS               0x80u
      27                 :            : #define ___GFP_ZERO             0x100u
      28                 :            : #define ___GFP_ATOMIC           0x200u
      29                 :            : #define ___GFP_DIRECT_RECLAIM   0x400u
      30                 :            : #define ___GFP_KSWAPD_RECLAIM   0x800u
      31                 :            : #define ___GFP_WRITE            0x1000u
      32                 :            : #define ___GFP_NOWARN           0x2000u
      33                 :            : #define ___GFP_RETRY_MAYFAIL    0x4000u
      34                 :            : #define ___GFP_NOFAIL           0x8000u
      35                 :            : #define ___GFP_NORETRY          0x10000u
      36                 :            : #define ___GFP_MEMALLOC         0x20000u
      37                 :            : #define ___GFP_COMP             0x40000u
      38                 :            : #define ___GFP_NOMEMALLOC       0x80000u
      39                 :            : #define ___GFP_HARDWALL         0x100000u
      40                 :            : #define ___GFP_THISNODE         0x200000u
      41                 :            : #define ___GFP_ACCOUNT          0x400000u
      42                 :            : #ifdef CONFIG_LOCKDEP
      43                 :            : #define ___GFP_NOLOCKDEP        0x800000u
      44                 :            : #else
      45                 :            : #define ___GFP_NOLOCKDEP        0
      46                 :            : #endif
      47                 :            : /* If the above are modified, __GFP_BITS_SHIFT may need updating */
      48                 :            : 
      49                 :            : /*
      50                 :            :  * Physical address zone modifiers (see linux/mmzone.h - low four bits)
      51                 :            :  *
      52                 :            :  * Do not put any conditional on these. If necessary modify the definitions
      53                 :            :  * without the underscores and use them consistently. The definitions here may
      54                 :            :  * be used in bit comparisons.
      55                 :            :  */
      56                 :            : #define __GFP_DMA       ((__force gfp_t)___GFP_DMA)
      57                 :            : #define __GFP_HIGHMEM   ((__force gfp_t)___GFP_HIGHMEM)
      58                 :            : #define __GFP_DMA32     ((__force gfp_t)___GFP_DMA32)
      59                 :            : #define __GFP_MOVABLE   ((__force gfp_t)___GFP_MOVABLE)  /* ZONE_MOVABLE allowed */
      60                 :            : #define GFP_ZONEMASK    (__GFP_DMA|__GFP_HIGHMEM|__GFP_DMA32|__GFP_MOVABLE)
      61                 :            : 
      62                 :            : /**
      63                 :            :  * DOC: Page mobility and placement hints
      64                 :            :  *
      65                 :            :  * Page mobility and placement hints
      66                 :            :  * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      67                 :            :  *
      68                 :            :  * These flags provide hints about how mobile the page is. Pages with similar
      69                 :            :  * mobility are placed within the same pageblocks to minimise problems due
      70                 :            :  * to external fragmentation.
      71                 :            :  *
      72                 :            :  * %__GFP_MOVABLE (also a zone modifier) indicates that the page can be
      73                 :            :  * moved by page migration during memory compaction or can be reclaimed.
      74                 :            :  *
      75                 :            :  * %__GFP_RECLAIMABLE is used for slab allocations that specify
      76                 :            :  * SLAB_RECLAIM_ACCOUNT and whose pages can be freed via shrinkers.
      77                 :            :  *
      78                 :            :  * %__GFP_WRITE indicates the caller intends to dirty the page. Where possible,
      79                 :            :  * these pages will be spread between local zones to avoid all the dirty
      80                 :            :  * pages being in one zone (fair zone allocation policy).
      81                 :            :  *
      82                 :            :  * %__GFP_HARDWALL enforces the cpuset memory allocation policy.
      83                 :            :  *
      84                 :            :  * %__GFP_THISNODE forces the allocation to be satisfied from the requested
      85                 :            :  * node with no fallbacks or placement policy enforcements.
      86                 :            :  *
      87                 :            :  * %__GFP_ACCOUNT causes the allocation to be accounted to kmemcg.
      88                 :            :  */
      89                 :            : #define __GFP_RECLAIMABLE ((__force gfp_t)___GFP_RECLAIMABLE)
      90                 :            : #define __GFP_WRITE     ((__force gfp_t)___GFP_WRITE)
      91                 :            : #define __GFP_HARDWALL   ((__force gfp_t)___GFP_HARDWALL)
      92                 :            : #define __GFP_THISNODE  ((__force gfp_t)___GFP_THISNODE)
      93                 :            : #define __GFP_ACCOUNT   ((__force gfp_t)___GFP_ACCOUNT)
      94                 :            : 
      95                 :            : /**
      96                 :            :  * DOC: Watermark modifiers
      97                 :            :  *
      98                 :            :  * Watermark modifiers -- controls access to emergency reserves
      99                 :            :  * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     100                 :            :  *
     101                 :            :  * %__GFP_HIGH indicates that the caller is high-priority and that granting
     102                 :            :  * the request is necessary before the system can make forward progress.
     103                 :            :  * For example, creating an IO context to clean pages.
     104                 :            :  *
     105                 :            :  * %__GFP_ATOMIC indicates that the caller cannot reclaim or sleep and is
     106                 :            :  * high priority. Users are typically interrupt handlers. This may be
     107                 :            :  * used in conjunction with %__GFP_HIGH
     108                 :            :  *
     109                 :            :  * %__GFP_MEMALLOC allows access to all memory. This should only be used when
     110                 :            :  * the caller guarantees the allocation will allow more memory to be freed
     111                 :            :  * very shortly e.g. process exiting or swapping. Users either should
     112                 :            :  * be the MM or co-ordinating closely with the VM (e.g. swap over NFS).
     113                 :            :  *
     114                 :            :  * %__GFP_NOMEMALLOC is used to explicitly forbid access to emergency reserves.
     115                 :            :  * This takes precedence over the %__GFP_MEMALLOC flag if both are set.
     116                 :            :  */
     117                 :            : #define __GFP_ATOMIC    ((__force gfp_t)___GFP_ATOMIC)
     118                 :            : #define __GFP_HIGH      ((__force gfp_t)___GFP_HIGH)
     119                 :            : #define __GFP_MEMALLOC  ((__force gfp_t)___GFP_MEMALLOC)
     120                 :            : #define __GFP_NOMEMALLOC ((__force gfp_t)___GFP_NOMEMALLOC)
     121                 :            : 
     122                 :            : /**
     123                 :            :  * DOC: Reclaim modifiers
     124                 :            :  *
     125                 :            :  * Reclaim modifiers
     126                 :            :  * ~~~~~~~~~~~~~~~~~
     127                 :            :  *
     128                 :            :  * %__GFP_IO can start physical IO.
     129                 :            :  *
     130                 :            :  * %__GFP_FS can call down to the low-level FS. Clearing the flag avoids the
     131                 :            :  * allocator recursing into the filesystem which might already be holding
     132                 :            :  * locks.
     133                 :            :  *
     134                 :            :  * %__GFP_DIRECT_RECLAIM indicates that the caller may enter direct reclaim.
     135                 :            :  * This flag can be cleared to avoid unnecessary delays when a fallback
     136                 :            :  * option is available.
     137                 :            :  *
     138                 :            :  * %__GFP_KSWAPD_RECLAIM indicates that the caller wants to wake kswapd when
     139                 :            :  * the low watermark is reached and have it reclaim pages until the high
     140                 :            :  * watermark is reached. A caller may wish to clear this flag when fallback
     141                 :            :  * options are available and the reclaim is likely to disrupt the system. The
     142                 :            :  * canonical example is THP allocation where a fallback is cheap but
     143                 :            :  * reclaim/compaction may cause indirect stalls.
     144                 :            :  *
     145                 :            :  * %__GFP_RECLAIM is shorthand to allow/forbid both direct and kswapd reclaim.
     146                 :            :  *
     147                 :            :  * The default allocator behavior depends on the request size. We have a concept
     148                 :            :  * of so called costly allocations (with order > %PAGE_ALLOC_COSTLY_ORDER).
     149                 :            :  * !costly allocations are too essential to fail so they are implicitly
     150                 :            :  * non-failing by default (with some exceptions like OOM victims might fail so
     151                 :            :  * the caller still has to check for failures) while costly requests try to be
     152                 :            :  * not disruptive and back off even without invoking the OOM killer.
     153                 :            :  * The following three modifiers might be used to override some of these
     154                 :            :  * implicit rules
     155                 :            :  *
     156                 :            :  * %__GFP_NORETRY: The VM implementation will try only very lightweight
     157                 :            :  * memory direct reclaim to get some memory under memory pressure (thus
     158                 :            :  * it can sleep). It will avoid disruptive actions like OOM killer. The
     159                 :            :  * caller must handle the failure which is quite likely to happen under
     160                 :            :  * heavy memory pressure. The flag is suitable when failure can easily be
     161                 :            :  * handled at small cost, such as reduced throughput
     162                 :            :  *
     163                 :            :  * %__GFP_RETRY_MAYFAIL: The VM implementation will retry memory reclaim
     164                 :            :  * procedures that have previously failed if there is some indication
     165                 :            :  * that progress has been made else where.  It can wait for other
     166                 :            :  * tasks to attempt high level approaches to freeing memory such as
     167                 :            :  * compaction (which removes fragmentation) and page-out.
     168                 :            :  * There is still a definite limit to the number of retries, but it is
     169                 :            :  * a larger limit than with %__GFP_NORETRY.
     170                 :            :  * Allocations with this flag may fail, but only when there is
     171                 :            :  * genuinely little unused memory. While these allocations do not
     172                 :            :  * directly trigger the OOM killer, their failure indicates that
     173                 :            :  * the system is likely to need to use the OOM killer soon.  The
     174                 :            :  * caller must handle failure, but can reasonably do so by failing
     175                 :            :  * a higher-level request, or completing it only in a much less
     176                 :            :  * efficient manner.
     177                 :            :  * If the allocation does fail, and the caller is in a position to
     178                 :            :  * free some non-essential memory, doing so could benefit the system
     179                 :            :  * as a whole.
     180                 :            :  *
     181                 :            :  * %__GFP_NOFAIL: The VM implementation _must_ retry infinitely: the caller
     182                 :            :  * cannot handle allocation failures. The allocation could block
     183                 :            :  * indefinitely but will never return with failure. Testing for
     184                 :            :  * failure is pointless.
     185                 :            :  * New users should be evaluated carefully (and the flag should be
     186                 :            :  * used only when there is no reasonable failure policy) but it is
     187                 :            :  * definitely preferable to use the flag rather than opencode endless
     188                 :            :  * loop around allocator.
     189                 :            :  * Using this flag for costly allocations is _highly_ discouraged.
     190                 :            :  */
     191                 :            : #define __GFP_IO        ((__force gfp_t)___GFP_IO)
     192                 :            : #define __GFP_FS        ((__force gfp_t)___GFP_FS)
     193                 :            : #define __GFP_DIRECT_RECLAIM    ((__force gfp_t)___GFP_DIRECT_RECLAIM) /* Caller can reclaim */
     194                 :            : #define __GFP_KSWAPD_RECLAIM    ((__force gfp_t)___GFP_KSWAPD_RECLAIM) /* kswapd can wake */
     195                 :            : #define __GFP_RECLAIM ((__force gfp_t)(___GFP_DIRECT_RECLAIM|___GFP_KSWAPD_RECLAIM))
     196                 :            : #define __GFP_RETRY_MAYFAIL     ((__force gfp_t)___GFP_RETRY_MAYFAIL)
     197                 :            : #define __GFP_NOFAIL    ((__force gfp_t)___GFP_NOFAIL)
     198                 :            : #define __GFP_NORETRY   ((__force gfp_t)___GFP_NORETRY)
     199                 :            : 
     200                 :            : /**
     201                 :            :  * DOC: Action modifiers
     202                 :            :  *
     203                 :            :  * Action modifiers
     204                 :            :  * ~~~~~~~~~~~~~~~~
     205                 :            :  *
     206                 :            :  * %__GFP_NOWARN suppresses allocation failure reports.
     207                 :            :  *
     208                 :            :  * %__GFP_COMP address compound page metadata.
     209                 :            :  *
     210                 :            :  * %__GFP_ZERO returns a zeroed page on success.
     211                 :            :  */
     212                 :            : #define __GFP_NOWARN    ((__force gfp_t)___GFP_NOWARN)
     213                 :            : #define __GFP_COMP      ((__force gfp_t)___GFP_COMP)
     214                 :            : #define __GFP_ZERO      ((__force gfp_t)___GFP_ZERO)
     215                 :            : 
     216                 :            : /* Disable lockdep for GFP context tracking */
     217                 :            : #define __GFP_NOLOCKDEP ((__force gfp_t)___GFP_NOLOCKDEP)
     218                 :            : 
     219                 :            : /* Room for N __GFP_FOO bits */
     220                 :            : #define __GFP_BITS_SHIFT (23 + IS_ENABLED(CONFIG_LOCKDEP))
     221                 :            : #define __GFP_BITS_MASK ((__force gfp_t)((1 << __GFP_BITS_SHIFT) - 1))
     222                 :            : 
     223                 :            : /**
     224                 :            :  * DOC: Useful GFP flag combinations
     225                 :            :  *
     226                 :            :  * Useful GFP flag combinations
     227                 :            :  * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     228                 :            :  *
     229                 :            :  * Useful GFP flag combinations that are commonly used. It is recommended
     230                 :            :  * that subsystems start with one of these combinations and then set/clear
     231                 :            :  * %__GFP_FOO flags as necessary.
     232                 :            :  *
     233                 :            :  * %GFP_ATOMIC users can not sleep and need the allocation to succeed. A lower
     234                 :            :  * watermark is applied to allow access to "atomic reserves"
     235                 :            :  *
     236                 :            :  * %GFP_KERNEL is typical for kernel-internal allocations. The caller requires
     237                 :            :  * %ZONE_NORMAL or a lower zone for direct access but can direct reclaim.
     238                 :            :  *
     239                 :            :  * %GFP_KERNEL_ACCOUNT is the same as GFP_KERNEL, except the allocation is
     240                 :            :  * accounted to kmemcg.
     241                 :            :  *
     242                 :            :  * %GFP_NOWAIT is for kernel allocations that should not stall for direct
     243                 :            :  * reclaim, start physical IO or use any filesystem callback.
     244                 :            :  *
     245                 :            :  * %GFP_NOIO will use direct reclaim to discard clean pages or slab pages
     246                 :            :  * that do not require the starting of any physical IO.
     247                 :            :  * Please try to avoid using this flag directly and instead use
     248                 :            :  * memalloc_noio_{save,restore} to mark the whole scope which cannot
     249                 :            :  * perform any IO with a short explanation why. All allocation requests
     250                 :            :  * will inherit GFP_NOIO implicitly.
     251                 :            :  *
     252                 :            :  * %GFP_NOFS will use direct reclaim but will not use any filesystem interfaces.
     253                 :            :  * Please try to avoid using this flag directly and instead use
     254                 :            :  * memalloc_nofs_{save,restore} to mark the whole scope which cannot/shouldn't
     255                 :            :  * recurse into the FS layer with a short explanation why. All allocation
     256                 :            :  * requests will inherit GFP_NOFS implicitly.
     257                 :            :  *
     258                 :            :  * %GFP_USER is for userspace allocations that also need to be directly
     259                 :            :  * accessibly by the kernel or hardware. It is typically used by hardware
     260                 :            :  * for buffers that are mapped to userspace (e.g. graphics) that hardware
     261                 :            :  * still must DMA to. cpuset limits are enforced for these allocations.
     262                 :            :  *
     263                 :            :  * %GFP_DMA exists for historical reasons and should be avoided where possible.
     264                 :            :  * The flags indicates that the caller requires that the lowest zone be
     265                 :            :  * used (%ZONE_DMA or 16M on x86-64). Ideally, this would be removed but
     266                 :            :  * it would require careful auditing as some users really require it and
     267                 :            :  * others use the flag to avoid lowmem reserves in %ZONE_DMA and treat the
     268                 :            :  * lowest zone as a type of emergency reserve.
     269                 :            :  *
     270                 :            :  * %GFP_DMA32 is similar to %GFP_DMA except that the caller requires a 32-bit
     271                 :            :  * address.
     272                 :            :  *
     273                 :            :  * %GFP_HIGHUSER is for userspace allocations that may be mapped to userspace,
     274                 :            :  * do not need to be directly accessible by the kernel but that cannot
     275                 :            :  * move once in use. An example may be a hardware allocation that maps
     276                 :            :  * data directly into userspace but has no addressing limitations.
     277                 :            :  *
     278                 :            :  * %GFP_HIGHUSER_MOVABLE is for userspace allocations that the kernel does not
     279                 :            :  * need direct access to but can use kmap() when access is required. They
     280                 :            :  * are expected to be movable via page reclaim or page migration. Typically,
     281                 :            :  * pages on the LRU would also be allocated with %GFP_HIGHUSER_MOVABLE.
     282                 :            :  *
     283                 :            :  * %GFP_TRANSHUGE and %GFP_TRANSHUGE_LIGHT are used for THP allocations. They
     284                 :            :  * are compound allocations that will generally fail quickly if memory is not
     285                 :            :  * available and will not wake kswapd/kcompactd on failure. The _LIGHT
     286                 :            :  * version does not attempt reclaim/compaction at all and is by default used
     287                 :            :  * in page fault path, while the non-light is used by khugepaged.
     288                 :            :  */
     289                 :            : #define GFP_ATOMIC      (__GFP_HIGH|__GFP_ATOMIC|__GFP_KSWAPD_RECLAIM)
     290                 :            : #define GFP_KERNEL      (__GFP_RECLAIM | __GFP_IO | __GFP_FS)
     291                 :            : #define GFP_KERNEL_ACCOUNT (GFP_KERNEL | __GFP_ACCOUNT)
     292                 :            : #define GFP_NOWAIT      (__GFP_KSWAPD_RECLAIM)
     293                 :            : #define GFP_NOIO        (__GFP_RECLAIM)
     294                 :            : #define GFP_NOFS        (__GFP_RECLAIM | __GFP_IO)
     295                 :            : #define GFP_USER        (__GFP_RECLAIM | __GFP_IO | __GFP_FS | __GFP_HARDWALL)
     296                 :            : #define GFP_DMA         __GFP_DMA
     297                 :            : #define GFP_DMA32       __GFP_DMA32
     298                 :            : #define GFP_HIGHUSER    (GFP_USER | __GFP_HIGHMEM)
     299                 :            : #define GFP_HIGHUSER_MOVABLE    (GFP_HIGHUSER | __GFP_MOVABLE)
     300                 :            : #define GFP_TRANSHUGE_LIGHT     ((GFP_HIGHUSER_MOVABLE | __GFP_COMP | \
     301                 :            :                          __GFP_NOMEMALLOC | __GFP_NOWARN) & ~__GFP_RECLAIM)
     302                 :            : #define GFP_TRANSHUGE   (GFP_TRANSHUGE_LIGHT | __GFP_DIRECT_RECLAIM)
     303                 :            : 
     304                 :            : /* Convert GFP flags to their corresponding migrate type */
     305                 :            : #define GFP_MOVABLE_MASK (__GFP_RECLAIMABLE|__GFP_MOVABLE)
     306                 :            : #define GFP_MOVABLE_SHIFT 3
     307                 :            : 
     308                 :    2627459 : static inline int gfpflags_to_migratetype(const gfp_t gfp_flags)
     309                 :            : {
     310                 :    2627459 :         VM_WARN_ON((gfp_flags & GFP_MOVABLE_MASK) == GFP_MOVABLE_MASK);
     311                 :    2627459 :         BUILD_BUG_ON((1UL << GFP_MOVABLE_SHIFT) != ___GFP_MOVABLE);
     312                 :    2627459 :         BUILD_BUG_ON((___GFP_MOVABLE >> GFP_MOVABLE_SHIFT) != MIGRATE_MOVABLE);
     313                 :            : 
     314         [ +  - ]:    2627459 :         if (unlikely(page_group_by_mobility_disabled))
     315                 :            :                 return MIGRATE_UNMOVABLE;
     316                 :            : 
     317                 :            :         /* Group based on mobility */
     318                 :    2627459 :         return (gfp_flags & GFP_MOVABLE_MASK) >> GFP_MOVABLE_SHIFT;
     319                 :            : }
     320                 :            : #undef GFP_MOVABLE_MASK
     321                 :            : #undef GFP_MOVABLE_SHIFT
     322                 :            : 
     323                 :   35689327 : static inline bool gfpflags_allow_blocking(const gfp_t gfp_flags)
     324                 :            : {
     325   [ +  +  +  +  :   35689327 :         return !!(gfp_flags & __GFP_DIRECT_RECLAIM);
          +  +  #  #  #  
                      # ]
     326                 :            : }
     327                 :            : 
     328                 :            : /**
     329                 :            :  * gfpflags_normal_context - is gfp_flags a normal sleepable context?
     330                 :            :  * @gfp_flags: gfp_flags to test
     331                 :            :  *
     332                 :            :  * Test whether @gfp_flags indicates that the allocation is from the
     333                 :            :  * %current context and allowed to sleep.
     334                 :            :  *
     335                 :            :  * An allocation being allowed to block doesn't mean it owns the %current
     336                 :            :  * context.  When direct reclaim path tries to allocate memory, the
     337                 :            :  * allocation context is nested inside whatever %current was doing at the
     338                 :            :  * time of the original allocation.  The nested allocation may be allowed
     339                 :            :  * to block but modifying anything %current owns can corrupt the outer
     340                 :            :  * context's expectations.
     341                 :            :  *
     342                 :            :  * %true result from this function indicates that the allocation context
     343                 :            :  * can sleep and use anything that's associated with %current.
     344                 :            :  */
     345                 :          0 : static inline bool gfpflags_normal_context(const gfp_t gfp_flags)
     346                 :            : {
     347         [ #  # ]:          0 :         return (gfp_flags & (__GFP_DIRECT_RECLAIM | __GFP_MEMALLOC)) ==
     348                 :            :                 __GFP_DIRECT_RECLAIM;
     349                 :            : }
     350                 :            : 
     351                 :            : #ifdef CONFIG_HIGHMEM
     352                 :            : #define OPT_ZONE_HIGHMEM ZONE_HIGHMEM
     353                 :            : #else
     354                 :            : #define OPT_ZONE_HIGHMEM ZONE_NORMAL
     355                 :            : #endif
     356                 :            : 
     357                 :            : #ifdef CONFIG_ZONE_DMA
     358                 :            : #define OPT_ZONE_DMA ZONE_DMA
     359                 :            : #else
     360                 :            : #define OPT_ZONE_DMA ZONE_NORMAL
     361                 :            : #endif
     362                 :            : 
     363                 :            : #ifdef CONFIG_ZONE_DMA32
     364                 :            : #define OPT_ZONE_DMA32 ZONE_DMA32
     365                 :            : #else
     366                 :            : #define OPT_ZONE_DMA32 ZONE_NORMAL
     367                 :            : #endif
     368                 :            : 
     369                 :            : /*
     370                 :            :  * GFP_ZONE_TABLE is a word size bitstring that is used for looking up the
     371                 :            :  * zone to use given the lowest 4 bits of gfp_t. Entries are GFP_ZONES_SHIFT
     372                 :            :  * bits long and there are 16 of them to cover all possible combinations of
     373                 :            :  * __GFP_DMA, __GFP_DMA32, __GFP_MOVABLE and __GFP_HIGHMEM.
     374                 :            :  *
     375                 :            :  * The zone fallback order is MOVABLE=>HIGHMEM=>NORMAL=>DMA32=>DMA.
     376                 :            :  * But GFP_MOVABLE is not only a zone specifier but also an allocation
     377                 :            :  * policy. Therefore __GFP_MOVABLE plus another zone selector is valid.
     378                 :            :  * Only 1 bit of the lowest 3 bits (DMA,DMA32,HIGHMEM) can be set to "1".
     379                 :            :  *
     380                 :            :  *       bit       result
     381                 :            :  *       =================
     382                 :            :  *       0x0    => NORMAL
     383                 :            :  *       0x1    => DMA or NORMAL
     384                 :            :  *       0x2    => HIGHMEM or NORMAL
     385                 :            :  *       0x3    => BAD (DMA+HIGHMEM)
     386                 :            :  *       0x4    => DMA32 or NORMAL
     387                 :            :  *       0x5    => BAD (DMA+DMA32)
     388                 :            :  *       0x6    => BAD (HIGHMEM+DMA32)
     389                 :            :  *       0x7    => BAD (HIGHMEM+DMA32+DMA)
     390                 :            :  *       0x8    => NORMAL (MOVABLE+0)
     391                 :            :  *       0x9    => DMA or NORMAL (MOVABLE+DMA)
     392                 :            :  *       0xa    => MOVABLE (Movable is valid only if HIGHMEM is set too)
     393                 :            :  *       0xb    => BAD (MOVABLE+HIGHMEM+DMA)
     394                 :            :  *       0xc    => DMA32 or NORMAL (MOVABLE+DMA32)
     395                 :            :  *       0xd    => BAD (MOVABLE+DMA32+DMA)
     396                 :            :  *       0xe    => BAD (MOVABLE+DMA32+HIGHMEM)
     397                 :            :  *       0xf    => BAD (MOVABLE+DMA32+HIGHMEM+DMA)
     398                 :            :  *
     399                 :            :  * GFP_ZONES_SHIFT must be <= 2 on 32 bit platforms.
     400                 :            :  */
     401                 :            : 
     402                 :            : #if defined(CONFIG_ZONE_DEVICE) && (MAX_NR_ZONES-1) <= 4
     403                 :            : /* ZONE_DEVICE is not a valid GFP zone specifier */
     404                 :            : #define GFP_ZONES_SHIFT 2
     405                 :            : #else
     406                 :            : #define GFP_ZONES_SHIFT ZONES_SHIFT
     407                 :            : #endif
     408                 :            : 
     409                 :            : #if 16 * GFP_ZONES_SHIFT > BITS_PER_LONG
     410                 :            : #error GFP_ZONES_SHIFT too large to create GFP_ZONE_TABLE integer
     411                 :            : #endif
     412                 :            : 
     413                 :            : #define GFP_ZONE_TABLE ( \
     414                 :            :         (ZONE_NORMAL << 0 * GFP_ZONES_SHIFT)                                     \
     415                 :            :         | (OPT_ZONE_DMA << ___GFP_DMA * GFP_ZONES_SHIFT)                 \
     416                 :            :         | (OPT_ZONE_HIGHMEM << ___GFP_HIGHMEM * GFP_ZONES_SHIFT)         \
     417                 :            :         | (OPT_ZONE_DMA32 << ___GFP_DMA32 * GFP_ZONES_SHIFT)                     \
     418                 :            :         | (ZONE_NORMAL << ___GFP_MOVABLE * GFP_ZONES_SHIFT)                      \
     419                 :            :         | (OPT_ZONE_DMA << (___GFP_MOVABLE | ___GFP_DMA) * GFP_ZONES_SHIFT)    \
     420                 :            :         | (ZONE_MOVABLE << (___GFP_MOVABLE | ___GFP_HIGHMEM) * GFP_ZONES_SHIFT)\
     421                 :            :         | (OPT_ZONE_DMA32 << (___GFP_MOVABLE | ___GFP_DMA32) * GFP_ZONES_SHIFT)\
     422                 :            : )
     423                 :            : 
     424                 :            : /*
     425                 :            :  * GFP_ZONE_BAD is a bitmap for all combinations of __GFP_DMA, __GFP_DMA32
     426                 :            :  * __GFP_HIGHMEM and __GFP_MOVABLE that are not permitted. One flag per
     427                 :            :  * entry starting with bit 0. Bit is set if the combination is not
     428                 :            :  * allowed.
     429                 :            :  */
     430                 :            : #define GFP_ZONE_BAD ( \
     431                 :            :         1 << (___GFP_DMA | ___GFP_HIGHMEM)                                      \
     432                 :            :         | 1 << (___GFP_DMA | ___GFP_DMA32)                                      \
     433                 :            :         | 1 << (___GFP_DMA32 | ___GFP_HIGHMEM)                                  \
     434                 :            :         | 1 << (___GFP_DMA | ___GFP_DMA32 | ___GFP_HIGHMEM)                     \
     435                 :            :         | 1 << (___GFP_MOVABLE | ___GFP_HIGHMEM | ___GFP_DMA)                   \
     436                 :            :         | 1 << (___GFP_MOVABLE | ___GFP_DMA32 | ___GFP_DMA)                     \
     437                 :            :         | 1 << (___GFP_MOVABLE | ___GFP_DMA32 | ___GFP_HIGHMEM)                 \
     438                 :            :         | 1 << (___GFP_MOVABLE | ___GFP_DMA32 | ___GFP_DMA | ___GFP_HIGHMEM)  \
     439                 :            : )
     440                 :            : 
     441                 :    3106940 : static inline enum zone_type gfp_zone(gfp_t flags)
     442                 :            : {
     443                 :    3106940 :         enum zone_type z;
     444                 :    3106940 :         int bit = (__force int) (flags & GFP_ZONEMASK);
     445                 :            : 
     446                 :    3106940 :         z = (GFP_ZONE_TABLE >> (bit * GFP_ZONES_SHIFT)) &
     447                 :            :                                          ((1 << GFP_ZONES_SHIFT) - 1);
     448                 :    3106940 :         VM_BUG_ON((GFP_ZONE_BAD >> bit) & 1);
     449   [ +  +  #  #  :    3106940 :         return z;
             #  #  #  # ]
     450                 :            : }
     451                 :            : 
     452                 :            : /*
     453                 :            :  * There is only one page-allocator function, and two main namespaces to
     454                 :            :  * it. The alloc_page*() variants return 'struct page *' and as such
     455                 :            :  * can allocate highmem pages, the *get*page*() variants return
     456                 :            :  * virtual kernel addresses to the allocated page(s).
     457                 :            :  */
     458                 :            : 
     459                 :    3096172 : static inline int gfp_zonelist(gfp_t flags)
     460                 :            : {
     461                 :            : #ifdef CONFIG_NUMA
     462                 :    3096172 :         if (unlikely(flags & __GFP_THISNODE))
     463                 :          0 :                 return ZONELIST_NOFALLBACK;
     464                 :            : #endif
     465                 :            :         return ZONELIST_FALLBACK;
     466                 :            : }
     467                 :            : 
     468                 :            : /*
     469                 :            :  * We get the zone list from the current node and the gfp_mask.
     470                 :            :  * This zone list contains a maximum of MAXNODES*MAX_NR_ZONES zones.
     471                 :            :  * There are two zonelists per node, one for all zones with memory and
     472                 :            :  * one containing just zones from the node the zonelist belongs to.
     473                 :            :  *
     474                 :            :  * For the normal case of non-DISCONTIGMEM systems the NODE_DATA() gets
     475                 :            :  * optimized to &contig_page_data at compile-time.
     476                 :            :  */
     477                 :    3096172 : static inline struct zonelist *node_zonelist(int nid, gfp_t flags)
     478                 :            : {
     479   [ -  +  +  +  :    3096172 :         return NODE_DATA(nid)->node_zonelists + gfp_zonelist(flags);
                   +  - ]
     480                 :            : }
     481                 :            : 
     482                 :            : #ifndef HAVE_ARCH_FREE_PAGE
     483                 :            : static inline void arch_free_page(struct page *page, int order) { }
     484                 :            : #endif
     485                 :            : #ifndef HAVE_ARCH_ALLOC_PAGE
     486                 :    2628351 : static inline void arch_alloc_page(struct page *page, int order) { }
     487                 :            : #endif
     488                 :            : 
     489                 :            : struct page *
     490                 :            : __alloc_pages_nodemask(gfp_t gfp_mask, unsigned int order, int preferred_nid,
     491                 :            :                                                         nodemask_t *nodemask);
     492                 :            : 
     493                 :            : static inline struct page *
     494                 :     154178 : __alloc_pages(gfp_t gfp_mask, unsigned int order, int preferred_nid)
     495                 :            : {
     496                 :     154178 :         return __alloc_pages_nodemask(gfp_mask, order, preferred_nid, NULL);
     497                 :            : }
     498                 :            : 
     499                 :            : /*
     500                 :            :  * Allocate pages, preferring the node given as nid. The node must be valid and
     501                 :            :  * online. For more general interface, see alloc_pages_node().
     502                 :            :  */
     503                 :            : static inline struct page *
     504                 :      22950 : __alloc_pages_node(int nid, gfp_t gfp_mask, unsigned int order)
     505                 :            : {
     506                 :      22950 :         VM_BUG_ON(nid < 0 || nid >= MAX_NUMNODES);
     507                 :      22950 :         VM_WARN_ON((gfp_mask & __GFP_THISNODE) && !node_online(nid));
     508                 :            : 
     509                 :      22866 :         return __alloc_pages(gfp_mask, order, nid);
     510                 :            : }
     511                 :            : 
     512                 :            : /*
     513                 :            :  * Allocate pages, preferring the node given as nid. When nid == NUMA_NO_NODE,
     514                 :            :  * prefer the current CPU's closest node. Otherwise node must be valid and
     515                 :            :  * online.
     516                 :            :  */
     517                 :      22281 : static inline struct page *alloc_pages_node(int nid, gfp_t gfp_mask,
     518                 :            :                                                 unsigned int order)
     519                 :            : {
     520   [ +  +  -  +  :      22281 :         if (nid == NUMA_NO_NODE)
                   -  + ]
     521                 :      21294 :                 nid = numa_mem_id();
     522                 :            : 
     523                 :      22281 :         return __alloc_pages_node(nid, gfp_mask, order);
     524                 :            : }
     525                 :            : 
     526                 :            : #ifdef CONFIG_NUMA
     527                 :            : extern struct page *alloc_pages_current(gfp_t gfp_mask, unsigned order);
     528                 :            : 
     529                 :            : static inline struct page *
     530                 :    1299186 : alloc_pages(gfp_t gfp_mask, unsigned int order)
     531                 :            : {
     532                 :    1299186 :         return alloc_pages_current(gfp_mask, order);
     533                 :            : }
     534                 :            : extern struct page *alloc_pages_vma(gfp_t gfp_mask, int order,
     535                 :            :                         struct vm_area_struct *vma, unsigned long addr,
     536                 :            :                         int node, bool hugepage);
     537                 :            : #define alloc_hugepage_vma(gfp_mask, vma, addr, order) \
     538                 :            :         alloc_pages_vma(gfp_mask, order, vma, addr, numa_node_id(), true)
     539                 :            : #else
     540                 :            : #define alloc_pages(gfp_mask, order) \
     541                 :            :                 alloc_pages_node(numa_node_id(), gfp_mask, order)
     542                 :            : #define alloc_pages_vma(gfp_mask, order, vma, addr, node, false)\
     543                 :            :         alloc_pages(gfp_mask, order)
     544                 :            : #define alloc_hugepage_vma(gfp_mask, vma, addr, order) \
     545                 :            :         alloc_pages(gfp_mask, order)
     546                 :            : #endif
     547                 :            : #define alloc_page(gfp_mask) alloc_pages(gfp_mask, 0)
     548                 :            : #define alloc_page_vma(gfp_mask, vma, addr)                     \
     549                 :            :         alloc_pages_vma(gfp_mask, 0, vma, addr, numa_node_id(), false)
     550                 :            : #define alloc_page_vma_node(gfp_mask, vma, addr, node)          \
     551                 :            :         alloc_pages_vma(gfp_mask, 0, vma, addr, node, false)
     552                 :            : 
     553                 :            : extern unsigned long __get_free_pages(gfp_t gfp_mask, unsigned int order);
     554                 :            : extern unsigned long get_zeroed_page(gfp_t gfp_mask);
     555                 :            : 
     556                 :            : void *alloc_pages_exact(size_t size, gfp_t gfp_mask);
     557                 :            : void free_pages_exact(void *virt, size_t size);
     558                 :            : void * __meminit alloc_pages_exact_nid(int nid, size_t size, gfp_t gfp_mask);
     559                 :            : 
     560                 :            : #define __get_free_page(gfp_mask) \
     561                 :            :                 __get_free_pages((gfp_mask), 0)
     562                 :            : 
     563                 :            : #define __get_dma_pages(gfp_mask, order) \
     564                 :            :                 __get_free_pages((gfp_mask) | GFP_DMA, (order))
     565                 :            : 
     566                 :            : extern void __free_pages(struct page *page, unsigned int order);
     567                 :            : extern void free_pages(unsigned long addr, unsigned int order);
     568                 :            : extern void free_unref_page(struct page *page);
     569                 :            : extern void free_unref_page_list(struct list_head *list);
     570                 :            : 
     571                 :            : struct page_frag_cache;
     572                 :            : extern void __page_frag_cache_drain(struct page *page, unsigned int count);
     573                 :            : extern void *page_frag_alloc(struct page_frag_cache *nc,
     574                 :            :                              unsigned int fragsz, gfp_t gfp_mask);
     575                 :            : extern void page_frag_free(void *addr);
     576                 :            : 
     577                 :            : #define __free_page(page) __free_pages((page), 0)
     578                 :            : #define free_page(addr) free_pages((addr), 0)
     579                 :            : 
     580                 :            : void page_alloc_init(void);
     581                 :            : void drain_zone_pages(struct zone *zone, struct per_cpu_pages *pcp);
     582                 :            : void drain_all_pages(struct zone *zone);
     583                 :            : void drain_local_pages(struct zone *zone);
     584                 :            : 
     585                 :            : void page_alloc_init_late(void);
     586                 :            : 
     587                 :            : /*
     588                 :            :  * gfp_allowed_mask is set to GFP_BOOT_MASK during early boot to restrict what
     589                 :            :  * GFP flags are used before interrupts are enabled. Once interrupts are
     590                 :            :  * enabled, it is set to __GFP_BITS_MASK while the system is running. During
     591                 :            :  * hibernation, it is used by PM to avoid I/O during memory allocation while
     592                 :            :  * devices are suspended.
     593                 :            :  */
     594                 :            : extern gfp_t gfp_allowed_mask;
     595                 :            : 
     596                 :            : /* Returns true if the gfp_mask allows use of ALLOC_NO_WATERMARK */
     597                 :            : bool gfp_pfmemalloc_allowed(gfp_t gfp_mask);
     598                 :            : 
     599                 :            : extern void pm_restrict_gfp_mask(void);
     600                 :            : extern void pm_restore_gfp_mask(void);
     601                 :            : 
     602                 :            : #ifdef CONFIG_PM_SLEEP
     603                 :            : extern bool pm_suspended_storage(void);
     604                 :            : #else
     605                 :            : static inline bool pm_suspended_storage(void)
     606                 :            : {
     607                 :            :         return false;
     608                 :            : }
     609                 :            : #endif /* CONFIG_PM_SLEEP */
     610                 :            : 
     611                 :            : #ifdef CONFIG_CONTIG_ALLOC
     612                 :            : /* The below functions must be run on a range from a single zone. */
     613                 :            : extern int alloc_contig_range(unsigned long start, unsigned long end,
     614                 :            :                               unsigned migratetype, gfp_t gfp_mask);
     615                 :            : extern struct page *alloc_contig_pages(unsigned long nr_pages, gfp_t gfp_mask,
     616                 :            :                                        int nid, nodemask_t *nodemask);
     617                 :            : #endif
     618                 :            : void free_contig_range(unsigned long pfn, unsigned int nr_pages);
     619                 :            : 
     620                 :            : #ifdef CONFIG_CMA
     621                 :            : /* CMA stuff */
     622                 :            : extern void init_cma_reserved_pageblock(struct page *page);
     623                 :            : #endif
     624                 :            : 
     625                 :            : #endif /* __LINUX_GFP_H */

Generated by: LCOV version 1.14