From: Ruiyu Ni <ruiyu.ni@intel.com>
To: edk2-devel@lists.01.org
Cc: Star Zeng <star.zeng@intel.com>, Liming Gao <liming.gao@intel.com>
Subject: [PATCH v2 2/2] MdeModulePkg/NullMemoryTest: Handle more reliable memory
Date: Sat, 10 Feb 2018 22:41:15 +0800 [thread overview]
Message-ID: <20180210144115.432040-3-ruiyu.ni@intel.com> (raw)
In-Reply-To: <20180210144115.432040-1-ruiyu.ni@intel.com>
Today's implementation converts the untested more reliable memory
from reserved GCD type to system memory GCD type.
Though it doesn't impact the return result of gBS->GetMemoryMap().
But it impacts the return result of gDS->GetMemorySpaceDescriptor().
The patch fixes the bug to convert the untested more reliable memory
from reserved GCD type to more reliable memory GCD type.
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Ruiyu Ni <ruiyu.ni@intel.com>
Cc: Star Zeng <star.zeng@intel.com>
Cc: Liming Gao <liming.gao@intel.com>
---
.../MemoryTest/NullMemoryTestDxe/NullMemoryTest.c | 75 +++++++++++++---------
1 file changed, 46 insertions(+), 29 deletions(-)
diff --git a/MdeModulePkg/Universal/MemoryTest/NullMemoryTestDxe/NullMemoryTest.c b/MdeModulePkg/Universal/MemoryTest/NullMemoryTestDxe/NullMemoryTest.c
index 9c9849c776..11af8ea77f 100644
--- a/MdeModulePkg/Universal/MemoryTest/NullMemoryTestDxe/NullMemoryTest.c
+++ b/MdeModulePkg/Universal/MemoryTest/NullMemoryTestDxe/NullMemoryTest.c
@@ -1,7 +1,7 @@
/** @file
Implementation of Generic Memory Test Protocol which does not perform real memory test.
-Copyright (c) 2006 - 2008, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License
which accompanies this distribution. The full text of the license may be found at
@@ -58,6 +58,38 @@ GenericMemoryTestEntryPoint (
return EFI_SUCCESS;
}
+/**
+ Convert the memory descriptor to tested.
+
+ @param Descriptor Pointer to EFI_GCD_MEMORY_SPACE_DESCRIPTOR
+
+ @retval EFI_SUCCESS The memory descriptor is converted to tested.
+ @retval others Error happens.
+**/
+EFI_STATUS
+ConvertToTestedMemory (
+ IN CONST EFI_GCD_MEMORY_SPACE_DESCRIPTOR *Descriptor
+ )
+{
+ EFI_STATUS Status;
+ Status = gDS->RemoveMemorySpace (
+ Descriptor->BaseAddress,
+ Descriptor->Length
+ );
+ if (!EFI_ERROR (Status)) {
+ Status = gDS->AddMemorySpace (
+ ((Descriptor->Capabilities & EFI_MEMORY_MORE_RELIABLE) == EFI_MEMORY_MORE_RELIABLE) ?
+ EfiGcdMemoryTypeMoreReliable : EfiGcdMemoryTypeSystemMemory,
+ Descriptor->BaseAddress,
+ Descriptor->Length,
+ Descriptor->Capabilities &~
+ (EFI_MEMORY_PRESENT | EFI_MEMORY_INITIALIZED | EFI_MEMORY_TESTED | EFI_MEMORY_RUNTIME)
+ );
+ }
+ return Status;
+}
+
+
/**
Initialize the generic memory test.
@@ -83,6 +115,7 @@ InitializeMemoryTest (
OUT BOOLEAN *RequireSoftECCInit
)
{
+ EFI_STATUS Status;
UINTN NumberOfDescriptors;
EFI_GCD_MEMORY_SPACE_DESCRIPTOR *MemorySpaceMap;
UINTN Index;
@@ -96,22 +129,12 @@ InitializeMemoryTest (
//
// For those reserved memory that have not been tested, simply promote to system memory.
//
- gDS->RemoveMemorySpace (
- MemorySpaceMap[Index].BaseAddress,
- MemorySpaceMap[Index].Length
- );
-
- gDS->AddMemorySpace (
- EfiGcdMemoryTypeSystemMemory,
- MemorySpaceMap[Index].BaseAddress,
- MemorySpaceMap[Index].Length,
- MemorySpaceMap[Index].Capabilities &~
- (EFI_MEMORY_PRESENT | EFI_MEMORY_INITIALIZED | EFI_MEMORY_TESTED | EFI_MEMORY_RUNTIME)
- );
-
+ Status = ConvertToTestedMemory (&MemorySpaceMap[Index]);
+ ASSERT_EFI_ERROR (Status);
mTestedSystemMemory += MemorySpaceMap[Index].Length;
mTotalSystemMemory += MemorySpaceMap[Index].Length;
- } else if (MemorySpaceMap[Index].GcdMemoryType == EfiGcdMemoryTypeSystemMemory) {
+ } else if ((MemorySpaceMap[Index].GcdMemoryType == EfiGcdMemoryTypeSystemMemory) ||
+ (MemorySpaceMap[Index].GcdMemoryType == EfiGcdMemoryTypeMoreReliable)) {
mTotalSystemMemory += MemorySpaceMap[Index].Length;
}
}
@@ -204,22 +227,16 @@ EFI_STATUS
EFIAPI
GenCompatibleRangeTest (
IN EFI_GENERIC_MEMORY_TEST_PROTOCOL *This,
- IN EFI_PHYSICAL_ADDRESS StartAddress,
- IN UINT64 Length
+ IN EFI_PHYSICAL_ADDRESS StartAddress,
+ IN UINT64 Length
)
{
+ EFI_STATUS Status;
EFI_GCD_MEMORY_SPACE_DESCRIPTOR Descriptor;
- gDS->GetMemorySpaceDescriptor (StartAddress, &Descriptor);
-
- gDS->RemoveMemorySpace (StartAddress, Length);
-
- gDS->AddMemorySpace (
- EfiGcdMemoryTypeSystemMemory,
- StartAddress,
- Length,
- Descriptor.Capabilities &~(EFI_MEMORY_PRESENT | EFI_MEMORY_INITIALIZED | EFI_MEMORY_TESTED | EFI_MEMORY_RUNTIME)
- );
-
- return EFI_SUCCESS;
+ Status = gDS->GetMemorySpaceDescriptor (StartAddress, &Descriptor);
+ if (!EFI_ERROR (Status)) {
+ Status = ConvertToTestedMemory (&Descriptor);
+ }
+ return Status;
}
--
2.16.1.windows.1
next prev parent reply other threads:[~2018-02-10 14:35 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-02-10 14:41 [PATCH v2 0/2] Update memory test driver to handle more reliable memory Ruiyu Ni
2018-02-10 14:41 ` [PATCH v2 1/2] MdeModulePkg/GenericMemoryTest: Handle " Ruiyu Ni
2018-02-10 14:41 ` Ruiyu Ni [this message]
2018-02-27 5:15 ` [PATCH v2 0/2] Update memory test driver to handle " Gao, Liming
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=20180210144115.432040-3-ruiyu.ni@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