ureeves_userfaultfd_sys/
linux4_11.rs

1use super::*;
2
3// The following are preprocessor constants that bindgen can't figure out, so we enter them manually
4// from <linux/userfaultfd.h>, and have tests to make sure they're accurate.
5
6pub const UFFD_API: u64 = 0xAA;
7pub const UFFD_API_FEATURES: u64 = UFFD_FEATURE_EVENT_FORK
8    | UFFD_FEATURE_EVENT_REMAP
9    | UFFD_FEATURE_EVENT_REMOVE
10    | UFFD_FEATURE_EVENT_UNMAP
11    | UFFD_FEATURE_MISSING_HUGETLBFS
12    | UFFD_FEATURE_MISSING_SHMEM;
13
14pub const UFFD_API_IOCTLS: u64 = 1 << _UFFDIO_REGISTER | 1 << _UFFDIO_UNREGISTER | 1 << _UFFDIO_API;
15pub const UFFD_API_RANGE_IOCTLS: u64 =
16    1 << _UFFDIO_WAKE | 1 << _UFFDIO_COPY | 1 << _UFFDIO_ZEROPAGE;
17
18pub const UFFDIO_REGISTER_MODE_MISSING: u64 = 1 << 0;
19pub const UFFDIO_REGISTER_MODE_WP: u64 = 1 << 1;
20
21pub const UFFDIO_COPY_MODE_DONTWAKE: u64 = 1 << 0;
22pub const UFFDIO_COPY_MODE_WP: u64 = 1 << 1;
23
24pub const UFFDIO_ZEROPAGE_MODE_DONTWAKE: u64 = 1 << 0;
25
26pub const UFFDIO_API: u32 = 0xc018aa3f;
27pub const UFFDIO_REGISTER: u32 = 0xc020aa00;
28pub const UFFDIO_UNREGISTER: u32 = 0x8010aa01;
29pub const UFFDIO_WAKE: u32 = 0x8010aa02;
30pub const UFFDIO_COPY: u32 = 0xc028aa03;
31pub const UFFDIO_ZEROPAGE: u32 = 0xc020aa04;
32pub const UFFDIO_WRITEPROTECT: u32 = 0xc018aa06;
33
34#[cfg(test)]
35mod const_tests {
36    use super::*;
37
38    extern "C" {
39        static _const_UFFD_API: u64;
40        static _const_UFFD_API_FEATURES: u64;
41        static _const_UFFD_API_IOCTLS: u64;
42        static _const_UFFD_API_RANGE_IOCTLS: u64;
43        static _const_UFFDIO_REGISTER_MODE_MISSING: u64;
44        static _const_UFFDIO_REGISTER_MODE_WP: u64;
45        static _const_UFFDIO_COPY_MODE_DONTWAKE: u64;
46        static _const_UFFDIO_COPY_MODE_WP: u64;
47        static _const_UFFDIO_ZEROPAGE_MODE_DONTWAKE: u64;
48        static _const_UFFDIO_API: u32;
49        static _const_UFFDIO_REGISTER: u32;
50        static _const_UFFDIO_UNREGISTER: u32;
51        static _const_UFFDIO_WAKE: u32;
52        static _const_UFFDIO_COPY: u32;
53        static _const_UFFDIO_ZEROPAGE: u32;
54        static _const_UFFDIO_WRITEPROTECT: u32;
55    }
56
57    #[test]
58    fn consts_correct() {
59        unsafe {
60            assert_eq!(UFFD_API, _const_UFFD_API, "UFFD_API");
61            assert_eq!(
62                UFFD_API_FEATURES, _const_UFFD_API_FEATURES,
63                "UFFD_API_FEATURES"
64            );
65            assert_eq!(UFFD_API_IOCTLS, _const_UFFD_API_IOCTLS, "UFFD_API_IOCTLS");
66            assert_eq!(
67                UFFD_API_RANGE_IOCTLS, _const_UFFD_API_RANGE_IOCTLS,
68                "UFFD_API_RANGE_IOCTLS"
69            );
70            assert_eq!(
71                UFFDIO_REGISTER_MODE_MISSING, _const_UFFDIO_REGISTER_MODE_MISSING,
72                "UFFDIO_REGISTER_MODE_MISSING"
73            );
74            assert_eq!(
75                UFFDIO_REGISTER_MODE_WP, _const_UFFDIO_REGISTER_MODE_WP,
76                "UFFDIO_REGISTER_MODE_WP"
77            );
78            assert_eq!(
79                UFFDIO_COPY_MODE_DONTWAKE, _const_UFFDIO_COPY_MODE_DONTWAKE,
80                "UFFDIO_COPY_MODE_DONTWAKE"
81            );
82            assert_eq!(
83                UFFDIO_COPY_MODE_WP, _const_UFFDIO_COPY_MODE_WP,
84                "UFFDIO_COPY_MODE_WP"
85            );
86            assert_eq!(
87                UFFDIO_ZEROPAGE_MODE_DONTWAKE, _const_UFFDIO_ZEROPAGE_MODE_DONTWAKE,
88                "UFFDIO_ZEROPAGE_MODE_DONTWAKE"
89            );
90            assert_eq!(UFFDIO_API, _const_UFFDIO_API, "UFFDIO_API");
91            assert_eq!(UFFDIO_REGISTER, _const_UFFDIO_REGISTER, "UFFDIO_REGISTER");
92            assert_eq!(
93                UFFDIO_UNREGISTER, _const_UFFDIO_UNREGISTER,
94                "UFFDIO_UNREGISTER"
95            );
96            assert_eq!(UFFDIO_WAKE, _const_UFFDIO_WAKE, "UFFDIO_WAKE");
97            assert_eq!(UFFDIO_COPY, _const_UFFDIO_COPY, "UFFDIO_COPY");
98            assert_eq!(UFFDIO_ZEROPAGE, _const_UFFDIO_ZEROPAGE, "UFFDIO_ZEROPAGE");
99            assert_eq!(
100                UFFDIO_WRITEPROTECT, _const_UFFDIO_WRITEPROTECT,
101                "UFFDIO_WRITEPROTECT"
102            );
103        }
104    }
105}