@@ -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 (not meaningful to Fission)
122+ pub vcpu : u32 ,
123+ /// Offset in guest_memfd where the fault occured
124+ pub offset : u64 ,
125+ /// Flags (not meaningful to Fission)
126+ pub flags : u64 ,
127+ /// Async PF token (not meaningful to Fission)
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 ) ]
120168pub enum MicrovmStateError {
0 commit comments