@@ -63,36 +63,47 @@ fn alloc_alignment() {
63
63
fn memory_map ( bt : & BootServices ) {
64
64
info ! ( "Testing memory map functions" ) ;
65
65
66
- let mut memory_map = bt
67
- . memory_map ( MemoryType :: LOADER_DATA )
68
- . expect ( "Failed to retrieve UEFI memory map" ) ;
66
+ /*
67
+ // Useful to check of OOM happens.
68
+ let mut maps = Vec::new();
69
+ for _ in 0..100000_u64 {
70
+ maps.push(bt.memory_map(MemoryType::LOADER_DATA).unwrap())
71
+ }
72
+ let _a = maps;*/
73
+
74
+ // Ensure that the memory of the UEFI memory map is always freed again.
75
+ for _ in 0 ..100000 {
76
+ let mut memory_map = bt
77
+ . memory_map ( MemoryType :: LOADER_DATA )
78
+ . expect ( "Failed to retrieve UEFI memory map" ) ;
69
79
70
- memory_map. sort ( ) ;
80
+ memory_map. sort ( ) ;
71
81
72
- // Collect the descriptors into a vector
73
- let descriptors = memory_map. entries ( ) . copied ( ) . collect :: < Vec < _ > > ( ) ;
82
+ // Collect the descriptors into a vector
83
+ let descriptors = memory_map. entries ( ) . copied ( ) . collect :: < Vec < _ > > ( ) ;
74
84
75
- // Ensured we have at least one entry.
76
- // Real memory maps usually have dozens of entries.
77
- assert ! ( !descriptors. is_empty( ) , "Memory map is empty" ) ;
85
+ // Ensured we have at least one entry.
86
+ // Real memory maps usually have dozens of entries.
87
+ assert ! ( !descriptors. is_empty( ) , "Memory map is empty" ) ;
78
88
79
- let mut curr_value = descriptors[ 0 ] ;
89
+ let mut curr_value = descriptors[ 0 ] ;
80
90
81
- for value in descriptors. iter ( ) . skip ( 1 ) {
82
- if value. phys_start <= curr_value. phys_start {
83
- panic ! ( "memory map sorting failed" ) ;
91
+ for value in descriptors. iter ( ) . skip ( 1 ) {
92
+ if value. phys_start <= curr_value. phys_start {
93
+ panic ! ( "memory map sorting failed" ) ;
94
+ }
95
+ curr_value = * value;
84
96
}
85
- curr_value = * value;
86
- }
87
97
88
- // This is pretty much a sanity test to ensure returned memory isn't filled with random values.
89
- let first_desc = descriptors[ 0 ] ;
98
+ // This is pretty much a sanity test to ensure returned memory isn't filled with random values.
99
+ let first_desc = descriptors[ 0 ] ;
90
100
91
- #[ cfg( target_arch = "x86_64" ) ]
92
- {
93
- let phys_start = first_desc. phys_start ;
94
- assert_eq ! ( phys_start, 0 , "Memory does not start at address 0" ) ;
101
+ #[ cfg( target_arch = "x86_64" ) ]
102
+ {
103
+ let phys_start = first_desc. phys_start ;
104
+ assert_eq ! ( phys_start, 0 , "Memory does not start at address 0" ) ;
105
+ }
106
+ let page_count = first_desc. page_count ;
107
+ assert ! ( page_count != 0 , "Memory map entry has zero size" ) ;
95
108
}
96
- let page_count = first_desc. page_count ;
97
- assert ! ( page_count != 0 , "Memory map entry has zero size" ) ;
98
109
}
0 commit comments