public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: "Wu, Hao A" <hao.a.wu@intel.com>
To: Kun Qin <kuqin12@gmail.com>,
	"devel@edk2.groups.io" <devel@edk2.groups.io>
Cc: "Kinney, Michael D" <michael.d.kinney@intel.com>,
	Liming Gao <gaoliming@byosoft.com.cn>,
	"Liu, Zhiguang" <zhiguang.liu@intel.com>,
	"Andrew Fish" <afish@apple.com>, Laszlo Ersek <lersek@redhat.com>,
	Leif Lindholm <leif@nuviainc.com>
Subject: Re: [edk2-devel] [PATCH v1 1/5] EDK2 Code First: PI Specification: EFI_MM_COMMUNICATE_HEADER Update
Date: Wed, 16 Jun 2021 01:15:24 +0000	[thread overview]
Message-ID: <BN8PR11MB3666CFCE76DC3CFE615150E9CA0F9@BN8PR11MB3666.namprd11.prod.outlook.com> (raw)
In-Reply-To: <ad9d6481-c551-41e0-4bbe-5bb93fa6ba5a@gmail.com>

Thanks Kun,

I am a little concerned on whether there will be other missing cases that are not covered by this patch series.

I am also wondering is there any detection can be made to warn the cases that code modification should be made after this structure update.
Otherwise, it will be the burden for the platform owners to review the platform codes following your guide mentioned in this patch.

Hoping others can provide some inputs on this.

Best Regards,
Hao Wu

> -----Original Message-----
> From: Kun Qin <kuqin12@gmail.com>
> Sent: Wednesday, June 16, 2021 4:51 AM
> To: Wu, Hao A <hao.a.wu@intel.com>; devel@edk2.groups.io
> Cc: Kinney, Michael D <michael.d.kinney@intel.com>; Liming Gao
> <gaoliming@byosoft.com.cn>; Liu, Zhiguang <zhiguang.liu@intel.com>;
> Andrew Fish <afish@apple.com>; Laszlo Ersek <lersek@redhat.com>; Leif
> Lindholm <leif@nuviainc.com>
> Subject: Re: [edk2-devel] [PATCH v1 1/5] EDK2 Code First: PI Specification:
> EFI_MM_COMMUNICATE_HEADER Update
> 
> Hi Hao,
> 
> Sorry that I missed comments for this patch earlier. You are correct. I only
> inspected SmmLockBoxPeiLib. The PEI instance handled mode switch with
> ```OFFSET_OF ``` function. But DXE instance still have a few use cases that will
> be impacted.
> 
> I will update this read me file and add a code change patch for this library in
> v2. Thanks for pointing this out.
> 
> Regards,
> Kun
> 
> On 06/11/2021 00:46, Wu, Hao A wrote:
> >> -----Original Message-----
> >> From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Kun
> >> Qin
> >> Sent: Thursday, June 10, 2021 9:43 AM
> >> To: devel@edk2.groups.io
> >> Cc: Kinney, Michael D <michael.d.kinney@intel.com>; Liming Gao
> >> <gaoliming@byosoft.com.cn>; Liu, Zhiguang <zhiguang.liu@intel.com>;
> >> Andrew Fish <afish@apple.com>; Laszlo Ersek <lersek@redhat.com>; Leif
> >> Lindholm <leif@nuviainc.com>
> >> Subject: [edk2-devel] [PATCH v1 1/5] EDK2 Code First: PI Specification:
> >> EFI_MM_COMMUNICATE_HEADER Update
> >>
> >> REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3430
> >>
> >> This change includes specification update markdown file that
> >> describes the proposed PI Specification v1.7 Errata A in detail and
> >> potential impact to the existing codebase.
> >>
> >> Cc: Michael D Kinney <michael.d.kinney@intel.com>
> >> Cc: Liming Gao <gaoliming@byosoft.com.cn>
> >> Cc: Zhiguang Liu <zhiguang.liu@intel.com>
> >> Cc: Andrew Fish <afish@apple.com>
> >> Cc: Laszlo Ersek <lersek@redhat.com>
> >> Cc: Leif Lindholm <leif@nuviainc.com>
> >>
> >> Signed-off-by: Kun Qin <kuqin12@gmail.com>
> >> ---
> >>   BZ3430-SpecChange.md | 88 ++++++++++++++++++++
> >>   1 file changed, 88 insertions(+)
> >>
> >> diff --git a/BZ3430-SpecChange.md b/BZ3430-SpecChange.md new file
> >> mode
> >> 100644 index 000000000000..33a1ffda447b
> >> --- /dev/null
> >> +++ b/BZ3430-SpecChange.md
> >> @@ -0,0 +1,88 @@
> >> +# Title: Change MessageLength Field of
> EFI_MM_COMMUNICATE_HEADER
> >> to
> >> +UINT64
> >> +
> >> +## Status: Draft
> >> +
> >> +## Document: UEFI Platform Initialization Specification Version 1.7
> >> +Errata A
> >> +
> >> +## License
> >> +
> >> +SPDX-License-Identifier: CC-BY-4.0
> >> +
> >> +## Submitter: [TianoCore Community](https://www.tianocore.org)
> >> +
> >> +## Summary of the change
> >> +
> >> +Change the `MessageLength` Field of
> `EFI_MM_COMMUNICATE_HEADER`
> >> from UINTN to UINT64 to remove architecture dependency:
> >> +
> >> +```c
> >> +typedef struct {
> >> +  EFI_GUID  HeaderGuid;
> >> +  UINT64    MessageLength;
> >> +  UINT8     Data[ANYSIZE_ARRAY];
> >> +} EFI_MM_COMMUNICATE_HEADER;
> >> +```
> >> +
> >> +## Benefits of the change
> >> +
> >> +In PI Spec v1.7 Errata A, Vol.4, Sec 5.7 MM Communication Protocol,
> >> +the
> >> MessageLength field of `EFI_MM_COMMUNICATE_HEADER` (also
> defined as
> >> `EFI_SMM_COMMUNICATE_HEADER`) is defined as type UINTN.
> >> +
> >> +But this structure, as a generic definition, could be used for both
> >> +PEI and
> >> DXE MM communication. Thus for a system that supports PEI MM launch,
> >> but operates PEI in 32bit mode and MM foundation in 64bit, the
> >> current `EFI_MM_COMMUNICATE_HEADER` definition will cause
> structure
> >> parse error due to UINTN used.
> >> +
> >> +## Impact of the change
> >> +
> >> +This change will impact the known structure consumers including:
> >> +
> >> +```bash
> >> +MdeModulePkg/Core/PiSmmCore/PiSmmIpl
> >> +MdeModulePkg/Application/SmiHandlerProfileInfo
> >> +MdeModulePkg/Application/MemoryProfileInfo
> >> +```
> >> +
> >> +For consumers that are not using
> >> `OFFSET_OF(EFI_MM_COMMUNICATE_HEADER, Data)`, but performing
> explicit
> >> addition such as the existing
> >>
> MdeModulePkg/Application/SmiHandlerProfileInfo/SmiHandlerProfileInfo.
> >> c, one will need to change code implementation to match new structure
> >> definition. Otherwise, the code compiled on IA32 architecture will
> >> experience structure field dereference error.
> >> +
> >> +User who currently uses UINTN local variables as place holder of
> >> MessageLength will need to use caution to make cast from UINTN to
> >> UINT64 and vice versa. It is recommended to use `SafeUint64ToUintn`
> >> for such operations when the value is indeterministic.
> >> +
> >> +Note: MdeModulePkg/Library/SmmLockBoxLib/SmmLockBoxPeiLib is
> also
> >> consuming this structure, but it handled this size discrepancy
> >> internally. If this
> >
> >
> > Hello Kun,
> >
> > Sorry for a question.
> > I am not sure why the current codes in file SmmLockBoxDxeLib.c will work
> properly after the UINTN -> UINT64 change.
> >
> > For example:
> > LockBoxGetSmmCommBuffer():
> >    MinimalSizeNeeded = sizeof (EFI_GUID) +
> >                        sizeof (UINTN) +
> >                        MAX (sizeof (EFI_SMM_LOCK_BOX_PARAMETER_SAVE),
> >                             MAX (sizeof
> (EFI_SMM_LOCK_BOX_PARAMETER_SET_ATTRIBUTES),
> >                                  MAX (sizeof
> (EFI_SMM_LOCK_BOX_PARAMETER_UPDATE),
> >                                       MAX (sizeof
> (EFI_SMM_LOCK_BOX_PARAMETER_RESTORE),
> >                                            sizeof
> > (EFI_SMM_LOCK_BOX_PARAMETER_RESTORE_ALL_IN_PLACE)))));
> >
> > SaveLockBox():
> >    UINT8                           TempCommBuffer[sizeof(EFI_GUID) + sizeof(UINTN)
> + sizeof(EFI_SMM_LOCK_BOX_PARAMETER_SAVE)];
> >
> > Is the series missed changes for SmmLockBoxDxeLib or I got something
> wrong?
> >
> > Best Regards,
> > Hao Wu
> >
> >
> >> potential spec change is not applied, all applicable PEI MM
> >> communicate callers will need to use the same routine as that of
> >> SmmLockBoxPeiLib to invoke a properly populated
> >> EFI_MM_COMMUNICATE_HEADER to be used in X64 MM foundation.
> >> +
> >> +## Detailed description of the change [normative updates]
> >> +
> >> +### Specification Changes
> >> +
> >> +1. In PI Specification v1.7 Errata A: Vol. 4 Page-91, the definition
> >> +of
> >> `EFI_MM_COMMUNICATE_HEADER` should be changed from current:
> >> +
> >> +```c
> >> +typedef struct {
> >> +  EFI_GUID  HeaderGuid;
> >> +  UINTN     MessageLength;
> >> +  UINT8     Data[ANYSIZE_ARRAY];
> >> +} EFI_MM_COMMUNICATE_HEADER;
> >> +```
> >> +
> >> +to:
> >> +
> >> +```c
> >> +typedef struct {
> >> +  EFI_GUID  HeaderGuid;
> >> +  UINT64    MessageLength;
> >> +  UINT8     Data[ANYSIZE_ARRAY];
> >> +} EFI_MM_COMMUNICATE_HEADER;
> >> +```
> >> +
> >> +### Code Changes
> >> +
> >> +1. Remove the explicit calculation of the offset of `Data` in
> >> `EFI_MM_COMMUNICATE_HEADER`. Thus applicable calculations of
> >> `sizeof(EFI_GUID) + sizeof(UINTN)` should be replaced with
> >> `OFFSET_OF(EFI_MM_COMMUNICATE_HEADER, Data)` or similar
> alternatives.
> >> These calculations are identified in:
> >> +
> >> +```bash
> >>
> +MdeModulePkg/Application/SmiHandlerProfileInfo/SmiHandlerProfileInfo.
> >> c
> >> +MdeModulePkg/Application/MemoryProfileInfo/MemoryProfileInfo.c
> >> +```
> >> +
> >> +1. Resolve potentially mismatched type between `UINTN` and `UINT64`.
> >> This would occur when `MessageLength` or its derivitive are used for
> >> local calculation with existing `UINTN` typed variables. Code change
> >> regarding this perspective is per case evaluation: if the variables
> >> involved are all deterministic values, and there is no overflow or
> >> underflow risk, a cast operation (from `UINTN` to `UINT64`) can be
> >> safely used. Otherwise, the calculation will be performed in `UINT64`
> >> bitwidth and then convert to `UINTN` using `SafeUint64*` and
> >> `SafeUint64ToUintn`, respectively. These operations are identified in:
> >> +
> >> +```bash
> >> +MdeModulePkg/Core/PiSmmCore/PiSmmIpl.c
> >>
> +MdeModulePkg/Application/SmiHandlerProfileInfo/SmiHandlerProfileInfo.
> >> c
> >> +MdeModulePkg/Application/MemoryProfileInfo/MemoryProfileInfo.c
> >> +```
> >> +
> >> +1. After all above changes applied and specification updated,
> >> `MdePkg/Include/Protocol/MmCommunication.h` will need to be
> updated
> >> to match new definition that includes the field type update.
> >> --
> >> 2.31.1.windows.1
> >>
> >>
> >>
> >> 
> >>
> >

  reply	other threads:[~2021-06-16  1:15 UTC|newest]

Thread overview: 37+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-06-10  1:42 [PATCH v1 0/5] EDK2 Code First: PI Specification: Update EFI_MM_COMMUNICATE_HEADER Kun Qin
2021-06-10  1:42 ` [PATCH v1 1/5] EDK2 Code First: PI Specification: EFI_MM_COMMUNICATE_HEADER Update Kun Qin
2021-06-11  7:46   ` [edk2-devel] " Wu, Hao A
2021-06-15 20:51     ` Kun Qin
2021-06-16  1:15       ` Wu, Hao A [this message]
2021-06-24  0:53         ` Kun Qin
2021-06-24  3:26           ` [EXTERNAL] " Bret Barkelew
2021-06-28  6:18             ` Wu, Hao A
2021-06-10  1:42 ` [PATCH v1 2/5] MdeModulePkg: PiSmmIpl: Update MessageLength calculation for MmCommunicate Kun Qin
2021-06-11  7:46   ` Wu, Hao A
2021-06-10  1:42 ` [PATCH v1 3/5] MdeModulePkg: MemoryProfileInfo: Updated MessageLength calculation Kun Qin
2021-06-11  7:46   ` Wu, Hao A
2021-06-11 21:29     ` Kun Qin
2021-06-14 23:20       ` [edk2-devel] " Wu, Hao A
2021-06-10  1:42 ` [PATCH v1 4/5] MdeModulePkg: SmiHandlerProfileInfo: " Kun Qin
2021-06-11  7:47   ` Wu, Hao A
2021-06-10  1:42 ` [PATCH v1 5/5] MdePkg: MmCommunication: Extend MessageLength field size to UINT64 Kun Qin
2021-06-16  7:02 ` [edk2-devel] [PATCH v1 0/5] EDK2 Code First: PI Specification: Update EFI_MM_COMMUNICATE_HEADER Marvin Häuser
2021-06-16 20:58   ` Kun Qin
2021-06-18  9:37     ` Marvin Häuser
2021-06-22 15:34       ` Laszlo Ersek
2021-06-23  6:54         ` Marvin Häuser
2021-06-23 15:26           ` Laszlo Ersek
2021-06-24  0:24             ` Kun Qin
2021-06-24  8:00               ` Marvin Häuser
2021-06-24 15:25                 ` Michael D Kinney
2021-06-25 18:47                   ` Kun Qin
2021-06-28 14:57                     ` Laszlo Ersek
2021-06-28 15:43                       ` Marvin Häuser
2021-06-29  6:49                         ` [EXTERNAL] " Bret Barkelew
2021-06-29  8:58                           ` Marvin Häuser
2021-06-29 15:59                             ` Bret Barkelew
2021-06-29 17:28                               ` Michael D Kinney
2021-06-29 23:10                                 ` Kun Qin
2021-06-30  1:07                                   ` Michael D Kinney
2021-06-30  7:56                                     ` Kun Qin
2021-06-29 17:22                         ` Michael D Kinney

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=BN8PR11MB3666CFCE76DC3CFE615150E9CA0F9@BN8PR11MB3666.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