@@ -158,7 +158,7 @@ impl Bytes<MemoryRegionAddress> for GuestRegionMmap {
158
158
/// ```
159
159
/// # use vm_memory::{Bytes, GuestAddress, GuestMemoryMmap};
160
160
/// # let start_addr = GuestAddress(0x1000);
161
- /// # let mut gm = GuestMemoryMmap::new (&vec![(start_addr, 0x400)]).unwrap();
161
+ /// # let mut gm = GuestMemoryMmap::from_ranges (&vec![(start_addr, 0x400)]).unwrap();
162
162
/// let res = gm.write(&[1,2,3,4,5], GuestAddress(0x1200)).unwrap();
163
163
/// assert_eq!(5, res);
164
164
/// ```
@@ -175,7 +175,7 @@ impl Bytes<MemoryRegionAddress> for GuestRegionMmap {
175
175
/// ```
176
176
/// # use vm_memory::{Bytes, GuestAddress, GuestMemoryMmap};
177
177
/// # let start_addr = GuestAddress(0x1000);
178
- /// # let mut gm = GuestMemoryMmap::new (&vec![(start_addr, 0x400)]).unwrap();
178
+ /// # let mut gm = GuestMemoryMmap::from_ranges (&vec![(start_addr, 0x400)]).unwrap();
179
179
/// let buf = &mut [0u8; 16];
180
180
/// let res = gm.read(buf, GuestAddress(0x1200)).unwrap();
181
181
/// assert_eq!(16, res);
@@ -210,7 +210,7 @@ impl Bytes<MemoryRegionAddress> for GuestRegionMmap {
210
210
/// # use std::fs::File;
211
211
/// # use std::path::Path;
212
212
/// # let start_addr = GuestAddress(0x1000);
213
- /// # let gm = GuestMemoryMmap::new (&vec![(start_addr, 0x400)]).unwrap();
213
+ /// # let gm = GuestMemoryMmap::from_ranges (&vec![(start_addr, 0x400)]).unwrap();
214
214
/// let mut file = if cfg!(unix) {
215
215
/// File::open(Path::new("/dev/urandom")).unwrap()
216
216
/// } else {
@@ -245,7 +245,7 @@ impl Bytes<MemoryRegionAddress> for GuestRegionMmap {
245
245
/// # use std::fs::File;
246
246
/// # use std::path::Path;
247
247
/// # let start_addr = GuestAddress(0x1000);
248
- /// # let gm = GuestMemoryMmap::new (&vec![(start_addr, 0x400)]).unwrap();
248
+ /// # let gm = GuestMemoryMmap::from_ranges (&vec![(start_addr, 0x400)]).unwrap();
249
249
/// let mut file = if cfg!(unix) {
250
250
/// File::open(Path::new("/dev/urandom")).unwrap()
251
251
/// } else {
@@ -283,7 +283,7 @@ impl Bytes<MemoryRegionAddress> for GuestRegionMmap {
283
283
/// # use vm_memory::{Address, Bytes, GuestAddress, GuestMemoryMmap};
284
284
/// # use std::fs::OpenOptions;
285
285
/// # let start_addr = GuestAddress(0x1000);
286
- /// # let gm = GuestMemoryMmap::new (&vec![(start_addr, 0x400)]).unwrap();
286
+ /// # let gm = GuestMemoryMmap::from_ranges (&vec![(start_addr, 0x400)]).unwrap();
287
287
/// let mut file = TempFile::new().unwrap().into_file();
288
288
/// let mut mem = [0u8; 1024];
289
289
/// gm.write_to(start_addr, &mut file, 128).unwrap();
@@ -315,7 +315,7 @@ impl Bytes<MemoryRegionAddress> for GuestRegionMmap {
315
315
/// # use vm_memory::{Address, Bytes, GuestAddress, GuestMemoryMmap};
316
316
/// # use std::fs::OpenOptions;
317
317
/// # let start_addr = GuestAddress(0x1000);
318
- /// # let gm = GuestMemoryMmap::new (&vec![(start_addr, 0x400)]).unwrap();
318
+ /// # let gm = GuestMemoryMmap::from_ranges (&vec![(start_addr, 0x400)]).unwrap();
319
319
/// let mut file = TempFile::new().unwrap().into_file();
320
320
/// let mut mem = [0u8; 1024];
321
321
/// gm.write_all_to(start_addr, &mut file, 128).unwrap();
@@ -378,18 +378,25 @@ pub struct GuestMemoryMmap {
378
378
}
379
379
380
380
impl GuestMemoryMmap {
381
+ /// Creates an empty `GuestMemoryMmap` instance.
382
+ pub fn new ( ) -> Self {
383
+ GuestMemoryMmap {
384
+ regions : Vec :: new ( ) ,
385
+ }
386
+ }
387
+
381
388
/// Creates a container and allocates anonymous memory for guest memory regions.
382
389
///
383
390
/// Valid memory regions are specified as a slice of (Address, Size) tuples sorted by Address.
384
- pub fn new ( ranges : & [ ( GuestAddress , usize ) ] ) -> result:: Result < Self , Error > {
385
- Self :: with_files ( ranges. iter ( ) . map ( |r| ( r. 0 , r. 1 , None ) ) )
391
+ pub fn from_ranges ( ranges : & [ ( GuestAddress , usize ) ] ) -> result:: Result < Self , Error > {
392
+ Self :: from_ranges_with_files ( ranges. iter ( ) . map ( |r| ( r. 0 , r. 1 , None ) ) )
386
393
}
387
394
388
395
/// Creates a container and allocates anonymous memory for guest memory regions.
389
396
///
390
397
/// Valid memory regions are specified as a sequence of (Address, Size, Option<FileOffset>)
391
398
/// tuples sorted by Address.
392
- pub fn with_files < A , T > ( ranges : T ) -> result:: Result < Self , Error >
399
+ pub fn from_ranges_with_files < A , T > ( ranges : T ) -> result:: Result < Self , Error >
393
400
where
394
401
A : Borrow < ( GuestAddress , usize , Option < FileOffset > ) > ,
395
402
T : IntoIterator < Item = A > ,
@@ -557,7 +564,7 @@ mod tests {
557
564
fn new_guest_memory_mmap (
558
565
regions_summary : & [ ( GuestAddress , usize ) ] ,
559
566
) -> Result < GuestMemoryMmap , Error > {
560
- GuestMemoryMmap :: new ( regions_summary)
567
+ GuestMemoryMmap :: from_ranges ( regions_summary)
561
568
}
562
569
563
570
fn new_guest_memory_mmap_from_regions (
@@ -603,7 +610,7 @@ mod tests {
603
610
} )
604
611
. collect ( ) ;
605
612
606
- GuestMemoryMmap :: with_files ( & regions)
613
+ GuestMemoryMmap :: from_ranges_with_files ( & regions)
607
614
}
608
615
609
616
#[ test]
@@ -748,6 +755,9 @@ mod tests {
748
755
( GuestAddress ( 100 ) , 100 as usize ) ,
749
756
] ;
750
757
758
+ let guest_mem = GuestMemoryMmap :: new ( ) ;
759
+ assert_eq ! ( guest_mem. regions. len( ) , 0 ) ;
760
+
751
761
check_guest_memory_mmap ( new_guest_memory_mmap ( & regions_summary) , & regions_summary) ;
752
762
753
763
check_guest_memory_mmap (
@@ -798,8 +808,8 @@ mod tests {
798
808
let start_addr1 = GuestAddress ( 0x0 ) ;
799
809
let start_addr2 = GuestAddress ( 0x800 ) ;
800
810
let guest_mem =
801
- GuestMemoryMmap :: new ( & [ ( start_addr1, 0x400 ) , ( start_addr2, 0x400 ) ] ) . unwrap ( ) ;
802
- let guest_mem_backed_by_file = GuestMemoryMmap :: with_files ( & [
811
+ GuestMemoryMmap :: from_ranges ( & [ ( start_addr1, 0x400 ) , ( start_addr2, 0x400 ) ] ) . unwrap ( ) ;
812
+ let guest_mem_backed_by_file = GuestMemoryMmap :: from_ranges_with_files ( & [
803
813
( start_addr1, 0x400 , Some ( FileOffset :: new ( f1, 0 ) ) ) ,
804
814
( start_addr2, 0x400 , Some ( FileOffset :: new ( f2, 0 ) ) ) ,
805
815
] )
@@ -824,8 +834,8 @@ mod tests {
824
834
let start_addr1 = GuestAddress ( 0x0 ) ;
825
835
let start_addr2 = GuestAddress ( 0x800 ) ;
826
836
let guest_mem =
827
- GuestMemoryMmap :: new ( & [ ( start_addr1, 0x400 ) , ( start_addr2, 0x400 ) ] ) . unwrap ( ) ;
828
- let guest_mem_backed_by_file = GuestMemoryMmap :: with_files ( & [
837
+ GuestMemoryMmap :: from_ranges ( & [ ( start_addr1, 0x400 ) , ( start_addr2, 0x400 ) ] ) . unwrap ( ) ;
838
+ let guest_mem_backed_by_file = GuestMemoryMmap :: from_ranges_with_files ( & [
829
839
( start_addr1, 0x400 , Some ( FileOffset :: new ( f1, 0 ) ) ) ,
830
840
( start_addr2, 0x400 , Some ( FileOffset :: new ( f2, 0 ) ) ) ,
831
841
] )
@@ -856,8 +866,8 @@ mod tests {
856
866
let start_addr1 = GuestAddress ( 0x0 ) ;
857
867
let start_addr2 = GuestAddress ( 0x800 ) ;
858
868
let guest_mem =
859
- GuestMemoryMmap :: new ( & [ ( start_addr1, 0x400 ) , ( start_addr2, 0x400 ) ] ) . unwrap ( ) ;
860
- let guest_mem_backed_by_file = GuestMemoryMmap :: with_files ( & [
869
+ GuestMemoryMmap :: from_ranges ( & [ ( start_addr1, 0x400 ) , ( start_addr2, 0x400 ) ] ) . unwrap ( ) ;
870
+ let guest_mem_backed_by_file = GuestMemoryMmap :: from_ranges_with_files ( & [
861
871
( start_addr1, 0x400 , Some ( FileOffset :: new ( f1, 0 ) ) ) ,
862
872
( start_addr2, 0x400 , Some ( FileOffset :: new ( f2, 0 ) ) ) ,
863
873
] )
@@ -884,8 +894,8 @@ mod tests {
884
894
let start_addr1 = GuestAddress ( 0x0 ) ;
885
895
let start_addr2 = GuestAddress ( 0x800 ) ;
886
896
let guest_mem =
887
- GuestMemoryMmap :: new ( & [ ( start_addr1, 0x400 ) , ( start_addr2, 0x400 ) ] ) . unwrap ( ) ;
888
- let guest_mem_backed_by_file = GuestMemoryMmap :: with_files ( & [
897
+ GuestMemoryMmap :: from_ranges ( & [ ( start_addr1, 0x400 ) , ( start_addr2, 0x400 ) ] ) . unwrap ( ) ;
898
+ let guest_mem_backed_by_file = GuestMemoryMmap :: from_ranges_with_files ( & [
889
899
( start_addr1, 0x400 , Some ( FileOffset :: new ( f1, 0 ) ) ) ,
890
900
( start_addr2, 0x400 , Some ( FileOffset :: new ( f2, 0 ) ) ) ,
891
901
] )
@@ -910,10 +920,13 @@ mod tests {
910
920
f. set_len ( 0x400 ) . unwrap ( ) ;
911
921
912
922
let start_addr = GuestAddress ( 0x0 ) ;
913
- let guest_mem = GuestMemoryMmap :: new ( & [ ( start_addr, 0x400 ) ] ) . unwrap ( ) ;
914
- let guest_mem_backed_by_file =
915
- GuestMemoryMmap :: with_files ( & [ ( start_addr, 0x400 , Some ( FileOffset :: new ( f, 0 ) ) ) ] )
916
- . unwrap ( ) ;
923
+ let guest_mem = GuestMemoryMmap :: from_ranges ( & [ ( start_addr, 0x400 ) ] ) . unwrap ( ) ;
924
+ let guest_mem_backed_by_file = GuestMemoryMmap :: from_ranges_with_files ( & [ (
925
+ start_addr,
926
+ 0x400 ,
927
+ Some ( FileOffset :: new ( f, 0 ) ) ,
928
+ ) ] )
929
+ . unwrap ( ) ;
917
930
918
931
let guest_mem_list = vec ! [ guest_mem, guest_mem_backed_by_file] ;
919
932
for guest_mem in guest_mem_list. iter ( ) {
@@ -944,8 +957,9 @@ mod tests {
944
957
let bad_addr2 = GuestAddress ( 0x1ffc ) ;
945
958
let max_addr = GuestAddress ( 0x2000 ) ;
946
959
947
- let gm = GuestMemoryMmap :: new ( & [ ( start_addr1, 0x1000 ) , ( start_addr2, 0x1000 ) ] ) . unwrap ( ) ;
948
- let gm_backed_by_file = GuestMemoryMmap :: with_files ( & [
960
+ let gm =
961
+ GuestMemoryMmap :: from_ranges ( & [ ( start_addr1, 0x1000 ) , ( start_addr2, 0x1000 ) ] ) . unwrap ( ) ;
962
+ let gm_backed_by_file = GuestMemoryMmap :: from_ranges_with_files ( & [
949
963
( start_addr1, 0x1000 , Some ( FileOffset :: new ( f1, 0 ) ) ) ,
950
964
( start_addr2, 0x1000 , Some ( FileOffset :: new ( f2, 0 ) ) ) ,
951
965
] )
@@ -983,10 +997,13 @@ mod tests {
983
997
f. set_len ( 0x400 ) . unwrap ( ) ;
984
998
985
999
let mut start_addr = GuestAddress ( 0x1000 ) ;
986
- let gm = GuestMemoryMmap :: new ( & [ ( start_addr, 0x400 ) ] ) . unwrap ( ) ;
987
- let gm_backed_by_file =
988
- GuestMemoryMmap :: with_files ( & [ ( start_addr, 0x400 , Some ( FileOffset :: new ( f, 0 ) ) ) ] )
989
- . unwrap ( ) ;
1000
+ let gm = GuestMemoryMmap :: from_ranges ( & [ ( start_addr, 0x400 ) ] ) . unwrap ( ) ;
1001
+ let gm_backed_by_file = GuestMemoryMmap :: from_ranges_with_files ( & [ (
1002
+ start_addr,
1003
+ 0x400 ,
1004
+ Some ( FileOffset :: new ( f, 0 ) ) ,
1005
+ ) ] )
1006
+ . unwrap ( ) ;
990
1007
991
1008
let gm_list = vec ! [ gm, gm_backed_by_file] ;
992
1009
for gm in gm_list. iter ( ) {
@@ -1011,8 +1028,8 @@ mod tests {
1011
1028
let f = TempFile :: new ( ) . unwrap ( ) . into_file ( ) ;
1012
1029
f. set_len ( 0x400 ) . unwrap ( ) ;
1013
1030
1014
- let gm = GuestMemoryMmap :: new ( & [ ( GuestAddress ( 0x1000 ) , 0x400 ) ] ) . unwrap ( ) ;
1015
- let gm_backed_by_file = GuestMemoryMmap :: with_files ( & [ (
1031
+ let gm = GuestMemoryMmap :: from_ranges ( & [ ( GuestAddress ( 0x1000 ) , 0x400 ) ] ) . unwrap ( ) ;
1032
+ let gm_backed_by_file = GuestMemoryMmap :: from_ranges_with_files ( & [ (
1016
1033
GuestAddress ( 0x1000 ) ,
1017
1034
0x400 ,
1018
1035
Some ( FileOffset :: new ( f, 0 ) ) ,
@@ -1056,7 +1073,7 @@ mod tests {
1056
1073
( GuestAddress ( 0x1000 ) , region_size) ,
1057
1074
] ;
1058
1075
let mut iterated_regions = Vec :: new ( ) ;
1059
- let gm = GuestMemoryMmap :: new ( & regions) . unwrap ( ) ;
1076
+ let gm = GuestMemoryMmap :: from_ranges ( & regions) . unwrap ( ) ;
1060
1077
let res: guest_memory:: Result < ( ) > = gm. with_regions ( |_, region| {
1061
1078
assert_eq ! ( region. len( ) , region_size as GuestUsize ) ;
1062
1079
Ok ( ( ) )
@@ -1087,8 +1104,9 @@ mod tests {
1087
1104
1088
1105
let start_addr1 = GuestAddress ( 0x0 ) ;
1089
1106
let start_addr2 = GuestAddress ( 0x1000 ) ;
1090
- let gm = GuestMemoryMmap :: new ( & [ ( start_addr1, 0x1000 ) , ( start_addr2, 0x1000 ) ] ) . unwrap ( ) ;
1091
- let gm_backed_by_file = GuestMemoryMmap :: with_files ( & [
1107
+ let gm =
1108
+ GuestMemoryMmap :: from_ranges ( & [ ( start_addr1, 0x1000 ) , ( start_addr2, 0x1000 ) ] ) . unwrap ( ) ;
1109
+ let gm_backed_by_file = GuestMemoryMmap :: from_ranges_with_files ( & [
1092
1110
( start_addr1, 0x1000 , Some ( FileOffset :: new ( f1, 0 ) ) ) ,
1093
1111
( start_addr2, 0x1000 , Some ( FileOffset :: new ( f2, 0 ) ) ) ,
1094
1112
] )
@@ -1110,13 +1128,17 @@ mod tests {
1110
1128
f. set_len ( 0x400 ) . unwrap ( ) ;
1111
1129
1112
1130
let start_addr = GuestAddress ( 0x0 ) ;
1113
- let gm = GuestMemoryMmap :: new ( & [ ( start_addr, 0x400 ) ] ) . unwrap ( ) ;
1131
+ let gm = GuestMemoryMmap :: from_ranges ( & [ ( start_addr, 0x400 ) ] ) . unwrap ( ) ;
1114
1132
assert ! ( gm. find_region( start_addr) . is_some( ) ) ;
1115
1133
let region = gm. find_region ( start_addr) . unwrap ( ) ;
1116
1134
assert ! ( region. file_offset( ) . is_none( ) ) ;
1117
1135
1118
- let gm = GuestMemoryMmap :: with_files ( & [ ( start_addr, 0x400 , Some ( FileOffset :: new ( f, 0 ) ) ) ] )
1119
- . unwrap ( ) ;
1136
+ let gm = GuestMemoryMmap :: from_ranges_with_files ( & [ (
1137
+ start_addr,
1138
+ 0x400 ,
1139
+ Some ( FileOffset :: new ( f, 0 ) ) ,
1140
+ ) ] )
1141
+ . unwrap ( ) ;
1120
1142
assert ! ( gm. find_region( start_addr) . is_some( ) ) ;
1121
1143
let region = gm. find_region ( start_addr) . unwrap ( ) ;
1122
1144
assert ! ( region. file_offset( ) . is_some( ) ) ;
@@ -1135,14 +1157,17 @@ mod tests {
1135
1157
let offset = 0x1000 ;
1136
1158
1137
1159
let start_addr = GuestAddress ( 0x0 ) ;
1138
- let gm = GuestMemoryMmap :: new ( & [ ( start_addr, 0x400 ) ] ) . unwrap ( ) ;
1160
+ let gm = GuestMemoryMmap :: from_ranges ( & [ ( start_addr, 0x400 ) ] ) . unwrap ( ) ;
1139
1161
assert ! ( gm. find_region( start_addr) . is_some( ) ) ;
1140
1162
let region = gm. find_region ( start_addr) . unwrap ( ) ;
1141
1163
assert ! ( region. file_offset( ) . is_none( ) ) ;
1142
1164
1143
- let gm =
1144
- GuestMemoryMmap :: with_files ( & [ ( start_addr, 0x400 , Some ( FileOffset :: new ( f, offset) ) ) ] )
1145
- . unwrap ( ) ;
1165
+ let gm = GuestMemoryMmap :: from_ranges_with_files ( & [ (
1166
+ start_addr,
1167
+ 0x400 ,
1168
+ Some ( FileOffset :: new ( f, offset) ) ,
1169
+ ) ] )
1170
+ . unwrap ( ) ;
1146
1171
assert ! ( gm. find_region( start_addr) . is_some( ) ) ;
1147
1172
let region = gm. find_region ( start_addr) . unwrap ( ) ;
1148
1173
assert ! ( region. file_offset( ) . is_some( ) ) ;
0 commit comments