hv1_emulator/
locked_page.rs1use guestmem::GuestMemory;
5use guestmem::LockedPages;
6use guestmem::Page;
7use std::ops::Deref;
8
9pub(crate) struct LockedPage {
10 page: LockedPages,
11}
12
13impl LockedPage {
14 pub fn new(guest_memory: &GuestMemory, gpn: u64) -> Result<Self, guestmem::GuestMemoryError> {
15 let page = match guest_memory.lock_gpns(false, &[gpn]) {
16 Ok(it) => it,
17 Err(err) => {
18 tracelimit::error_ratelimited!(
19 gpn,
20 err = &err as &dyn std::error::Error,
21 "Failed to lock page"
22 );
23 return Err(err);
24 }
25 };
26 assert!(page.pages().len() == 1);
27 Ok(Self { page })
28 }
29}
30
31impl Deref for LockedPage {
32 type Target = Page;
33
34 fn deref(&self) -> &Self::Target {
35 self.page.pages()[0]
36 }
37}