From 3cab34a4bac4497a599439e61bf1a4e8b9b49288 Mon Sep 17 00:00:00 2001 From: Mikhail Krichanov Date: Fri, 18 Oct 2024 11:16:38 +0300 Subject: [PATCH] SysCall: Refactored ReturnToCore() for AARCH64, ARM. --- .../Dxe/SysCall/AARCH64/CoreBootServices.S | 8 +++-- .../Core/Dxe/SysCall/AARCH64/InitializeMsr.c | 18 ++++++----- .../Core/Dxe/SysCall/ARM/CoreBootServices.S | 8 +++-- .../Core/Dxe/SysCall/ARM/InitializeMsr.c | 31 ++++++++++++------- 4 files changed, 39 insertions(+), 26 deletions(-) diff --git a/MdeModulePkg/Core/Dxe/SysCall/AARCH64/CoreBootServices.S b/MdeModulePkg/Core/Dxe/SysCall/AARCH64/CoreBootServices.S index 8307e93392..3618257a82 100644 --- a/MdeModulePkg/Core/Dxe/SysCall/AARCH64/CoreBootServices.S +++ b/MdeModulePkg/Core/Dxe/SysCall/AARCH64/CoreBootServices.S @@ -113,11 +113,13 @@ ASM_FUNC(ArmCallRing3) // VOID // EFIAPI // ReturnToCore ( -// IN EFI_STATUS Status, -// IN UINTN CoreSp +// IN EFI_STATUS Status // ); +// +// (x0) Status +// (x1) mCoreSp //------------------------------------------------------------------------------ -ASM_FUNC(ReturnToCore) +ASM_FUNC(ArmReturnToCore) // Switch to Core Stack. mov sp, x1 // Restore registers and Stack. diff --git a/MdeModulePkg/Core/Dxe/SysCall/AARCH64/InitializeMsr.c b/MdeModulePkg/Core/Dxe/SysCall/AARCH64/InitializeMsr.c index 2ede70de1b..531a3d6bf3 100644 --- a/MdeModulePkg/Core/Dxe/SysCall/AARCH64/InitializeMsr.c +++ b/MdeModulePkg/Core/Dxe/SysCall/AARCH64/InitializeMsr.c @@ -26,11 +26,20 @@ ArmCallRing3 ( VOID EFIAPI -ReturnToCore ( +ArmReturnToCore ( IN EFI_STATUS Status, IN UINTN CoreSp ); +VOID +EFIAPI +ReturnToCore ( + IN EFI_STATUS Status + ) +{ + ArmReturnToCore (Status, mCoreSp); +} + STATIC EFI_STATUS EFIAPI @@ -43,13 +52,6 @@ SysCallBootService ( EFI_STATUS Status; EFI_PHYSICAL_ADDRESS Physical; - if (Type == SysCallReturnToCore) { - // - // TODO: Refactoring - // - ReturnToCore (*(EFI_STATUS *)CoreRbp, mCoreSp); - } - Status = CoreAllocatePages ( AllocateAnyPages, EfiRing3MemoryType, diff --git a/MdeModulePkg/Core/Dxe/SysCall/ARM/CoreBootServices.S b/MdeModulePkg/Core/Dxe/SysCall/ARM/CoreBootServices.S index d710ab8079..befe2d5f33 100644 --- a/MdeModulePkg/Core/Dxe/SysCall/ARM/CoreBootServices.S +++ b/MdeModulePkg/Core/Dxe/SysCall/ARM/CoreBootServices.S @@ -102,11 +102,13 @@ ASM_FUNC(ArmCallRing3) // VOID // EFIAPI // ReturnToCore ( -// IN EFI_STATUS Status, -// IN UINTN CoreSp +// IN EFI_STATUS Status // ); +// +// (r0) Status +// (r1) mCoreSp //------------------------------------------------------------------------------ -ASM_FUNC(ReturnToCore) +ASM_FUNC(ArmReturnToCore) // Switch to Core Stack. mov SP, R1 diff --git a/MdeModulePkg/Core/Dxe/SysCall/ARM/InitializeMsr.c b/MdeModulePkg/Core/Dxe/SysCall/ARM/InitializeMsr.c index 4e8c690116..7f68d92fb7 100644 --- a/MdeModulePkg/Core/Dxe/SysCall/ARM/InitializeMsr.c +++ b/MdeModulePkg/Core/Dxe/SysCall/ARM/InitializeMsr.c @@ -25,11 +25,20 @@ ArmCallRing3 ( VOID EFIAPI -ReturnToCore ( +ArmReturnToCore ( IN EFI_STATUS Status, IN UINTN CoreSp ); +VOID +EFIAPI +ReturnToCore ( + IN EFI_STATUS Status + ) +{ + ArmReturnToCore (Status, mCoreSp); +} + STATIC EFI_STATUS EFIAPI @@ -42,10 +51,6 @@ SysCallBootService ( EFI_STATUS Status; EFI_PHYSICAL_ADDRESS Physical; - if (Type == SysCallReturnToCore) { - ReturnToCore (*(EFI_STATUS *)CoreRbp, mCoreSp); - } - Status = CoreAllocatePages ( AllocateAnyPages, EfiRing3MemoryType, @@ -78,14 +83,16 @@ SysCallBootService ( (CORE_STACK *)CoreRbp, (RING3_STACK *)(UINTN)Physical ); + // + // TODO: Fix memory leak for ReturnToCore(). + // + CoreFreePages (Physical, EFI_SIZE_TO_PAGES (9 * sizeof (UINTN))); - CoreFreePages (Physical, EFI_SIZE_TO_PAGES (9 * sizeof (UINTN))); - - SetUefiImageMemoryAttributes ( - gUartBaseAddress, - EFI_PAGE_SIZE, - EFI_MEMORY_XP | EFI_MEMORY_USER - ); + SetUefiImageMemoryAttributes ( + gUartBaseAddress, + EFI_PAGE_SIZE, + EFI_MEMORY_XP | EFI_MEMORY_USER + ); return Status; }