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

Reply via email to