1*b85ea5faSPeter Maydell /* 2*b85ea5faSPeter Maydell * QEMU madvise wrapper functions 3*b85ea5faSPeter Maydell * 4*b85ea5faSPeter Maydell * This work is licensed under the terms of the GNU GPL, version 2 or later. 5*b85ea5faSPeter Maydell * See the COPYING file in the top-level directory. 6*b85ea5faSPeter Maydell */ 7*b85ea5faSPeter Maydell 8*b85ea5faSPeter Maydell #ifndef QEMU_MADVISE_H 9*b85ea5faSPeter Maydell #define QEMU_MADVISE_H 10*b85ea5faSPeter Maydell 11*b85ea5faSPeter Maydell #define QEMU_MADV_INVALID -1 12*b85ea5faSPeter Maydell 13*b85ea5faSPeter Maydell #if defined(CONFIG_MADVISE) 14*b85ea5faSPeter Maydell 15*b85ea5faSPeter Maydell #define QEMU_MADV_WILLNEED MADV_WILLNEED 16*b85ea5faSPeter Maydell #define QEMU_MADV_DONTNEED MADV_DONTNEED 17*b85ea5faSPeter Maydell #ifdef MADV_DONTFORK 18*b85ea5faSPeter Maydell #define QEMU_MADV_DONTFORK MADV_DONTFORK 19*b85ea5faSPeter Maydell #else 20*b85ea5faSPeter Maydell #define QEMU_MADV_DONTFORK QEMU_MADV_INVALID 21*b85ea5faSPeter Maydell #endif 22*b85ea5faSPeter Maydell #ifdef MADV_MERGEABLE 23*b85ea5faSPeter Maydell #define QEMU_MADV_MERGEABLE MADV_MERGEABLE 24*b85ea5faSPeter Maydell #else 25*b85ea5faSPeter Maydell #define QEMU_MADV_MERGEABLE QEMU_MADV_INVALID 26*b85ea5faSPeter Maydell #endif 27*b85ea5faSPeter Maydell #ifdef MADV_UNMERGEABLE 28*b85ea5faSPeter Maydell #define QEMU_MADV_UNMERGEABLE MADV_UNMERGEABLE 29*b85ea5faSPeter Maydell #else 30*b85ea5faSPeter Maydell #define QEMU_MADV_UNMERGEABLE QEMU_MADV_INVALID 31*b85ea5faSPeter Maydell #endif 32*b85ea5faSPeter Maydell #ifdef MADV_DODUMP 33*b85ea5faSPeter Maydell #define QEMU_MADV_DODUMP MADV_DODUMP 34*b85ea5faSPeter Maydell #else 35*b85ea5faSPeter Maydell #define QEMU_MADV_DODUMP QEMU_MADV_INVALID 36*b85ea5faSPeter Maydell #endif 37*b85ea5faSPeter Maydell #ifdef MADV_DONTDUMP 38*b85ea5faSPeter Maydell #define QEMU_MADV_DONTDUMP MADV_DONTDUMP 39*b85ea5faSPeter Maydell #else 40*b85ea5faSPeter Maydell #define QEMU_MADV_DONTDUMP QEMU_MADV_INVALID 41*b85ea5faSPeter Maydell #endif 42*b85ea5faSPeter Maydell #ifdef MADV_HUGEPAGE 43*b85ea5faSPeter Maydell #define QEMU_MADV_HUGEPAGE MADV_HUGEPAGE 44*b85ea5faSPeter Maydell #else 45*b85ea5faSPeter Maydell #define QEMU_MADV_HUGEPAGE QEMU_MADV_INVALID 46*b85ea5faSPeter Maydell #endif 47*b85ea5faSPeter Maydell #ifdef MADV_NOHUGEPAGE 48*b85ea5faSPeter Maydell #define QEMU_MADV_NOHUGEPAGE MADV_NOHUGEPAGE 49*b85ea5faSPeter Maydell #else 50*b85ea5faSPeter Maydell #define QEMU_MADV_NOHUGEPAGE QEMU_MADV_INVALID 51*b85ea5faSPeter Maydell #endif 52*b85ea5faSPeter Maydell #ifdef MADV_REMOVE 53*b85ea5faSPeter Maydell #define QEMU_MADV_REMOVE MADV_REMOVE 54*b85ea5faSPeter Maydell #else 55*b85ea5faSPeter Maydell #define QEMU_MADV_REMOVE QEMU_MADV_DONTNEED 56*b85ea5faSPeter Maydell #endif 57*b85ea5faSPeter Maydell #ifdef MADV_POPULATE_WRITE 58*b85ea5faSPeter Maydell #define QEMU_MADV_POPULATE_WRITE MADV_POPULATE_WRITE 59*b85ea5faSPeter Maydell #else 60*b85ea5faSPeter Maydell #define QEMU_MADV_POPULATE_WRITE QEMU_MADV_INVALID 61*b85ea5faSPeter Maydell #endif 62*b85ea5faSPeter Maydell 63*b85ea5faSPeter Maydell #elif defined(CONFIG_POSIX_MADVISE) 64*b85ea5faSPeter Maydell 65*b85ea5faSPeter Maydell #define QEMU_MADV_WILLNEED POSIX_MADV_WILLNEED 66*b85ea5faSPeter Maydell #define QEMU_MADV_DONTNEED POSIX_MADV_DONTNEED 67*b85ea5faSPeter Maydell #define QEMU_MADV_DONTFORK QEMU_MADV_INVALID 68*b85ea5faSPeter Maydell #define QEMU_MADV_MERGEABLE QEMU_MADV_INVALID 69*b85ea5faSPeter Maydell #define QEMU_MADV_UNMERGEABLE QEMU_MADV_INVALID 70*b85ea5faSPeter Maydell #define QEMU_MADV_DODUMP QEMU_MADV_INVALID 71*b85ea5faSPeter Maydell #define QEMU_MADV_DONTDUMP QEMU_MADV_INVALID 72*b85ea5faSPeter Maydell #define QEMU_MADV_HUGEPAGE QEMU_MADV_INVALID 73*b85ea5faSPeter Maydell #define QEMU_MADV_NOHUGEPAGE QEMU_MADV_INVALID 74*b85ea5faSPeter Maydell #define QEMU_MADV_REMOVE QEMU_MADV_DONTNEED 75*b85ea5faSPeter Maydell #define QEMU_MADV_POPULATE_WRITE QEMU_MADV_INVALID 76*b85ea5faSPeter Maydell 77*b85ea5faSPeter Maydell #else /* no-op */ 78*b85ea5faSPeter Maydell 79*b85ea5faSPeter Maydell #define QEMU_MADV_WILLNEED QEMU_MADV_INVALID 80*b85ea5faSPeter Maydell #define QEMU_MADV_DONTNEED QEMU_MADV_INVALID 81*b85ea5faSPeter Maydell #define QEMU_MADV_DONTFORK QEMU_MADV_INVALID 82*b85ea5faSPeter Maydell #define QEMU_MADV_MERGEABLE QEMU_MADV_INVALID 83*b85ea5faSPeter Maydell #define QEMU_MADV_UNMERGEABLE QEMU_MADV_INVALID 84*b85ea5faSPeter Maydell #define QEMU_MADV_DODUMP QEMU_MADV_INVALID 85*b85ea5faSPeter Maydell #define QEMU_MADV_DONTDUMP QEMU_MADV_INVALID 86*b85ea5faSPeter Maydell #define QEMU_MADV_HUGEPAGE QEMU_MADV_INVALID 87*b85ea5faSPeter Maydell #define QEMU_MADV_NOHUGEPAGE QEMU_MADV_INVALID 88*b85ea5faSPeter Maydell #define QEMU_MADV_REMOVE QEMU_MADV_INVALID 89*b85ea5faSPeter Maydell #define QEMU_MADV_POPULATE_WRITE QEMU_MADV_INVALID 90*b85ea5faSPeter Maydell 91*b85ea5faSPeter Maydell #endif 92*b85ea5faSPeter Maydell 93*b85ea5faSPeter Maydell int qemu_madvise(void *addr, size_t len, int advice); 94*b85ea5faSPeter Maydell 95*b85ea5faSPeter Maydell #endif 96