v7.0.0
What's Changed
-
Add a minimum capacity for page\_pool @joschock (#213)
Change Details
## Description
Add a minimum capacity for the vector that tracks page addresses for the page pool.
This resolves an issue observed when a large allocation request is made to the EfiBootServicesDataAllocator (EBSDA). The following sequence can cause a re-entrant allocation on the EBSDA:
- A large allocation request (in the observed failure, copying a large FFS FV_IMAGE section to a Box on the Heap as part of processing FV) is made to the EBSDA. The allocation holds the lock while in progress.
- In the course of processing the allocation, an adjustment to the page table needs to be made, and preallocate_pages() is called
- The pre-allocated pages are added to the page_pool in the PagingAllocator.
- if the number of pre-allocated pages is larger than the current page_pool capacity, then Vec will re-allocate
- Reallocation attempts to acquire the lock on EBSDA which is already held in 1, above, resulting in a panic.
This change sets up the paging_pool with enough tracking capacity to track up to 1024 pre-allocated pages; this is sufficient to avoid the re-allocation in #4 above and avoid the issue.
- Impacts functionality?
- Impacts security?
- Breaking change?
- Includes tests?
- Includes documentation?
How This Was Tested
Previous FV processing code that was panic-ing no longer panics with this change.
Integration Instructions
N/A
</blockquote> <hr> </details>
-
rust-tool-cache: Gracefully handle rust-toolchain.toml issues @makubacki (#211)
Change Details
## Description
Print obvious errors if either the file is missing or the
[tools]section is not found.- Impacts functionality?
- Impacts security?
- Breaking change?
- Includes tests?
- Includes documentation?
How This Was Tested
- rust-toolchain.toml not present
- [tools] section missing in rust-toolchain.toml
- [tools] section present in rust-toolchain.toml
Integration Instructions
- N/A
-
Changes for internal crate publishing @makubacki (#209)
Change Details
## Description
Minor updates to ReleaseWorkflow.yml to handle publishing to an internal feed.
Add the feed info in .cargo/config.toml.
- Impacts functionality?
- Impacts security?
- Breaking change?
- Includes tests?
- Includes documentation?
How This Was Tested
Published crates from uefi-sdk.
- Worfklow Run: Publish Release
- Feed with published crates: UefiRust
Integration Instructions
- Repos using the workflow should be publishing to the
UefiRustfeed for now.
-
Adding CPU arch support for AArch64 @kuqin12 (#203)
Change Details
## Description
This change adds the CPU Arch protocol and hardware interrupt protocol for AArch64.
- Impacts functionality?
- Impacts security?
- Breaking change?
- Includes tests?
- Includes documentation?
How This Was Tested
This change was tested on QEMU SBSA platform. With a CpuDxe driver modified to only support memory attribute setting, the system can boot to UEFI shell.
Integration Instructions
InterruptBasesneeds to be initiated before handing off the core init.</blockquote> <hr> </details>
-
Move debugger initialization to after allocator @cfernald (#206)
Change Details
## Description
Moves the debugger to later after allocator initialization in preparation for coming debugger crate changes.
- Impacts functionality?
- Impacts security?
- Breaking change?
- Includes tests?
- Includes documentation?
How This Was Tested
Tested on Q35 with local debugger changes
Integration Instructions
N/A
</blockquote> <hr> </details>
-
Temporarily Comment out init\_performance\_lib @os-d (#204)
Change Details
## Description
Top of tree Q35 crashes with init_performance_lib, as qemu64 does not support invtsc, resulting in a divide by zero error. Other cpu models crash the system in various other ways. This is commented out for now to unblock development while other approaches are considered.
- Impacts functionality?
- Impacts security?
- Breaking change?
- Includes tests?
- Includes documentation?
How This Was Tested
Tested by booting Q35 to Windows.
Integration Instructions
N/A.
</blockquote> <hr> </details>
⚠️ Breaking Changes
-
[REBASE \& FF] Use the paging Crate @os-d (#200)
Change Details
## Description
This PR includes the changes required to move DXE Core to the paging crate. Note, it depends on PRs into most of the other Rust repos we have, so Cargo.toml is not updated with new versions yet, that will come as the other PRs are merged. Tests and documentation will be updated in this PR before it is ready to check in. It also needs to be tested on real hardware.
Rust-y reviews are welcome (why didn't you use this simple function or rewrite it this way?)
- Impacts functionality?
- Impacts security?
- Breaking change?
- Includes tests?
- Includes documentation?
How This Was Tested
Tested by booting Q35 to Windows with the new MpDxe and no CpuDxe.
Integration Instructions
x86 platforms should drop CpuDxe and only include MpDxe (assuming they want MP services).
</blockquote> <hr> </details>
🔐 Security Impacting
-
[REBASE \& FF] Use the paging Crate @os-d (#200)
Change Details
## Description
This PR includes the changes required to move DXE Core to the paging crate. Note, it depends on PRs into most of the other Rust repos we have, so Cargo.toml is not updated with new versions yet, that will come as the other PRs are merged. Tests and documentation will be updated in this PR before it is ready to check in. It also needs to be tested on real hardware.
Rust-y reviews are welcome (why didn't you use this simple function or rewrite it this way?)
- Impacts functionality?
- Impacts security?
- Breaking change?
- Includes tests?
- Includes documentation?
How This Was Tested
Tested by booting Q35 to Windows with the new MpDxe and no CpuDxe.
Integration Instructions
x86 platforms should drop CpuDxe and only include MpDxe (assuming they want MP services).
</blockquote> <hr> </details>
Full Changelog: v6.1.0...v7.0.0