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