130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/*
230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * NUMA memory policies for Linux.
330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Copyright 2003,2004 Andi Kleen SuSE Labs
430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */
530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#ifndef _UAPI_LINUX_MEMPOLICY_H
630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define _UAPI_LINUX_MEMPOLICY_H
730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#include <linux/errno.h>
930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
1030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
1130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/*
1230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Both the MPOL_* mempolicy mode and the MPOL_F_* optional mode flags are
1330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * passed by the user to either set_mempolicy() or mbind() in an 'int' actual.
1430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * The MPOL_MODE_FLAGS macro determines the legal set of optional mode flags.
1530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */
1630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
1730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* Policies */
1830692c65c4174412c90e79489e98ab85c1a7412fBen Chengenum {
1930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	MPOL_DEFAULT,
2030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	MPOL_PREFERRED,
2130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	MPOL_BIND,
2230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	MPOL_INTERLEAVE,
2330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	MPOL_LOCAL,
2430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	MPOL_MAX,	/* always last member of enum */
2530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
2630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
2730692c65c4174412c90e79489e98ab85c1a7412fBen Chengenum mpol_rebind_step {
2830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	MPOL_REBIND_ONCE,	/* do rebind work at once(not by two step) */
2930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	MPOL_REBIND_STEP1,	/* first step(set all the newly nodes) */
3030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	MPOL_REBIND_STEP2,	/* second step(clean all the disallowed nodes)*/
3130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	MPOL_REBIND_NSTEP,
3230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
3330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
3430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* Flags for set_mempolicy */
3530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define MPOL_F_STATIC_NODES	(1 << 15)
3630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define MPOL_F_RELATIVE_NODES	(1 << 14)
3730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
3830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/*
3930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * MPOL_MODE_FLAGS is the union of all possible optional mode flags passed to
4030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * either set_mempolicy() or mbind().
4130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */
4230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define MPOL_MODE_FLAGS	(MPOL_F_STATIC_NODES | MPOL_F_RELATIVE_NODES)
4330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
4430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* Flags for get_mempolicy */
4530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define MPOL_F_NODE	(1<<0)	/* return next IL mode instead of node mask */
4630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define MPOL_F_ADDR	(1<<1)	/* look up vma using address */
4730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define MPOL_F_MEMS_ALLOWED (1<<2) /* return allowed memories */
4830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
4930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* Flags for mbind */
5030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define MPOL_MF_STRICT	(1<<0)	/* Verify existing pages in the mapping */
5130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define MPOL_MF_MOVE	 (1<<1)	/* Move pages owned by this process to conform
5230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng				   to policy */
5330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define MPOL_MF_MOVE_ALL (1<<2)	/* Move every page to conform to policy */
5430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define MPOL_MF_LAZY	 (1<<3)	/* Modifies '_MOVE:  lazy migrate on fault */
5530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define MPOL_MF_INTERNAL (1<<4)	/* Internal flags start here */
5630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
5730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define MPOL_MF_VALID	(MPOL_MF_STRICT   | 	\
5830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng			 MPOL_MF_MOVE     | 	\
5930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng			 MPOL_MF_MOVE_ALL)
6030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
6130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/*
6230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Internal flags that share the struct mempolicy flags word with
6330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * "mode flags".  These flags are allocated from bit 0 up, as they
6430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * are never OR'ed into the mode in mempolicy API arguments.
6530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */
6630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define MPOL_F_SHARED  (1 << 0)	/* identify shared policies */
6730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define MPOL_F_LOCAL   (1 << 1)	/* preferred local allocation */
6830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define MPOL_F_REBINDING (1 << 2)	/* identify policies in rebinding */
6930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define MPOL_F_MOF	(1 << 3) /* this policy wants migrate on fault */
7012e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris#define MPOL_F_MORON	(1 << 4) /* Migrate On protnone Reference On Node */
7130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
7230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
7330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#endif /* _UAPI_LINUX_MEMPOLICY_H */
74