xref: /qemu/include/qemu/madvise.h (revision 336d354b)
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