SmmCpuSyncGetArrivedCpuCount () won't have below requirement to caller:

"The caller shall not call this function for the number of arrived CPU after 
look door in SMI since the value has been returned in the parameter of 
LockDoor()."

The API will ways support to get the ArrivedCpuCount no mater locked or not.

So, ignore below case.

Thanks,
Jiaxin 

> -----Original Message-----
> From: Wu, Jiaxin
> Sent: Thursday, December 14, 2023 11:55 PM
> To: devel@edk2.groups.io; ler...@redhat.com
> Cc: Dong, Eric <eric.d...@intel.com>; Ni, Ray <ray...@intel.com>; Zeng, Star
> <star.z...@intel.com>; Gerd Hoffmann <kra...@redhat.com>; Kumar, Rahul R
> <rahul.r.ku...@intel.com>
> Subject: RE: [edk2-devel] [PATCH v3 3/6] UefiCpuPkg: Implements
> SmmCpuSyncLib library instance
> 
> BTW, for SmmCpuSyncGetArrivedCpuCount ():
> 
> we can't check the CpuCount (Original is named as Counter Sem) is locked or
> not, then decide return from the *Context->CpuCount or locked value for the
> arrived CPU in SMI. Just like:
> 
> if (*Context->CpuCount == MAX_UINT32) {        ------> does not meet this
> condition, means unlocked!
>       Return real CpuCount from the SmmCpuSyncLockDoor().
> }
>                 ----> lock operation is here!!!! *Context->CpuCount change to
> MAX_UINT32
> Return *Context->CpuCount;   --> return wrong value since MAX_UINT32 is
> return.
> 
> Because if we found it's not locked during the check, but it suddenly locked
> before return, then -1 will be returned. this is not atomic operation. The
> behavior is not expected. If we add the atomic operation here, I believe it 
> will
> surely impact the existing performance.
> 
> And the real usage case is that we only need this api before the lock. I don't
> want make it complex.
> 
> So, based on this, we add the comment in the function:
>   The caller shall not call this function for the number of arrived CPU after 
> look
> door
>   in SMI since the value has been returned in the parameter of LockDoor().
> 
> See below:
> 
> /**
>   Get current number of arrived CPU in SMI.
> 
>   BSP might need to know the current number of arrived CPU in SMI to make
> sure all APs
>   in SMI. This API can be for that purpose.
> 
>   The caller shall not call this function for the number of arrived CPU after 
> look
> door
>   in SMI since the value has been returned in the parameter of LockDoor().
> 
>   If Context is NULL, then ASSERT().
> 
>   @param[in]      Context     Pointer to the SMM CPU Sync context object.
> 
>   @retval    Current number of arrived CPU in SMI.
> 
> **/
> UINTN
> EFIAPI
> SmmCpuSyncGetArrivedCpuCount (
>   IN  SMM_CPU_SYNC_CONTEXT  *Context
>   )
> {
>   ASSERT (Context != NULL);
> 
>   return *Context->CpuCount;
> }
> 
> Thanks,
> Jiaxin
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#112586): https://edk2.groups.io/g/devel/message/112586
Mute This Topic: https://groups.io/mt/103010165/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-


Reply via email to