RSC_DATA_ENTRY *RscData;\r
EFI_STATUS Status;\r
VOID *NewBuffer;\r
+ EFI_PHYSICAL_ADDRESS FailSafeEndPointer;\r
\r
//\r
// Use atom operation to avoid the reentant of report.\r
// If callback is registered with TPL lower than TPL_HIGH_LEVEL, event must be signaled at boot time to possibly wait for\r
// allowed TPL to report status code. Related data should also be stored in data buffer.\r
//\r
+ FailSafeEndPointer = CallbackEntry->EndPointer;\r
CallbackEntry->EndPointer = ALIGN_VARIABLE (CallbackEntry->EndPointer);\r
RscData = (RSC_DATA_ENTRY *) (UINTN) CallbackEntry->EndPointer;\r
CallbackEntry->EndPointer += sizeof (RSC_DATA_ENTRY);\r
(VOID *) (UINTN) CallbackEntry->StatusCodeDataBuffer\r
);\r
if (NewBuffer != NULL) {\r
+ FailSafeEndPointer = (EFI_PHYSICAL_ADDRESS) (UINTN) NewBuffer + (FailSafeEndPointer - CallbackEntry->StatusCodeDataBuffer);\r
CallbackEntry->EndPointer = (EFI_PHYSICAL_ADDRESS) (UINTN) NewBuffer + (CallbackEntry->EndPointer - CallbackEntry->StatusCodeDataBuffer);\r
CallbackEntry->StatusCodeDataBuffer = (EFI_PHYSICAL_ADDRESS) (UINTN) NewBuffer;\r
CallbackEntry->BufferSize *= 2;\r
// If data buffer is used up, do not report for this time.\r
//\r
if (CallbackEntry->EndPointer > (CallbackEntry->StatusCodeDataBuffer + CallbackEntry->BufferSize)) {\r
+ CallbackEntry->EndPointer = FailSafeEndPointer;\r
continue;\r
}\r
\r