Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
0002 /*
0003  * NUMA memory policies for Linux.
0004  * Copyright 2003,2004 Andi Kleen SuSE Labs
0005  */
0006 #ifndef _UAPI_LINUX_MEMPOLICY_H
0007 #define _UAPI_LINUX_MEMPOLICY_H
0008 
0009 #include <linux/errno.h>
0010 
0011 
0012 /*
0013  * Both the MPOL_* mempolicy mode and the MPOL_F_* optional mode flags are
0014  * passed by the user to either set_mempolicy() or mbind() in an 'int' actual.
0015  * The MPOL_MODE_FLAGS macro determines the legal set of optional mode flags.
0016  */
0017 
0018 /* Policies */
0019 enum {
0020     MPOL_DEFAULT,
0021     MPOL_PREFERRED,
0022     MPOL_BIND,
0023     MPOL_INTERLEAVE,
0024     MPOL_LOCAL,
0025     MPOL_PREFERRED_MANY,
0026     MPOL_MAX,   /* always last member of enum */
0027 };
0028 
0029 /* Flags for set_mempolicy */
0030 #define MPOL_F_STATIC_NODES (1 << 15)
0031 #define MPOL_F_RELATIVE_NODES   (1 << 14)
0032 #define MPOL_F_NUMA_BALANCING   (1 << 13) /* Optimize with NUMA balancing if possible */
0033 
0034 /*
0035  * MPOL_MODE_FLAGS is the union of all possible optional mode flags passed to
0036  * either set_mempolicy() or mbind().
0037  */
0038 #define MPOL_MODE_FLAGS                         \
0039     (MPOL_F_STATIC_NODES | MPOL_F_RELATIVE_NODES | MPOL_F_NUMA_BALANCING)
0040 
0041 /* Flags for get_mempolicy */
0042 #define MPOL_F_NODE (1<<0)  /* return next IL mode instead of node mask */
0043 #define MPOL_F_ADDR (1<<1)  /* look up vma using address */
0044 #define MPOL_F_MEMS_ALLOWED (1<<2) /* return allowed memories */
0045 
0046 /* Flags for mbind */
0047 #define MPOL_MF_STRICT  (1<<0)  /* Verify existing pages in the mapping */
0048 #define MPOL_MF_MOVE     (1<<1) /* Move pages owned by this process to conform
0049                    to policy */
0050 #define MPOL_MF_MOVE_ALL (1<<2) /* Move every page to conform to policy */
0051 #define MPOL_MF_LAZY     (1<<3) /* Modifies '_MOVE:  lazy migrate on fault */
0052 #define MPOL_MF_INTERNAL (1<<4) /* Internal flags start here */
0053 
0054 #define MPOL_MF_VALID   (MPOL_MF_STRICT   |     \
0055              MPOL_MF_MOVE     |     \
0056              MPOL_MF_MOVE_ALL)
0057 
0058 /*
0059  * Internal flags that share the struct mempolicy flags word with
0060  * "mode flags".  These flags are allocated from bit 0 up, as they
0061  * are never OR'ed into the mode in mempolicy API arguments.
0062  */
0063 #define MPOL_F_SHARED  (1 << 0) /* identify shared policies */
0064 #define MPOL_F_MOF  (1 << 3) /* this policy wants migrate on fault */
0065 #define MPOL_F_MORON    (1 << 4) /* Migrate On protnone Reference On Node */
0066 
0067 /*
0068  * These bit locations are exposed in the vm.zone_reclaim_mode sysctl
0069  * ABI.  New bits are OK, but existing bits can never change.
0070  */
0071 #define RECLAIM_ZONE    (1<<0)  /* Run shrink_inactive_list on the zone */
0072 #define RECLAIM_WRITE   (1<<1)  /* Writeout pages during reclaim */
0073 #define RECLAIM_UNMAP   (1<<2)  /* Unmap pages during reclaim */
0074 
0075 #endif /* _UAPI_LINUX_MEMPOLICY_H */