public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
* [PATCH] ArmVirtPkg/ArmVirtMemoryInitPeiLib: avoid redundant cache invalidation
@ 2022-01-29 15:13 Ard Biesheuvel
  2022-01-31 12:22 ` Leif Lindholm
  2022-01-31 13:21 ` Alexander Graf
  0 siblings, 2 replies; 4+ messages in thread
From: Ard Biesheuvel @ 2022-01-29 15:13 UTC (permalink / raw)
  To: devel; +Cc: leif, sami.mujawar, Ard Biesheuvel, Alexander Graf

Alex reports that the cache invalidation performed by
ArmVirtMemoryInitPeiLib takes a non-negligible amount of time at boot.
This cache invalidation used to be necessary to avoid inconsistencies
between the CPU's cached and uncached views of the permanent PEI memory
region, given that the PEI phase is where the MMU gets enabled.

The only allocations done from permanent PEI memory with the MMU off are
pages used for page tables, and since commit 748fea6279ef
("ArmPkg/ArmMmuLib AARCH64: invalidate page tables before populating
them"), each of those is invalidated in the caches explicitly, for
reasons described in the patch's commit log. All other allocations done
in PEI are either from temporary PEI memory, which includes the stack,
or from permanent PEI memory but after the MMU has been enabled.

This means that the cache invalidation in ArmVirtMemoryInitPeiLib is no
longer necessary, and can simply be dropped.

Cc: Alexander Graf <agraf@csgraf.de>
Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
---
 .../ArmVirtMemoryInitPeiLib/ArmVirtMemoryInitPeiLib.c    | 9 ---------
 1 file changed, 9 deletions(-)

diff --git a/ArmVirtPkg/Library/ArmVirtMemoryInitPeiLib/ArmVirtMemoryInitPeiLib.c b/ArmVirtPkg/Library/ArmVirtMemoryInitPeiLib/ArmVirtMemoryInitPeiLib.c
index 022e13e762b6..98d90ad4200d 100644
--- a/ArmVirtPkg/Library/ArmVirtMemoryInitPeiLib/ArmVirtMemoryInitPeiLib.c
+++ b/ArmVirtPkg/Library/ArmVirtMemoryInitPeiLib/ArmVirtMemoryInitPeiLib.c
@@ -91,15 +91,6 @@ MemoryPeim (
       );
   }
 
-  //
-  // When running under virtualization, the PI/UEFI memory region may be
-  // clean but not invalidated in system caches or in lower level caches
-  // on other CPUs. So invalidate the region by virtual address, to ensure
-  // that the contents we put there with the caches and MMU off will still
-  // be visible after turning them on.
-  //
-  InvalidateDataCacheRange ((VOID *)(UINTN)UefiMemoryBase, UefiMemorySize);
-
   // Build Memory Allocation Hob
   InitMmu ();
 
-- 
2.30.2


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH] ArmVirtPkg/ArmVirtMemoryInitPeiLib: avoid redundant cache invalidation
  2022-01-29 15:13 [PATCH] ArmVirtPkg/ArmVirtMemoryInitPeiLib: avoid redundant cache invalidation Ard Biesheuvel
@ 2022-01-31 12:22 ` Leif Lindholm
  2022-01-31 13:21 ` Alexander Graf
  1 sibling, 0 replies; 4+ messages in thread
From: Leif Lindholm @ 2022-01-31 12:22 UTC (permalink / raw)
  To: Ard Biesheuvel; +Cc: devel, sami.mujawar, Alexander Graf

On Sat, Jan 29, 2022 at 16:13:46 +0100, Ard Biesheuvel wrote:
> Alex reports that the cache invalidation performed by
> ArmVirtMemoryInitPeiLib takes a non-negligible amount of time at boot.
> This cache invalidation used to be necessary to avoid inconsistencies
> between the CPU's cached and uncached views of the permanent PEI memory
> region, given that the PEI phase is where the MMU gets enabled.
> 
> The only allocations done from permanent PEI memory with the MMU off are
> pages used for page tables, and since commit 748fea6279ef
> ("ArmPkg/ArmMmuLib AARCH64: invalidate page tables before populating
> them"), each of those is invalidated in the caches explicitly, for
> reasons described in the patch's commit log. All other allocations done
> in PEI are either from temporary PEI memory, which includes the stack,
> or from permanent PEI memory but after the MMU has been enabled.
> 
> This means that the cache invalidation in ArmVirtMemoryInitPeiLib is no
> longer necessary, and can simply be dropped.
> 
> Cc: Alexander Graf <agraf@csgraf.de>
> Signed-off-by: Ard Biesheuvel <ardb@kernel.org>

Reviewed-by: Leif Lindholm <leif@nuviainc.com>

> ---
>  .../ArmVirtMemoryInitPeiLib/ArmVirtMemoryInitPeiLib.c    | 9 ---------
>  1 file changed, 9 deletions(-)
> 
> diff --git a/ArmVirtPkg/Library/ArmVirtMemoryInitPeiLib/ArmVirtMemoryInitPeiLib.c b/ArmVirtPkg/Library/ArmVirtMemoryInitPeiLib/ArmVirtMemoryInitPeiLib.c
> index 022e13e762b6..98d90ad4200d 100644
> --- a/ArmVirtPkg/Library/ArmVirtMemoryInitPeiLib/ArmVirtMemoryInitPeiLib.c
> +++ b/ArmVirtPkg/Library/ArmVirtMemoryInitPeiLib/ArmVirtMemoryInitPeiLib.c
> @@ -91,15 +91,6 @@ MemoryPeim (
>        );
>    }
>  
> -  //
> -  // When running under virtualization, the PI/UEFI memory region may be
> -  // clean but not invalidated in system caches or in lower level caches
> -  // on other CPUs. So invalidate the region by virtual address, to ensure
> -  // that the contents we put there with the caches and MMU off will still
> -  // be visible after turning them on.
> -  //
> -  InvalidateDataCacheRange ((VOID *)(UINTN)UefiMemoryBase, UefiMemorySize);
> -
>    // Build Memory Allocation Hob
>    InitMmu ();
>  
> -- 
> 2.30.2
> 

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] ArmVirtPkg/ArmVirtMemoryInitPeiLib: avoid redundant cache invalidation
  2022-01-29 15:13 [PATCH] ArmVirtPkg/ArmVirtMemoryInitPeiLib: avoid redundant cache invalidation Ard Biesheuvel
  2022-01-31 12:22 ` Leif Lindholm
@ 2022-01-31 13:21 ` Alexander Graf
  2022-02-25 16:48   ` Ard Biesheuvel
  1 sibling, 1 reply; 4+ messages in thread
From: Alexander Graf @ 2022-01-31 13:21 UTC (permalink / raw)
  To: Ard Biesheuvel, devel
  Cc: leif, sami.mujawar, Schander, Johanna 'Mimoja' Amelie


On 29.01.22 16:13, Ard Biesheuvel wrote:
> Alex reports that the cache invalidation performed by
> ArmVirtMemoryInitPeiLib takes a non-negligible amount of time at boot.
> This cache invalidation used to be necessary to avoid inconsistencies
> between the CPU's cached and uncached views of the permanent PEI memory
> region, given that the PEI phase is where the MMU gets enabled.
>
> The only allocations done from permanent PEI memory with the MMU off are
> pages used for page tables, and since commit 748fea6279ef
> ("ArmPkg/ArmMmuLib AARCH64: invalidate page tables before populating
> them"), each of those is invalidated in the caches explicitly, for
> reasons described in the patch's commit log. All other allocations done
> in PEI are either from temporary PEI memory, which includes the stack,
> or from permanent PEI memory but after the MMU has been enabled.
>
> This means that the cache invalidation in ArmVirtMemoryInitPeiLib is no
> longer necessary, and can simply be dropped.
>
> Cc: Alexander Graf <agraf@csgraf.de>
> Signed-off-by: Ard Biesheuvel <ardb@kernel.org>


Reviewed-by: Alexander Graf <graf@amazon.com>

Also, feel free to add

Reported-by: Alexander Graf <graf@amazon.com>


Thanks a bunch!

Alex


> ---
>   .../ArmVirtMemoryInitPeiLib/ArmVirtMemoryInitPeiLib.c    | 9 ---------
>   1 file changed, 9 deletions(-)
>
> diff --git a/ArmVirtPkg/Library/ArmVirtMemoryInitPeiLib/ArmVirtMemoryInitPeiLib.c b/ArmVirtPkg/Library/ArmVirtMemoryInitPeiLib/ArmVirtMemoryInitPeiLib.c
> index 022e13e762b6..98d90ad4200d 100644
> --- a/ArmVirtPkg/Library/ArmVirtMemoryInitPeiLib/ArmVirtMemoryInitPeiLib.c
> +++ b/ArmVirtPkg/Library/ArmVirtMemoryInitPeiLib/ArmVirtMemoryInitPeiLib.c
> @@ -91,15 +91,6 @@ MemoryPeim (
>         );
>     }
>   
> -  //
> -  // When running under virtualization, the PI/UEFI memory region may be
> -  // clean but not invalidated in system caches or in lower level caches
> -  // on other CPUs. So invalidate the region by virtual address, to ensure
> -  // that the contents we put there with the caches and MMU off will still
> -  // be visible after turning them on.
> -  //
> -  InvalidateDataCacheRange ((VOID *)(UINTN)UefiMemoryBase, UefiMemorySize);
> -
>     // Build Memory Allocation Hob
>     InitMmu ();
>   



Amazon Development Center Germany GmbH
Krausenstr. 38
10117 Berlin
Geschaeftsfuehrung: Christian Schlaeger, Jonathan Weiss
Eingetragen am Amtsgericht Charlottenburg unter HRB 149173 B
Sitz: Berlin
Ust-ID: DE 289 237 879



^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] ArmVirtPkg/ArmVirtMemoryInitPeiLib: avoid redundant cache invalidation
  2022-01-31 13:21 ` Alexander Graf
@ 2022-02-25 16:48   ` Ard Biesheuvel
  0 siblings, 0 replies; 4+ messages in thread
From: Ard Biesheuvel @ 2022-02-25 16:48 UTC (permalink / raw)
  To: Alexander Graf
  Cc: edk2-devel-groups-io, Leif Lindholm, Sami Mujawar,
	Schander, Johanna 'Mimoja' Amelie

On Mon, 31 Jan 2022 at 14:21, Alexander Graf <graf@amazon.com> wrote:
>
>
> On 29.01.22 16:13, Ard Biesheuvel wrote:
> > Alex reports that the cache invalidation performed by
> > ArmVirtMemoryInitPeiLib takes a non-negligible amount of time at boot.
> > This cache invalidation used to be necessary to avoid inconsistencies
> > between the CPU's cached and uncached views of the permanent PEI memory
> > region, given that the PEI phase is where the MMU gets enabled.
> >
> > The only allocations done from permanent PEI memory with the MMU off are
> > pages used for page tables, and since commit 748fea6279ef
> > ("ArmPkg/ArmMmuLib AARCH64: invalidate page tables before populating
> > them"), each of those is invalidated in the caches explicitly, for
> > reasons described in the patch's commit log. All other allocations done
> > in PEI are either from temporary PEI memory, which includes the stack,
> > or from permanent PEI memory but after the MMU has been enabled.
> >
> > This means that the cache invalidation in ArmVirtMemoryInitPeiLib is no
> > longer necessary, and can simply be dropped.
> >
> > Cc: Alexander Graf <agraf@csgraf.de>
> > Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
>
>
> Reviewed-by: Alexander Graf <graf@amazon.com>
>
> Also, feel free to add
>
> Reported-by: Alexander Graf <graf@amazon.com>
>

Merged as #2547

Thanks,

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2022-02-25 16:48 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-01-29 15:13 [PATCH] ArmVirtPkg/ArmVirtMemoryInitPeiLib: avoid redundant cache invalidation Ard Biesheuvel
2022-01-31 12:22 ` Leif Lindholm
2022-01-31 13:21 ` Alexander Graf
2022-02-25 16:48   ` Ard Biesheuvel

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox