Hi Ard,
Do we have special reason of not cleaning the allocated pages? If not
having, I think it is safer to use "clean and invalidate".
Thanks.
Heyi
On 11/20/2015 02:25 PM, Ard Biesheuvel wrote:
On 20 November 2015 at 06:32, Heyi Guo <[email protected]> wrote:
It is implied that the memory returned from UncachedMemoryAllocationLib
should have cache cleaned. So we clean and invalidate memory range after
changing memory attribute to uncached.
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Heyi Guo <[email protected]>
Cc: Leif Lindholm <[email protected]>
Cc: Ard Biesheuvel <[email protected]>
---
.../Library/UncachedMemoryAllocationLib/UncachedMemoryAllocationLib.c | 3 +++
.../UncachedMemoryAllocationLib/UncachedMemoryAllocationLib.inf | 1 +
2 files changed, 4 insertions(+)
diff --git
a/ArmPkg/Library/UncachedMemoryAllocationLib/UncachedMemoryAllocationLib.c
b/ArmPkg/Library/UncachedMemoryAllocationLib/UncachedMemoryAllocationLib.c
index b859f63..3242579 100644
--- a/ArmPkg/Library/UncachedMemoryAllocationLib/UncachedMemoryAllocationLib.c
+++ b/ArmPkg/Library/UncachedMemoryAllocationLib/UncachedMemoryAllocationLib.c
@@ -25,6 +25,7 @@
#include <Library/PcdLib.h>
#include <Library/ArmLib.h>
#include <Library/DxeServicesTableLib.h>
+#include <Library/CacheMaintenanceLib.h>
VOID *
UncachedInternalAllocatePages (
@@ -165,6 +166,8 @@ AllocatePagesFromList (
return Status;
}
+ WriteBackInvalidateDataCacheRange ((VOID *)(UINTN)Memory, EFI_PAGES_TO_SIZE
(Pages));
+
I think invalidate only should be fine here, since it is a new
allocation, and we are allocating full pages. Since the architectural
max value of CWG is 2 KB, we could never end up discarding data that
is not covered by the allocation itself.
NewNode = AllocatePool (sizeof (FREE_PAGE_NODE));
if (NewNode == NULL) {
ASSERT (FALSE);
diff --git
a/ArmPkg/Library/UncachedMemoryAllocationLib/UncachedMemoryAllocationLib.inf
b/ArmPkg/Library/UncachedMemoryAllocationLib/UncachedMemoryAllocationLib.inf
index 0a0b6cb..d7a0f2f 100644
--- a/ArmPkg/Library/UncachedMemoryAllocationLib/UncachedMemoryAllocationLib.inf
+++ b/ArmPkg/Library/UncachedMemoryAllocationLib/UncachedMemoryAllocationLib.inf
@@ -38,6 +38,7 @@
MemoryAllocationLib
PcdLib
DxeServicesTableLib
+ CacheMaintenanceLib
[Pcd]
gArmTokenSpaceGuid.PcdArmFreeUncachedMemorySizeThreshold
--
2.6.2
_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel