Skip to content

Commit adba190

Browse files
committed
feat(vmm): add secret free userfault definitions
These are used for communication of page faults between Firecracker and a UFFD handler. Signed-off-by: Nikita Kalyazin <[email protected]>
1 parent 01e381a commit adba190

File tree

1 file changed

+48
-0
lines changed

1 file changed

+48
-0
lines changed

src/vmm/src/persist.rs

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,54 @@ pub struct GuestRegionUffdMapping {
115115
pub page_size_kib: usize,
116116
}
117117

118+
/// FaultRequest
119+
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
120+
pub struct FaultRequest {
121+
/// vCPU that encountered the fault
122+
pub vcpu: u32,
123+
/// Offset in guest_memfd where the fault occured
124+
pub offset: u64,
125+
/// Flags
126+
pub flags: u64,
127+
/// Async PF token
128+
pub token: Option<u32>,
129+
}
130+
131+
/// FaultReply
132+
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
133+
pub struct FaultReply {
134+
/// vCPU that encountered the fault, from `FaultRequest` (if present, otherwise 0)
135+
pub vcpu: Option<u32>,
136+
/// Offset in guest_memfd where population started
137+
pub offset: u64,
138+
/// Length of populated area
139+
pub len: u64,
140+
/// Flags, must be copied from `FaultRequest`, otherwise 0
141+
pub flags: u64,
142+
/// Async PF token, must be copied from `FaultRequest`, otherwise None
143+
pub token: Option<u32>,
144+
/// Whether the populated pages are zero pages
145+
pub zero: bool,
146+
}
147+
148+
/// UffdMsgFromFirecracker
149+
#[derive(Serialize, Deserialize, Debug)]
150+
#[serde(untagged)]
151+
pub enum UffdMsgFromFirecracker {
152+
/// Mappings
153+
Mappings(Vec<GuestRegionUffdMapping>),
154+
/// FaultReq
155+
FaultReq(FaultRequest),
156+
}
157+
158+
/// UffdMsgToFirecracker
159+
#[derive(Serialize, Deserialize, Debug)]
160+
#[serde(untagged)]
161+
pub enum UffdMsgToFirecracker {
162+
/// FaultRep
163+
FaultRep(FaultReply),
164+
}
165+
118166
/// Errors related to saving and restoring Microvm state.
119167
#[derive(Debug, thiserror::Error, displaydoc::Display)]
120168
pub enum MicrovmStateError {

0 commit comments

Comments
 (0)