public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: "Wu, Hao A" <hao.a.wu@intel.com>
To: "devel@edk2.groups.io" <devel@edk2.groups.io>,
	"kuqin12@gmail.com" <kuqin12@gmail.com>
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: Fri, 11 Jun 2021 07:46:37 +0000	[thread overview]
Message-ID: <BN8PR11MB366691A1E14B56BF21A1BC20CA349@BN8PR11MB3666.namprd11.prod.outlook.com> (raw)
In-Reply-To: <20210610014259.1151-2-kuqin12@gmail.com>

> -----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-11  7:46 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   ` Wu, Hao A [this message]
2021-06-15 20:51     ` [edk2-devel] " Kun Qin
2021-06-16  1:15       ` Wu, Hao A
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=BN8PR11MB366691A1E14B56BF21A1BC20CA349@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