From: "Jordan Justen" <jordan.l.justen@intel.com>
To: devel@edk2.groups.io
Cc: Jordan Justen <jordan.l.justen@intel.com>,
Jian J Wang <jian.j.wang@intel.com>, Hao Wu <hao.a.wu@intel.com>,
Ray Ni <ray.ni@intel.com>, Star Zeng <star.zeng@intel.com>
Subject: [PATCH v2 6/6] MdeModulePkg/Core/Pei: Use code path for assembly based TemporaryRamSupport
Date: Wed, 10 Apr 2019 01:40:00 -0700 [thread overview]
Message-ID: <20190410084000.19660-7-jordan.l.justen@intel.com> (raw)
In-Reply-To: <20190410084000.19660-1-jordan.l.justen@intel.com>
There is potential problem with PEI Core's usage of the
TemporaryRamSupport PPI. The issue is described in the previous patch:
"MdeModulePkg/Core/Pei: Add interface for assembly based TemporaryRamSupport"
Now that assembly paths are available for all supported architectures,
we can make use of the assembly based PEI Core code path.
Signed-off-by: Jordan Justen <jordan.l.justen@intel.com>
Cc: Jian J Wang <jian.j.wang@intel.com>
Cc: Hao Wu <hao.a.wu@intel.com>
Cc: Ray Ni <ray.ni@intel.com>
Cc: Star Zeng <star.zeng@intel.com>
---
MdeModulePkg/Core/Pei/Dispatcher/Dispatcher.c | 59 ++++++++++++-------
1 file changed, 38 insertions(+), 21 deletions(-)
diff --git a/MdeModulePkg/Core/Pei/Dispatcher/Dispatcher.c b/MdeModulePkg/Core/Pei/Dispatcher/Dispatcher.c
index ba2fd0cae1..116124d6f8 100644
--- a/MdeModulePkg/Core/Pei/Dispatcher/Dispatcher.c
+++ b/MdeModulePkg/Core/Pei/Dispatcher/Dispatcher.c
@@ -682,6 +682,7 @@ PeiCheckAndSwitchStack (
EFI_PHYSICAL_ADDRESS TempBase2;
UINTN TempSize2;
UINTN Index;
+ PEI_CORE_TEMPORARY_RAM_TRANSITION TempRamTransitionData;
PeiServices = (CONST EFI_PEI_SERVICES **) &Private->Ps;
@@ -816,30 +817,20 @@ PeiCheckAndSwitchStack (
Private = (PEI_CORE_INSTANCE *)((UINTN)(VOID *)Private - StackOffset);
}
- //
- // Temporary Ram Support PPI is provided by platform, it will copy
- // temporary memory to permanent memory and do stack switching.
- // After invoking Temporary Ram Support PPI, the following code's
- // stack is in permanent memory.
- //
- TemporaryRamSupportPpi->TemporaryRamMigration (
- PeiServices,
- TemporaryRamBase,
- (EFI_PHYSICAL_ADDRESS)(UINTN)(TopOfNewStack - TemporaryStackSize),
- TemporaryRamSize
- );
-
- //
- // Migrate memory pages allocated in pre-memory phase.
- // It could not be called before calling TemporaryRamSupportPpi->TemporaryRamMigration()
- // as the migrated memory pages may be overridden by TemporaryRamSupportPpi->TemporaryRamMigration().
- //
- MigrateMemoryPages (Private, TRUE);
+ TempRamTransitionData.TemporaryRamMigration =
+ TemporaryRamSupportPpi->TemporaryRamMigration;
+ TempRamTransitionData.PeiServices = PeiServices;
+ TempRamTransitionData.TemporaryMemoryBase = TemporaryRamBase;
+ TempRamTransitionData.PermanentMemoryBase =
+ (EFI_PHYSICAL_ADDRESS)(UINTN)(TopOfNewStack - TemporaryStackSize);
+ TempRamTransitionData.CopySize = TemporaryRamSize;
+ TempRamTransitionData.Private = Private;
+ TempRamTransitionData.SecCoreData = SecCoreData;
//
- // Entry PEI Phase 2
+ // Migrate Temporary RAM and enter PEI Phase 2
//
- PeiCore (SecCoreData, NULL, Private);
+ PeiTemporaryRamMigration(&TempRamTransitionData);
} else {
//
// Migrate memory pages allocated in pre-memory phase.
@@ -952,6 +943,32 @@ PeiCheckAndSwitchStack (
}
}
+VOID
+EFIAPI
+PeiTemporaryRamMigrated (
+ IN VOID *CallbackContext
+ )
+{
+ PEI_CORE_TEMPORARY_RAM_TRANSITION *TempRamTransitionData =
+ (PEI_CORE_TEMPORARY_RAM_TRANSITION*)CallbackContext;
+
+ //
+ // Migrate memory pages allocated in pre-memory phase.
+ // It could not be called before calling TemporaryRamSupportPpi->TemporaryRamMigration()
+ // as the migrated memory pages may be overridden by TemporaryRamSupportPpi->TemporaryRamMigration().
+ //
+ MigrateMemoryPages (TempRamTransitionData->Private, TRUE);
+
+ //
+ // Entry PEI Phase 2
+ //
+ PeiCore (
+ TempRamTransitionData->SecCoreData,
+ NULL,
+ TempRamTransitionData->Private
+ );
+}
+
/**
Conduct PEIM dispatch.
--
2.20.1
next prev parent reply other threads:[~2019-04-10 8:41 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-04-10 8:39 [PATCH v2 0/6] Fix PEI Core issue during TemporaryRamMigration Jordan Justen
2019-04-10 8:39 ` [PATCH v2 1/6] MdeModulePkg/Core/Pei: Add interface for assembly based TemporaryRamSupport Jordan Justen
2019-04-10 8:39 ` [PATCH v2 2/6] MdeModulePkg/Core/Pei: Add AARCH64 assembly for TemporaryRamMigration Jordan Justen
2019-04-10 8:39 ` [PATCH v2 3/6] MdeModulePkg/Core/Pei: Add ARM " Jordan Justen
2019-04-10 8:39 ` [PATCH v2 4/6] MdeModulePkg/Core/Pei: Add IA32 " Jordan Justen
2019-04-10 8:39 ` [PATCH v2 5/6] MdeModulePkg/Core/Pei: Add X64 " Jordan Justen
2019-04-10 8:40 ` Jordan Justen [this message]
2019-04-10 16:41 ` [edk2-devel] [PATCH v2 0/6] Fix PEI Core issue during TemporaryRamMigration Ard Biesheuvel
2019-04-10 18:28 ` Laszlo Ersek
2019-04-10 18:31 ` Ard Biesheuvel
2019-04-10 18:54 ` Jordan Justen
2019-04-10 17:26 ` Laszlo Ersek
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190410084000.19660-7-jordan.l.justen@intel.com \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox