| 1 | /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ | 
|---|
| 2 | /* | 
|---|
| 3 | * NUMA memory policies for Linux. | 
|---|
| 4 | * Copyright 2003,2004 Andi Kleen SuSE Labs | 
|---|
| 5 | */ | 
|---|
| 6 | #ifndef _UAPI_LINUX_MEMPOLICY_H | 
|---|
| 7 | #define _UAPI_LINUX_MEMPOLICY_H | 
|---|
| 8 |  | 
|---|
| 9 | #include <linux/errno.h> | 
|---|
| 10 |  | 
|---|
| 11 |  | 
|---|
| 12 | /* | 
|---|
| 13 | * Both the MPOL_* mempolicy mode and the MPOL_F_* optional mode flags are | 
|---|
| 14 | * passed by the user to either set_mempolicy() or mbind() in an 'int' actual. | 
|---|
| 15 | * The MPOL_MODE_FLAGS macro determines the legal set of optional mode flags. | 
|---|
| 16 | */ | 
|---|
| 17 |  | 
|---|
| 18 | /* Policies */ | 
|---|
| 19 | enum { | 
|---|
| 20 | MPOL_DEFAULT, | 
|---|
| 21 | MPOL_PREFERRED, | 
|---|
| 22 | MPOL_BIND, | 
|---|
| 23 | MPOL_INTERLEAVE, | 
|---|
| 24 | MPOL_LOCAL, | 
|---|
| 25 | MPOL_PREFERRED_MANY, | 
|---|
| 26 | MPOL_WEIGHTED_INTERLEAVE, | 
|---|
| 27 | MPOL_MAX,	/* always last member of enum */ | 
|---|
| 28 | }; | 
|---|
| 29 |  | 
|---|
| 30 | /* Flags for set_mempolicy */ | 
|---|
| 31 | #define MPOL_F_STATIC_NODES	(1 << 15) | 
|---|
| 32 | #define MPOL_F_RELATIVE_NODES	(1 << 14) | 
|---|
| 33 | #define MPOL_F_NUMA_BALANCING	(1 << 13) /* Optimize with NUMA balancing if possible */ | 
|---|
| 34 |  | 
|---|
| 35 | /* | 
|---|
| 36 | * MPOL_MODE_FLAGS is the union of all possible optional mode flags passed to | 
|---|
| 37 | * either set_mempolicy() or mbind(). | 
|---|
| 38 | */ | 
|---|
| 39 | #define MPOL_MODE_FLAGS							\ | 
|---|
| 40 | (MPOL_F_STATIC_NODES | MPOL_F_RELATIVE_NODES | MPOL_F_NUMA_BALANCING) | 
|---|
| 41 |  | 
|---|
| 42 | /* Flags for get_mempolicy */ | 
|---|
| 43 | #define MPOL_F_NODE	(1<<0)	/* return next IL mode instead of node mask */ | 
|---|
| 44 | #define MPOL_F_ADDR	(1<<1)	/* look up vma using address */ | 
|---|
| 45 | #define MPOL_F_MEMS_ALLOWED (1<<2) /* return allowed memories */ | 
|---|
| 46 |  | 
|---|
| 47 | /* Flags for mbind */ | 
|---|
| 48 | #define MPOL_MF_STRICT	(1<<0)	/* Verify existing pages in the mapping */ | 
|---|
| 49 | #define MPOL_MF_MOVE	 (1<<1)	/* Move pages owned by this process to conform | 
|---|
| 50 | to policy */ | 
|---|
| 51 | #define MPOL_MF_MOVE_ALL (1<<2)	/* Move every page to conform to policy */ | 
|---|
| 52 | #define MPOL_MF_LAZY	 (1<<3)	/* UNSUPPORTED FLAG: Lazy migrate on fault */ | 
|---|
| 53 | #define MPOL_MF_INTERNAL (1<<4)	/* Internal flags start here */ | 
|---|
| 54 |  | 
|---|
| 55 | #define MPOL_MF_VALID	(MPOL_MF_STRICT   | 	\ | 
|---|
| 56 | MPOL_MF_MOVE     | 	\ | 
|---|
| 57 | MPOL_MF_MOVE_ALL) | 
|---|
| 58 |  | 
|---|
| 59 | /* | 
|---|
| 60 | * Internal flags that share the struct mempolicy flags word with | 
|---|
| 61 | * "mode flags".  These flags are allocated from bit 0 up, as they | 
|---|
| 62 | * are never OR'ed into the mode in mempolicy API arguments. | 
|---|
| 63 | */ | 
|---|
| 64 | #define MPOL_F_SHARED  (1 << 0)	/* identify shared policies */ | 
|---|
| 65 | #define MPOL_F_MOF	(1 << 3) /* this policy wants migrate on fault */ | 
|---|
| 66 | #define MPOL_F_MORON	(1 << 4) /* Migrate On protnone Reference On Node */ | 
|---|
| 67 |  | 
|---|
| 68 | /* | 
|---|
| 69 | * Enabling zone reclaim means the page allocator will attempt to fulfill | 
|---|
| 70 | * the allocation request on the current node by triggering reclaim and | 
|---|
| 71 | * trying to shrink the current node. | 
|---|
| 72 | * Fallback allocations on the next candidates in the zonelist are considered | 
|---|
| 73 | * when reclaim fails to free up enough memory in the current node/zone. | 
|---|
| 74 | * | 
|---|
| 75 | * These bit locations are exposed in the vm.zone_reclaim_mode sysctl. | 
|---|
| 76 | * New bits are OK, but existing bits should not be changed. | 
|---|
| 77 | */ | 
|---|
| 78 | #define RECLAIM_ZONE	(1<<0)	/* Enable zone reclaim */ | 
|---|
| 79 | #define RECLAIM_WRITE	(1<<1)	/* Writeout pages during reclaim */ | 
|---|
| 80 | #define RECLAIM_UNMAP	(1<<2)	/* Unmap pages during reclaim */ | 
|---|
| 81 |  | 
|---|
| 82 | #endif /* _UAPI_LINUX_MEMPOLICY_H */ | 
|---|
| 83 |  | 
|---|