@@ -102,10 +102,7 @@ pub struct MemoryMapRefMut<'a> {
102
102
103
103
impl < ' a > MemoryMapRefMut < ' a > {
104
104
/// Constructs a new [`MemoryMapRefMut`].
105
- pub fn new (
106
- buffer : & ' a mut [ u8 ] ,
107
- meta : MemoryMapMeta ,
108
- ) -> Result < Self , MemoryMapError > {
105
+ pub fn new ( buffer : & ' a mut [ u8 ] , meta : MemoryMapMeta ) -> Result < Self , MemoryMapError > {
109
106
if buffer. as_ptr ( ) . align_offset ( 8 ) != 0 {
110
107
return Err ( MemoryMapError :: Misaligned ) ;
111
108
}
@@ -301,10 +298,12 @@ impl MemoryMapBackingMemory {
301
298
Self ( slice)
302
299
}
303
300
301
+ /// INTERNAL, for unit tests.
302
+ ///
304
303
/// Creates an instance from the provided memory, which is not necessarily
305
304
/// on the UEFI heap.
306
305
#[ cfg( test) ]
307
- fn from_slice ( buffer : & mut [ u8 ] ) -> Self {
306
+ pub ( crate ) fn from_slice ( buffer : & mut [ u8 ] ) -> Self {
308
307
let len = buffer. len ( ) ;
309
308
unsafe { Self :: from_raw ( buffer. as_mut_ptr ( ) , len) }
310
309
}
@@ -347,6 +346,10 @@ impl Drop for MemoryMapBackingMemory {
347
346
log:: error!( "Failed to deallocate memory map: {e:?}" ) ;
348
347
}
349
348
} else {
349
+ #[ cfg( test) ]
350
+ log:: debug!( "Boot services are not available in unit tests." ) ;
351
+
352
+ #[ cfg( not( test) ) ]
350
353
log:: debug!( "Boot services are excited. Memory map won't be freed using the UEFI boot services allocator." ) ;
351
354
}
352
355
}
@@ -362,30 +365,13 @@ pub struct MemoryMapOwned {
362
365
}
363
366
364
367
impl MemoryMapOwned {
365
- /// Creates a [`MemoryMapOwned`] from the give initialized memory map behind
366
- /// the buffer and the reported `desc_size` from UEFI.
368
+ /// Creates a [`MemoryMapOwned`] from the given **initialized** memory map
369
+ /// (stored inside the provided buffer) and the corresponding
370
+ /// [`MemoryMapMeta`].
367
371
pub ( crate ) fn from_initialized_mem ( buf : MemoryMapBackingMemory , meta : MemoryMapMeta ) -> Self {
368
372
assert ! ( meta. desc_size >= mem:: size_of:: <MemoryDescriptor >( ) ) ;
369
373
let len = meta. entry_count ( ) ;
370
- MemoryMapOwned {
371
- buf,
372
- meta,
373
- len,
374
- }
375
- }
376
-
377
- #[ cfg( test) ]
378
- pub ( super ) fn from_raw ( buf : & mut [ u8 ] , desc_size : usize ) -> Self {
379
- let mem = MemoryMapBackingMemory :: from_slice ( buf) ;
380
- Self :: from_initialized_mem (
381
- mem,
382
- MemoryMapMeta {
383
- map_size : buf. len ( ) ,
384
- desc_size,
385
- map_key : MemoryMapKey ( 0 ) ,
386
- desc_version : MemoryDescriptor :: VERSION ,
387
- } ,
388
- )
374
+ MemoryMapOwned { buf, meta, len }
389
375
}
390
376
}
391
377
@@ -523,4 +509,22 @@ mod tests {
523
509
mmap. sort ( ) ;
524
510
assert ! ( mmap. is_sorted( ) ) ;
525
511
}
512
+
513
+ /// Basic sanity checks for the type [`MemoryMapOwned`].
514
+ #[ test]
515
+ fn memory_map_owned ( ) {
516
+ let mut memory = new_mmap_memory ( ) ;
517
+ let ( mmap, meta) = mmap_raw ( & mut memory) ;
518
+ let mmap = MemoryMapBackingMemory :: from_slice ( mmap) ;
519
+ let mut mmap = MemoryMapOwned :: from_initialized_mem ( mmap, meta) ;
520
+
521
+ assert_eq ! ( mmap. entries( ) . count( ) , 3 ) ;
522
+ assert_eq ! (
523
+ mmap. entries( ) . copied( ) . collect:: <Vec <_>>( ) . as_slice( ) ,
524
+ & BASE_MMAP_UNSORTED
525
+ ) ;
526
+ assert ! ( !mmap. is_sorted( ) ) ;
527
+ mmap. sort ( ) ;
528
+ assert ! ( mmap. is_sorted( ) ) ;
529
+ }
526
530
}
0 commit comments