On 11/21/23 03:35, Yuanhao Xie wrote: > No functional changes in this patch. > > Updates the comments of _CPU_MP_DATA to delcared that duplications in > CpuMpData are present to avoid to be direct accessed and comprehended > in assembly code. CpuMpData: Intended for use in C code while > ExchangeInfo are used in assembly code in this module.
(1) The space characters at the front of these last two lines seem superfluous. > > This patch deletes the unnecessary comments in CpuMpData, since > CpuMpData is no longer responsible for passing information from PEI to > DXE. > > Signed-off-by: Yuanhao Xie <yuanhao....@intel.com> > Cc: Laszlo Ersek ler...@redhat.com > Cc: Eric Dong <eric.d...@intel.com> > Cc: Ray Ni <ray...@intel.com> > Cc: Rahul Kumar <rahul1.ku...@intel.com> > Cc: Gerd Hoffmann <kra...@redhat.com> > --- > UefiCpuPkg/Library/MpInitLib/MpEqu.inc | 2 ++ > UefiCpuPkg/Library/MpInitLib/MpLib.h | 13 +++++++------ > 2 files changed, 9 insertions(+), 6 deletions(-) > > diff --git a/UefiCpuPkg/Library/MpInitLib/MpEqu.inc > b/UefiCpuPkg/Library/MpInitLib/MpEqu.inc > index 72af196513..317e627b58 100644 > --- a/UefiCpuPkg/Library/MpInitLib/MpEqu.inc > +++ b/UefiCpuPkg/Library/MpInitLib/MpEqu.inc > @@ -67,6 +67,8 @@ endstruc > > ; > ; Equivalent NASM structure of MP_CPU_EXCHANGE_INFO > +; Assembly routines should refrain from directly interacting with > +; the internal details of CPU_MP_DATA. > ; > struc MP_CPU_EXCHANGE_INFO > .StackStart: CTYPE_UINTN 1 OK! > diff --git a/UefiCpuPkg/Library/MpInitLib/MpLib.h > b/UefiCpuPkg/Library/MpInitLib/MpLib.h > index af296f6ac0..a96a6389c1 100644 > --- a/UefiCpuPkg/Library/MpInitLib/MpLib.h > +++ b/UefiCpuPkg/Library/MpInitLib/MpLib.h > @@ -203,6 +203,8 @@ typedef struct _CPU_MP_DATA CPU_MP_DATA; > // MP CPU exchange information for AP reset code > // This structure is required to be packed because fixed field offsets > // into this structure are used in assembly code in this module > +// Assembly routines should refrain from directly interacting with > +// the internal details of CPU_MP_DATA. > // > typedef struct { > UINTN StackStart; OK! > @@ -239,17 +241,16 @@ typedef struct { > #pragma pack() > > // > -// CPU MP Data save in memory > +// CPU MP Data save in memory, and intended for use in C code. > +// There are some duplicated fields, such as XD status, between > +// CpuMpData and ExchangeInfo. These duplications in CpuMpData > +// are present to avoid to be direct accessed and comprehended > +// in assembly code. > // (2) So, my following comment applies to both the commit message and the comment here. I think we should not attempt to explain the *direction* of the duplications. I think there have been examples for either direction -- at some point, some information was initially only used by the assembly code, and then needed duplication for the C code's sake; at another time, duplication in the the opposite direction was necessary (because stuff used by the C code was needed by the assembly code too). In particular, the statement "duplicate a field from ExchangeInfo to CpuMpData so that assembly code need not understand it" seems wrong. For easing the job of the assembly code, fields would be duplicated in the *opposite* direction (from CpuMpData to ExchangeInfo). Note that in patch#1 in this series, we indeed duplicate a field from ExchangeInfo to CpuMpData -- but there the reason is different: we want to make the C code's job easier! The "run loop" wait mode does not involve *rebooting* APs, so there is no assembly code for AP startup, and no ExchangeInfo either. Therefore, we're making the C code's job easier, so that it can function with just CpuMpData. Thus, I would rather avoid any language on the *direction* of duplication. I'd just say: MP_CPU_EXCHANGE_INFO is to be consumed by assembly code only, and CPU_MP_DATA is to be consumed by C code only. If both kinds of code need to consume a piece of information, then that information must be duplicated between both structures. ... I'm sorry that I'm splitting hairs for so long on this issue, but I find this principle behind the duplications *really* non-obvious. So I would like us to get the documentation right. (Ray's original explanation was here: <https://edk2.groups.io/g/devel/message/111336>.) > struct _CPU_MP_DATA { > UINT64 CpuInfoInHob; > UINT32 CpuCount; > UINT32 BspNumber; > - // > - // The above fields data will be passed from PEI to DXE > - // Please make sure the fields offset same in the different > - // architecture. > - // > SPIN_LOCK MpLock; > UINTN Buffer; > UINTN CpuApStackSize; This is OK. Thanks! Laszlo -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#111615): https://edk2.groups.io/g/devel/message/111615 Mute This Topic: https://groups.io/mt/102721681/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/leave/9847357/21656/1706620634/xyzzy [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-