File tree Expand file tree Collapse file tree 3 files changed +15
-3
lines changed Expand file tree Collapse file tree 3 files changed +15
-3
lines changed Original file line number Diff line number Diff line change @@ -10,7 +10,7 @@ extern crate alloc;
1010
1111use alloc:: string:: ToString ;
1212use alloc:: vec:: Vec ;
13- use uefi:: mem:: memory_map:: { MemoryMap , MemoryType } ;
13+ use uefi:: mem:: memory_map:: MemoryMap ;
1414use uefi:: prelude:: * ;
1515use uefi:: proto:: console:: serial:: Serial ;
1616use uefi:: proto:: device_path:: build:: { self , DevicePathBuilder } ;
@@ -209,7 +209,7 @@ fn shutdown() -> ! {
209209 info ! ( "Testing complete, exiting boot services..." ) ;
210210
211211 // Exit boot services as a proof that it works :)
212- let mmap = unsafe { uefi:: boot:: exit_boot_services ( MemoryType :: LOADER_DATA ) } ;
212+ let mmap = unsafe { uefi:: boot:: exit_boot_services ( None ) } ;
213213
214214 info ! ( "Memory Map:" ) ;
215215 for desc in mmap. entries ( ) {
Original file line number Diff line number Diff line change 1616 ` &self ` .
1717- ** Breaking:** The ` pxe::Mode ` struct is now opaque. Use method calls to access
1818 mode data instead of direct field access.
19+ - ** Breaking:** ` exit_boot_services ` now consumes a ` Option<MemoryType> ` which
20+ defaults to the recommended value of ` MemoryType::LOADER_DATA ` .
1921- ` boot::memory_map() ` will never return ` Status::BUFFER_TOO_SMALL ` from now on,
2022 as this is considered a hard internal error where users can't do anything
2123 about it anyway. It will panic instead.
Original file line number Diff line number Diff line change @@ -1283,6 +1283,13 @@ unsafe fn get_memory_map_and_exit_boot_services(buf: &mut [u8]) -> Result<Memory
12831283/// `global_allocator` feature is enabled, attempting to use the allocator
12841284/// after exiting boot services will panic.
12851285///
1286+ /// # Arguments
1287+ /// - `custom_memory_type`: The [`MemoryType`] for the UEFI allocation that will
1288+ /// store the final memory map. If you pass `None`, this defaults to the
1289+ /// recommended default value of [`MemoryType::LOADER_DATA`]. If you want a
1290+ /// specific memory region for the memory map, you can pass the desired
1291+ /// [`MemoryType`].
1292+ ///
12861293/// # Safety
12871294///
12881295/// The caller is responsible for ensuring that no references to
@@ -1313,7 +1320,10 @@ unsafe fn get_memory_map_and_exit_boot_services(buf: &mut [u8]) -> Result<Memory
13131320/// [`Output`]: crate::proto::console::text::Output
13141321/// [`PoolString`]: crate::proto::device_path::text::PoolString
13151322#[ must_use]
1316- pub unsafe fn exit_boot_services ( memory_type : MemoryType ) -> MemoryMapOwned {
1323+ pub unsafe fn exit_boot_services ( custom_memory_type : Option < MemoryType > ) -> MemoryMapOwned {
1324+ // LOADER_DATA is the default and also used by the Linux kernel:
1325+ // https://elixir.bootlin.com/linux/v6.13.7/source/drivers/firmware/efi/libstub/mem.c#L24
1326+ let memory_type = custom_memory_type. unwrap_or ( MemoryType :: LOADER_DATA ) ;
13171327 crate :: helpers:: exit ( ) ;
13181328
13191329 let mut buf = MemoryMapBackingMemory :: new ( memory_type) . expect ( "Failed to allocate memory" ) ;
You can’t perform that action at this time.
0 commit comments