From 1b26bcff2d4dee52fd40a8164519073ef1dc8f2a Mon Sep 17 00:00:00 2001 From: Wenbo Hou Date: Tue, 15 Sep 2026 15:25:27 +0800 Subject: [PATCH 1/2] UefiTestingPkg: Remove unused CpuExceptionHandlerLib The SMM paging audit application does not use CpuExceptionHandlerLib. Including the unused library causes a duplicate gDxeMps definition when building with BUILD_UNIT_TESTS enabled. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 6d8584ab-2b5c-4299-91bb-d928dbef5e10 Signed-off-by: Wenbo Hou --- .../AuditTests/PagingAudit/UEFI/SmmPagingAuditTestApp.inf | 1 - 1 file changed, 1 deletion(-) diff --git a/UefiTestingPkg/AuditTests/PagingAudit/UEFI/SmmPagingAuditTestApp.inf b/UefiTestingPkg/AuditTests/PagingAudit/UEFI/SmmPagingAuditTestApp.inf index 262431b2ba..ffeb996c9f 100644 --- a/UefiTestingPkg/AuditTests/PagingAudit/UEFI/SmmPagingAuditTestApp.inf +++ b/UefiTestingPkg/AuditTests/PagingAudit/UEFI/SmmPagingAuditTestApp.inf @@ -39,7 +39,6 @@ DebugLib UefiBootServicesTableLib UefiLib - CpuExceptionHandlerLib CpuLib HobLib PeCoffGetEntryPointLib From 56d7f98311eb092dd7d726619f0a0592bb101952 Mon Sep 17 00:00:00 2001 From: Michael Kubacki Date: Tue, 1 Sep 2026 10:04:53 +0000 Subject: [PATCH 2/2] Update patina from v22 to v23 Includes integration changes for path updates in the patina crate that changed how GUID and protocols are exported. Signed-off-by: Michael Kubacki --- .../Crates/RustAdvancedLoggerDxe/src/lib.rs | 5 +-- Cargo.toml | 2 +- .../Crates/MuTelemetryHelperLib/src/lib.rs | 44 +++++++++++-------- 3 files changed, 28 insertions(+), 23 deletions(-) diff --git a/AdvLoggerPkg/Crates/RustAdvancedLoggerDxe/src/lib.rs b/AdvLoggerPkg/Crates/RustAdvancedLoggerDxe/src/lib.rs index 4d287e54c8..a1e1eda0eb 100644 --- a/AdvLoggerPkg/Crates/RustAdvancedLoggerDxe/src/lib.rs +++ b/AdvLoggerPkg/Crates/RustAdvancedLoggerDxe/src/lib.rs @@ -39,8 +39,7 @@ use core::{ ptr, sync::atomic::{AtomicPtr, Ordering}, }; -use patina::BinaryGuid; -use patina::{boot_services, uefi_protocol::ProtocolInterface}; +use patina::{BinaryGuid, protocol::ProtocolInterface, uefi::boot_services}; use r_efi::efi; //Global static logger instance - this is a singleton. @@ -248,7 +247,7 @@ mod tests { DEBUG_WARN, LOGGER, debug, }; use core::{slice::from_raw_parts, sync::atomic::Ordering}; - use patina::boot_services::MockBootServices; + use patina::uefi::boot_services::MockBootServices; use std::{println, str}; static ADVANCED_LOGGER_INSTANCE: AdvancedLoggerProtocolInterface = AdvancedLoggerProtocolInterface { signature: 0, version: 0, write_log: mock_advanced_logger_write }; diff --git a/Cargo.toml b/Cargo.toml index 926e121290..e6225a6bdc 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -20,7 +20,7 @@ mockall = {version = "0.14.0"} MuTelemetryHelperLib = { path = "MsWheaPkg/Crates/MuTelemetryHelperLib" } num-derive = { version = "0.5", default-features = false } num-traits = { version = "0.2", default-features = false } -patina = { version = "22" } +patina = { version = "23" } r-efi = "^7" RustAdvancedLoggerDxe = { path = "AdvLoggerPkg/Crates/RustAdvancedLoggerDxe" } RustBootServicesAllocatorDxe = { path = "MsCorePkg/Crates/RustBootServicesAllocatorDxe" } diff --git a/MsWheaPkg/Crates/MuTelemetryHelperLib/src/lib.rs b/MsWheaPkg/Crates/MuTelemetryHelperLib/src/lib.rs index a796635abf..0a0603dae5 100644 --- a/MsWheaPkg/Crates/MuTelemetryHelperLib/src/lib.rs +++ b/MsWheaPkg/Crates/MuTelemetryHelperLib/src/lib.rs @@ -34,11 +34,14 @@ //! #![cfg_attr(target_os = "uefi", no_std)] -use patina::boot_services::{BootServices, StandardBootServices}; -use patina::pi::protocols::status_code::{EfiStatusCodeType, EfiStatusCodeValue}; -use patina::pi::status_code::{EFI_ERROR_CODE, EFI_ERROR_MAJOR, EFI_ERROR_MINOR}; -use patina::uefi_protocol::status_code::StatusCodeRuntimeProtocol; -use patina::{base::guid::BinaryGuid, guids}; +use patina::{ + BinaryGuid, Guid, guid, + pi::{ + protocol::status_code::{EfiStatusCodeType, EfiStatusCodeValue, StatusCodeProtocol}, + status_code::{EFI_ERROR_CODE, EFI_ERROR_MAJOR, EFI_ERROR_MINOR}, + }, + uefi::boot_services::{BootServices, StandardBootServices}, +}; use r_efi::efi; static BOOT_SERVICES: StandardBootServices = StandardBootServices::new_uninit(); @@ -130,15 +133,15 @@ fn log_telemetry_internal( if is_fatal { MS_WHEA_ERROR_STATUS_TYPE_FATAL } else { MS_WHEA_ERROR_STATUS_TYPE_INFO }; let error_data = MsWheaRscInternalErrorData { - library_id: *library_id.unwrap_or(guids::ZERO.as_efi_guid()), - ihv_sharing_guid: *ihv_id.unwrap_or(guids::ZERO.as_efi_guid()), + library_id: *library_id.unwrap_or(&Guid::ZERO.to_efi_guid()), + ihv_sharing_guid: *ihv_id.unwrap_or(&Guid::ZERO.to_efi_guid()), additional_info1: extra_data1, additional_info2: extra_data2, }; - let protocol = unsafe { boot_services.locate_protocol::(None)? }; + let protocol = unsafe { boot_services.locate_protocol::(None)? }; - let caller_id = component_id.unwrap_or(guids::CALLER_ID.as_efi_guid()); + let caller_id = component_id.unwrap_or(guid::CALLER_ID.as_efi_guid()); protocol.report_status_code_with_data( status_code_type, @@ -157,17 +160,19 @@ pub fn init_telemetry(efi_boot_services: *mut efi::BootServices) { #[cfg(test)] mod test { - use patina::base::guid::BinaryGuid; - use patina::boot_services::MockBootServices; - use patina::pi::protocols::{ - status_code, - status_code::{EfiStatusCodeData, EfiStatusCodeType, EfiStatusCodeValue}, + use patina::{ + BinaryGuid, + pi::protocol::{ + status_code, + status_code::{EfiStatusCodeData, EfiStatusCodeType, EfiStatusCodeValue}, + }, + uefi::boot_services::MockBootServices, }; use r_efi::efi; use crate::{MS_WHEA_ERROR_STATUS_TYPE_FATAL, MsWheaRscInternalErrorData, log_telemetry_internal}; use core::mem::size_of; - use patina::uefi_protocol::status_code::StatusCodeRuntimeProtocol; + use patina::pi::protocol::status_code::StatusCodeProtocol; const DATA_SIZE: usize = size_of::() + size_of::(); const MOCK_CALLER_ID: efi::Guid = BinaryGuid::from_string("d0d1d2d3-d4d5-d6d7-d8d9-dadbdcdddedf").into_inner(); @@ -186,9 +191,9 @@ mod test { if r#type == MS_WHEA_ERROR_STATUS_TYPE_FATAL { efi::Status::SUCCESS } else { efi::Status::INVALID_PARAMETER } } - static MOCK_STATUS_CODE_RUNTIME_INTERFACE: status_code::Protocol = { + static MOCK_STATUS_CODE_RUNTIME_INTERFACE: status_code::StatusCodeProtocol = { let f: status_code::ReportStatusCode = mock_report_status_code; - status_code::Protocol { report_status_code: f } + status_code::StatusCodeProtocol { report_status_code: f } }; #[test] @@ -197,7 +202,8 @@ mod test { mock_boot_services.expect_locate_protocol().returning(|registration| unsafe { assert_eq!(registration, None); - Ok((&MOCK_STATUS_CODE_RUNTIME_INTERFACE as *const status_code::Protocol as *mut StatusCodeRuntimeProtocol) + Ok((&MOCK_STATUS_CODE_RUNTIME_INTERFACE as *const status_code::StatusCodeProtocol + as *mut StatusCodeProtocol) .as_mut() .unwrap()) }); @@ -237,7 +243,7 @@ mod test { fn test_protocol_not_found() { let mut mock_boot_services: MockBootServices = MockBootServices::new(); - mock_boot_services.expect_locate_protocol::().returning(|registration| { + mock_boot_services.expect_locate_protocol::().returning(|registration| { assert_eq!(registration, None); //Simulate "marker protocol" without an Interface Err(efi::Status::NOT_FOUND)