File tree Expand file tree Collapse file tree 1 file changed +18
-0
lines changed Expand file tree Collapse file tree 1 file changed +18
-0
lines changed Original file line number Diff line number Diff line change @@ -84,6 +84,14 @@ impl AtomicBitmap {
84
84
self . size
85
85
}
86
86
87
+ /// Atomically get and reset the dirty page bitmap.
88
+ pub fn get_and_reset ( & self ) -> Vec < u64 > {
89
+ self . map
90
+ . iter ( )
91
+ . map ( |u| u. fetch_and ( 0 , Ordering :: SeqCst ) )
92
+ . collect ( )
93
+ }
94
+
87
95
/// Reset all bitmap bits to 0.
88
96
pub fn reset ( & self ) {
89
97
for it in self . map . iter ( ) {
@@ -193,6 +201,16 @@ mod tests {
193
201
assert ! ( !b. is_addr_set( 128 ) ) ;
194
202
assert ! ( !b. is_addr_set( 256 ) ) ;
195
203
assert ! ( !b. is_addr_set( 384 ) ) ;
204
+
205
+ b. set_addr_range ( 128 , 129 ) ;
206
+ let v = b. get_and_reset ( ) ;
207
+
208
+ assert ! ( !b. is_addr_set( 128 ) ) ;
209
+ assert ! ( !b. is_addr_set( 256 ) ) ;
210
+ assert ! ( !b. is_addr_set( 384 ) ) ;
211
+
212
+ assert_eq ! ( v. len( ) , 1 ) ;
213
+ assert_eq ! ( v[ 0 ] , 0b110 ) ;
196
214
}
197
215
198
216
#[ test]
You can’t perform that action at this time.
0 commit comments