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