Register a memory range for missing-page fault handling.
(fd: BorrowedFd<'_>, addr: u64, len: u64)
| 130 | |
| 131 | /// Register a memory range for missing-page fault handling. |
| 132 | pub(crate) fn register(fd: BorrowedFd<'_>, addr: u64, len: u64) -> Result<u64, Error> { |
| 133 | let mut reg = UffdioRegister { |
| 134 | range_start: addr, |
| 135 | range_len: len, |
| 136 | mode: userfaultfd::UFFDIO_REGISTER_MODE_MISSING, |
| 137 | ioctls: 0, |
| 138 | }; |
| 139 | // SAFETY: `reg` is a valid, correctly-sized struct for this ioctl. |
| 140 | let ret = unsafe { |
| 141 | libc::ioctl( |
| 142 | fd.as_raw_fd(), |
| 143 | userfaultfd::UFFDIO_REGISTER as libc::Ioctl, |
| 144 | &mut reg, |
| 145 | ) |
| 146 | }; |
| 147 | if ret < 0 { |
| 148 | return Err(Error::last_os_error()); |
| 149 | } |
| 150 | Ok(reg.ioctls) |
| 151 | } |
| 152 | |
| 153 | /// Resolve a page fault by copying data into the faulted address. |
| 154 | pub(crate) fn copy(fd: BorrowedFd<'_>, dst: u64, src: *const u8, len: u64) -> Result<(), Error> { |
no test coverage detected