From: "Yao, Jiewen" <jiewen.yao@intel.com>
To: "Li, Zhihao" <zhihao.li@intel.com>,
"devel@edk2.groups.io" <devel@edk2.groups.io>
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
Date: Sat, 3 Dec 2022 08:19:59 +0000 [thread overview]
Message-ID: <MW4PR11MB5872B397287767CB1D2105388C169@MW4PR11MB5872.namprd11.prod.outlook.com> (raw)
In-Reply-To: <DM6PR11MB4738DE0374E0EA04D542FA80F9149@DM6PR11MB4738.namprd11.prod.outlook.com>
[-- Attachment #1.1: Type: text/plain, Size: 14993 bytes --]
Thanks. Reviewed-by: Jiewen Yao <Jiewen.yao@intel.com>
Merged https://github.com/tianocore/edk2/pull/3704
From: Li, Zhihao <zhihao.li@intel.com>
Sent: Thursday, December 1, 2022 7:43 PM
To: Yao, Jiewen <jiewen.yao@intel.com>; devel@edk2.groups.io
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
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:
[cid:image001.png@01D90733.01429E90]
Pei phase:
[cid:image002.png@01D90733.01429E90]
[cid:image003.png@01D90733.01429E90]
[cid:image004.png@01D90733.01429E90]
-----Original Message-----
From: Yao, Jiewen <jiewen.yao@intel.com<mailto:jiewen.yao@intel.com>>
Sent: Thursday, December 1, 2022 4:37 PM
To: devel@edk2.groups.io<mailto:devel@edk2.groups.io>; Li, Zhihao <zhihao.li@intel.com<mailto:zhihao.li@intel.com>>
Cc: Wang, Jian J <jian.j.wang@intel.com<mailto: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<mailto:devel@edk2.groups.io> <devel@edk2.groups.io<mailto:devel@edk2.groups.io>> On Behalf Of Li,
> Zhihao
> Sent: Wednesday, November 30, 2022 10:21 PM
> To: devel@edk2.groups.io<mailto:devel@edk2.groups.io>
> Cc: Yao, Jiewen <jiewen.yao@intel.com<mailto:jiewen.yao@intel.com>>; Wang, Jian J
> <jian.j.wang@intel.com<mailto:jian.j.wang@intel.com>>
> Subject: [edk2-devel] [PATCH v1 1/1] CryptPkg: Enable CryptoPkg
> BaseCryptLib ParallelHash for PEI and DXE
>
> From: Zhihao Li <zhihao.li@intel.com<mailto: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<mailto:jiewen.yao@intel.com>>
> Cc: Jian J Wang <jian.j.wang@intel.com<mailto:jian.j.wang@intel.com>>
>
> Signed-off-by: Zhihao Li <zhihao.li@intel.com<mailto: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<mailto:devel+owner@edk2.groups.io>
> Unsubscribe: https://edk2.groups.io/g/devel/unsub
> [jiewen.yao@intel.com] -=-=-=-=-=-=
>
[-- Attachment #1.2: Type: text/html, Size: 50791 bytes --]
[-- Attachment #2: image001.png --]
[-- Type: image/png, Size: 35020 bytes --]
[-- Attachment #3: image002.png --]
[-- Type: image/png, Size: 30178 bytes --]
[-- Attachment #4: image003.png --]
[-- Type: image/png, Size: 67968 bytes --]
[-- Attachment #5: image004.png --]
[-- Type: image/png, Size: 64098 bytes --]
prev parent reply other threads:[~2022-12-03 8:20 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-11-30 14:21 [PATCH v1 1/1] CryptPkg: Enable CryptoPkg BaseCryptLib ParallelHash for PEI and DXE Li, Zhihao
2022-12-01 8:36 ` [edk2-devel] " Yao, Jiewen
2022-12-01 11:43 ` Li, Zhihao
2022-12-03 8:19 ` Yao, Jiewen [this message]
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=MW4PR11MB5872B397287767CB1D2105388C169@MW4PR11MB5872.namprd11.prod.outlook.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