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