Yes. I tested parallelhash of CryptoProtocol/CryptoLib in Pei and Dxe phase. I find the log of the test. The file contains logs of many boot processes. Please check from the end of file.
I hope it can be used.
DXE phase:
Pei phase:
-----Original Message-----
From: Yao, Jiewen <jiewen.yao@intel.com>
Sent: Thursday, December 1, 2022 4:37 PM
To: devel@edk2.groups.io; Li, Zhihao <zhihao.li@intel.com>
Cc: Wang, Jian J <jian.j.wang@intel.com>
Subject: RE: [edk2-devel] [PATCH v1 1/1] CryptPkg: Enable CryptoPkg BaseCryptLib ParallelHash for PEI and DXE
Thanks.
Would you please share what test you have run for this?
> -----Original Message-----
> From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Li,
> Zhihao
> Sent: Wednesday, November 30, 2022 10:21 PM
> To: devel@edk2.groups.io
> Cc: Yao, Jiewen <jiewen.yao@intel.com>; Wang, Jian J
> Subject: [edk2-devel] [PATCH v1 1/1] CryptPkg: Enable CryptoPkg
> BaseCryptLib ParallelHash for PEI and DXE
>
> From: Zhihao Li <zhihao.li@intel.com>
>
> REF:
https://bugzilla.tianocore.org/show_bug.cgi?id=4097
>
> The BaseCryptLib in the CryptoPkg currently supports ParallelHash
> algorithm for SMM. The MP Services PPI and MP Services Protocol could
> be used to enable ParallelHash in PEI and DXE versions of the
> BaseCryptLib.
>
> Cc: Jiewen Yao <jiewen.yao@intel.com>
> Cc: Jian J Wang <jian.j.wang@intel.com>
>
> Signed-off-by: Zhihao Li <zhihao.li@intel.com>
> ---
> CryptoPkg/Library/BaseCryptLib/Hash/CryptDispatchApDxe.c | 49
> ++++++++++++++++++
> CryptoPkg/Library/BaseCryptLib/Hash/CryptDispatchApMm.c | 35
> +++++++++++++
> CryptoPkg/Library/BaseCryptLib/Hash/CryptDispatchApPei.c | 54
> ++++++++++++++++++++
> CryptoPkg/Library/BaseCryptLib/Hash/CryptParallelHash.c | 26 +---------
> CryptoPkg/Library/BaseCryptLib/BaseCryptLib.inf | 11 +++-
> CryptoPkg/Library/BaseCryptLib/Hash/CryptParallelHash.h | 23
> +++++++++
> CryptoPkg/Library/BaseCryptLib/PeiCryptLib.inf | 11 +++-
> CryptoPkg/Library/BaseCryptLib/SmmCryptLib.inf | 1 +
> 8 files changed, 183 insertions(+), 27 deletions(-)
>
> diff --git a/CryptoPkg/Library/BaseCryptLib/Hash/CryptDispatchApDxe.c
> b/CryptoPkg/Library/BaseCryptLib/Hash/CryptDispatchApDxe.c
> new file mode 100644
> index 000000000000..607aa7cd48d2
> --- /dev/null
> +++ b/CryptoPkg/Library/BaseCryptLib/Hash/CryptDispatchApDxe.c
> @@ -0,0 +1,49 @@
> +/** @file
>
> + Dispatch Block to Aps in Dxe phase for parallelhash algorithm.
>
> +
>
> +Copyright (c) 2022, Intel Corporation. All rights reserved.<BR>
>
> +SPDX-License-Identifier: BSD-2-Clause-Patent
>
> +
>
> +**/
>
> +
>
> +#include "CryptParallelHash.h"
>
> +#include <Library/UefiBootServicesTableLib.h>
>
> +#include <Protocol/MpService.h>
>
> +
>
> +/**
>
> + Dispatch the block task to each AP in PEI phase.
>
> +
>
> +**/
>
> +VOID
>
> +EFIAPI
>
> +DispatchBlockToAp (
>
> + VOID
>
> + )
>
> +{
>
> + EFI_STATUS Status;
>
> + EFI_MP_SERVICES_PROTOCOL *MpServices;
>
> +
>
> + Status = gBS->LocateProtocol (
>
> + &gEfiMpServiceProtocolGuid,
>
> + NULL,
>
> + (VOID **)&MpServices
>
> + );
>
> + if (EFI_ERROR (Status)) {
>
> + //
>
> + // Failed to locate MpServices Protocol, do parallel hash by one core.
>
> + //
>
> + DEBUG ((DEBUG_ERROR, "[DispatchBlockToApDxe] Failed to locate
> MpServices Protocol. Status = %r\n", Status));
>
> + return;
>
> + }
>
> +
>
> + Status = MpServices->StartupAllAPs (
>
> + MpServices,
>
> + ParallelHashApExecute,
>
> + FALSE,
>
> + NULL,
>
> + 0,
>
> + NULL,
>
> + NULL
>
> + );
>
> + return;
>
> +}
>
> diff --git a/CryptoPkg/Library/BaseCryptLib/Hash/CryptDispatchApMm.c
> b/CryptoPkg/Library/BaseCryptLib/Hash/CryptDispatchApMm.c
> new file mode 100644
> index 000000000000..0237fb38bcb6
> --- /dev/null
> +++ b/CryptoPkg/Library/BaseCryptLib/Hash/CryptDispatchApMm.c
> @@ -0,0 +1,35 @@
> +/** @file
>
> + Dispatch the block task to each AP in Smm mode for parallelhash
> algorithm.
>
> +
>
> +Copyright (c) 2022, Intel Corporation. All rights reserved.<BR>
>
> +SPDX-License-Identifier: BSD-2-Clause-Patent
>
> +
>
> +**/
>
> +
>
> +#include "CryptParallelHash.h"
>
> +#include <Library/MmServicesTableLib.h>
>
> +
>
> +/**
>
> + Dispatch the block task to each AP in SMM mode.
>
> +
>
> +**/
>
> +VOID
>
> +EFIAPI
>
> +DispatchBlockToAp (
>
> + VOID
>
> + )
>
> +{
>
> + UINTN Index;
>
> +
>
> + if (gMmst == NULL) {
>
> + return;
>
> + }
>
> +
>
> + for (Index = 0; Index < gMmst->NumberOfCpus; Index++) {
>
> + if (Index != gMmst->CurrentlyExecutingCpu) {
>
> + gMmst->MmStartupThisAp (ParallelHashApExecute, Index, NULL);
>
> + }
>
> + }
>
> +
>
> + return;
>
> +}
>
> diff --git a/CryptoPkg/Library/BaseCryptLib/Hash/CryptDispatchApPei.c
> b/CryptoPkg/Library/BaseCryptLib/Hash/CryptDispatchApPei.c
> new file mode 100644
> index 000000000000..9ddd23d32048
> --- /dev/null
> +++ b/CryptoPkg/Library/BaseCryptLib/Hash/CryptDispatchApPei.c
> @@ -0,0 +1,54 @@
> +/** @file
>
> + Dispatch Block to Aps in Pei phase for parallelhash algorithm.
>
> +
>
> +Copyright (c) 2022, Intel Corporation. All rights reserved.<BR>
>
> +SPDX-License-Identifier: BSD-2-Clause-Patent
>
> +
>
> +**/
>
> +
>
> +#include "CryptParallelHash.h"
>
> +#include <Library/PeiServicesTablePointerLib.h>
>
> +#include <PiPei.h>
>
> +#include <Ppi/MpServices.h>
>
> +#include <Library/PeiServicesLib.h>
>
> +
>
> +/**
>
> + Dispatch the block task to each AP in PEI phase.
>
> +
>
> +**/
>
> +VOID
>
> +EFIAPI
>
> +DispatchBlockToAp (
>
> + VOID
>
> + )
>
> +{
>
> + EFI_STATUS Status;
>
> + CONST EFI_PEI_SERVICES **PeiServices;
>
> + EFI_PEI_MP_SERVICES_PPI *MpServicesPpi;
>
> +
>
> + PeiServices = GetPeiServicesTablePointer ();
>
> + Status = (*PeiServices)->LocatePpi (
>
> + PeiServices,
>
> + &gEfiPeiMpServicesPpiGuid,
>
> + 0,
>
> + NULL,
>
> + (VOID **)&MpServicesPpi
>
> + );
>
> + if (EFI_ERROR (Status)) {
>
> + //
>
> + // Failed to locate MpServices Ppi, do parallel hash by one core.
>
> + //
>
> + DEBUG ((DEBUG_ERROR, "[DispatchBlockToApPei] Failed to locate
> MpServices Ppi. Status = %r\n", Status));
>
> + return;
>
> + }
>
> +
>
> + Status = MpServicesPpi->StartupAllAPs (
>
> + (CONST EFI_PEI_SERVICES **)PeiServices,
>
> + MpServicesPpi,
>
> + ParallelHashApExecute,
>
> + FALSE,
>
> + 0,
>
> + NULL
>
> + );
>
> + return;
>
> +}
>
> diff --git a/CryptoPkg/Library/BaseCryptLib/Hash/CryptParallelHash.c
> b/CryptoPkg/Library/BaseCryptLib/Hash/CryptParallelHash.c
> index f7ce9dbf523e..2931123736e3 100644
> --- a/CryptoPkg/Library/BaseCryptLib/Hash/CryptParallelHash.c
> +++ b/CryptoPkg/Library/BaseCryptLib/Hash/CryptParallelHash.c
> @@ -7,7 +7,6 @@ SPDX-License-Identifier: BSD-2-Clause-Patent **/
>
>
>
> #include "CryptParallelHash.h"
>
> -#include <Library/MmServicesTableLib.h>
>
> #include <Library/SynchronizationLib.h>
>
>
>
> #define PARALLELHASH_CUSTOMIZATION "ParallelHash"
>
> @@ -69,27 +68,6 @@ ParallelHashApExecute (
> }
>
> }
>
>
>
> -/**
>
> - Dispatch the block task to each AP in SMM mode.
>
> -
>
> -**/
>
> -VOID
>
> -EFIAPI
>
> -MmDispatchBlockToAP (
>
> - VOID
>
> - )
>
> -{
>
> - UINTN Index;
>
> -
>
> - for (Index = 0; Index < gMmst->NumberOfCpus; Index++) {
>
> - if (Index != gMmst->CurrentlyExecutingCpu) {
>
> - gMmst->MmStartupThisAp (ParallelHashApExecute, Index, NULL);
>
> - }
>
> - }
>
> -
>
> - return;
>
> -}
>
> -
>
> /**
>
> Parallel hash function ParallelHash256, as defined in NIST's
> Special Publication 800-185,
>
> published December 2016.
>
> @@ -197,9 +175,7 @@ ParallelHash256HashAll (
> //
>
> // Dispatch blocklist to each AP.
>
> //
>
> - if (gMmst != NULL) {
>
> - MmDispatchBlockToAP ();
>
> - }
>
> + DispatchBlockToAp ();
>
>
>
> //
>
> // Wait until all block hash completed.
>
> diff --git a/CryptoPkg/Library/BaseCryptLib/BaseCryptLib.inf
> b/CryptoPkg/Library/BaseCryptLib/BaseCryptLib.inf
> index 213813cad971..5be1724f0852 100644
> --- a/CryptoPkg/Library/BaseCryptLib/BaseCryptLib.inf
> +++ b/CryptoPkg/Library/BaseCryptLib/BaseCryptLib.inf
> @@ -35,7 +35,11 @@
> Hash/CryptSha256.c
>
> Hash/CryptSha512.c
>
> Hash/CryptSm3.c
>
> - Hash/CryptParallelHashNull.c
>
> + Hash/CryptSha3.c
>
> + Hash/CryptXkcp.c
>
> + Hash/CryptCShake256.c
>
> + Hash/CryptParallelHash.c
>
> + Hash/CryptDispatchApDxe.c
>
> Hmac/CryptHmac.c
>
> Kdf/CryptHkdf.c
>
> Cipher/CryptAes.c
>
> @@ -93,6 +97,11 @@
> OpensslLib
>
> IntrinsicLib
>
> PrintLib
>
> + UefiBootServicesTableLib
>
> + SynchronizationLib
>
> +
>
> +[Protocols]
>
> + gEfiMpServiceProtocolGuid
>
>
>
> #
>
> # Remove these [BuildOptions] after this library is cleaned up
>
> diff --git a/CryptoPkg/Library/BaseCryptLib/Hash/CryptParallelHash.h
> b/CryptoPkg/Library/BaseCryptLib/Hash/CryptParallelHash.h
> index dcfe200e5829..03a1a58cb8e7 100644
> --- a/CryptoPkg/Library/BaseCryptLib/Hash/CryptParallelHash.h
> +++ b/CryptoPkg/Library/BaseCryptLib/Hash/CryptParallelHash.h
> @@ -201,3 +201,26 @@ CShake256HashAll (
> IN UINTN CustomizationLen,
>
> OUT UINT8 *HashValue
>
> );
>
> +
>
> +/**
>
> + Complete computation of digest of each block.
>
> +
>
> + Each AP perform the function called by BSP.
>
> +
>
> + @param[in] ProcedureArgument Argument of the procedure.
>
> +**/
>
> +VOID
>
> +EFIAPI
>
> +ParallelHashApExecute (
>
> + IN VOID *ProcedureArgument
>
> + );
>
> +
>
> +/**
>
> + Dispatch the block task to each AP.
>
> +
>
> +**/
>
> +VOID
>
> +EFIAPI
>
> +DispatchBlockToAp (
>
> + VOID
>
> + );
>
> diff --git a/CryptoPkg/Library/BaseCryptLib/PeiCryptLib.inf
> b/CryptoPkg/Library/BaseCryptLib/PeiCryptLib.inf
> index b1629647f9c6..2aafa5f0ac9a 100644
> --- a/CryptoPkg/Library/BaseCryptLib/PeiCryptLib.inf
> +++ b/CryptoPkg/Library/BaseCryptLib/PeiCryptLib.inf
> @@ -40,7 +40,11 @@
> Hash/CryptSha256.c
>
> Hash/CryptSm3.c
>
> Hash/CryptSha512.c
>
> - Hash/CryptParallelHashNull.c
>
> + Hash/CryptSha3.c
>
> + Hash/CryptXkcp.c
>
> + Hash/CryptCShake256.c
>
> + Hash/CryptParallelHash.c
>
> + Hash/CryptDispatchApPei.c
>
> Hmac/CryptHmac.c
>
> Kdf/CryptHkdf.c
>
> Cipher/CryptAesNull.c
>
> @@ -80,7 +84,12 @@
> OpensslLib
>
> IntrinsicLib
>
> PrintLib
>
> + PeiServicesTablePointerLib
>
> + PeiServicesLib
>
> + SynchronizationLib
>
>
>
> +[Ppis]
>
> + gEfiPeiMpServicesPpiGuid
>
> #
>
> # Remove these [BuildOptions] after this library is cleaned up
>
> #
>
> diff --git a/CryptoPkg/Library/BaseCryptLib/SmmCryptLib.inf
> b/CryptoPkg/Library/BaseCryptLib/SmmCryptLib.inf
> index 0af7a3f96e8f..00ea7bf4c5df 100644
> --- a/CryptoPkg/Library/BaseCryptLib/SmmCryptLib.inf
> +++ b/CryptoPkg/Library/BaseCryptLib/SmmCryptLib.inf
> @@ -42,6 +42,7 @@
> Hash/CryptXkcp.c
>
> Hash/CryptCShake256.c
>
> Hash/CryptParallelHash.c
>
> + Hash/CryptDispatchApMm.c
>
> Hmac/CryptHmac.c
>
> Kdf/CryptHkdfNull.c
>
> Cipher/CryptAes.c
>
> --
> 2.26.2.windows.1
>
>
>
> -=-=-=-=-=-=
> Groups.io Links: You receive all messages sent to this group.
> View/Reply Online (#96736):
>
https://edk2.groups.io/g/devel/message/96736
> Mute This Topic:
https://groups.io/mt/95358558/1772286
> Group Owner:
devel+owner@edk2.groups.io
> Unsubscribe:
https://edk2.groups.io/g/devel/unsub
> [jiewen.yao@intel.com] -=-=-=-=-=-=
>