1 /* SPDX-License-Identifier: GPL-2.0-only */
2 /*
3  * tools/testing/selftests/kvm/include/numaif.h
4  *
5  * Copyright (C) 2020, Google LLC.
6  *
7  * This work is licensed under the terms of the GNU GPL, version 2.
8  *
9  * Header file that provides access to NUMA API functions not explicitly
10  * exported to user space.
11  */
12 
13 #ifndef SELFTEST_KVM_NUMAIF_H
14 #define SELFTEST_KVM_NUMAIF_H
15 
16 #define __NR_get_mempolicy 239
17 #define __NR_migrate_pages 256
18 
19 /* System calls */
get_mempolicy(int * policy,const unsigned long * nmask,unsigned long maxnode,void * addr,int flags)20 long get_mempolicy(int *policy, const unsigned long *nmask,
21 		   unsigned long maxnode, void *addr, int flags)
22 {
23 	return syscall(__NR_get_mempolicy, policy, nmask,
24 		       maxnode, addr, flags);
25 }
26 
migrate_pages(int pid,unsigned long maxnode,const unsigned long * frommask,const unsigned long * tomask)27 long migrate_pages(int pid, unsigned long maxnode,
28 		   const unsigned long *frommask,
29 		   const unsigned long *tomask)
30 {
31 	return syscall(__NR_migrate_pages, pid, maxnode, frommask, tomask);
32 }
33 
34 /* Policies */
35 #define MPOL_DEFAULT	 0
36 #define MPOL_PREFERRED	 1
37 #define MPOL_BIND	 2
38 #define MPOL_INTERLEAVE	 3
39 
40 #define MPOL_MAX MPOL_INTERLEAVE
41 
42 /* Flags for get_mem_policy */
43 #define MPOL_F_NODE	    (1<<0)  /* return next il node or node of address */
44 				    /* Warning: MPOL_F_NODE is unsupported and
45 				     * subject to change. Don't use.
46 				     */
47 #define MPOL_F_ADDR	    (1<<1)  /* look up vma using address */
48 #define MPOL_F_MEMS_ALLOWED (1<<2)  /* query nodes allowed in cpuset */
49 
50 /* Flags for mbind */
51 #define MPOL_MF_STRICT	     (1<<0) /* Verify existing pages in the mapping */
52 #define MPOL_MF_MOVE	     (1<<1) /* Move pages owned by this process to conform to mapping */
53 #define MPOL_MF_MOVE_ALL     (1<<2) /* Move every page to conform to mapping */
54 
55 #endif /* SELFTEST_KVM_NUMAIF_H */
56