@@ -115,6 +115,54 @@ pub struct GuestRegionUffdMapping {
115
115
pub page_size_kib : usize ,
116
116
}
117
117
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
+
118
166
/// Errors related to saving and restoring Microvm state.
119
167
#[ derive( Debug , thiserror:: Error , displaydoc:: Display ) ]
120
168
pub enum MicrovmStateError {
0 commit comments