Skip to content

Commit b54fd29

Browse files
kalyazinroypat
authored andcommitted
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 99c2d63 commit b54fd29

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
@@ -113,6 +113,54 @@ pub struct GuestRegionUffdMapping {
113113
pub page_size_kib: usize,
114114
}
115115

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

0 commit comments

Comments
 (0)