Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Wrap advanced logger buffer cursor when the logging area is full #408

Merged
merged 11 commits into from
Jan 18, 2024
4 changes: 4 additions & 0 deletions AdvLoggerPkg/AdvLoggerPkg.dec
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,10 @@
#
gAdvLoggerPkgTokenSpaceGuid.PcdAdvancedFileLoggerForceEnable|TRUE|BOOLEAN|0x00010184

## PcdAdvancedLoggerAutoWrapEnable - Automatically wrap around the LogCurrent cursor when it reaches the end of the log
kuqin12 marked this conversation as resolved.
Show resolved Hide resolved
#
gAdvLoggerPkgTokenSpaceGuid.PcdAdvancedLoggerAutoWrapEnable|FALSE|BOOLEAN|0x00010188


[PcdsFixedAtBuild]
## Advanced Logger Base - NULL = UEFI starts with PEI or DXE, and there is no SEC, or SEC
Expand Down
1 change: 1 addition & 0 deletions AdvLoggerPkg/AdvLoggerPkg.dsc
Original file line number Diff line number Diff line change
Expand Up @@ -151,6 +151,7 @@
AdvLoggerPkg/Library/AssertLib/AssertLib.inf
AdvLoggerPkg/Library/AssertTelemetryLib/AssertLib.inf
AdvLoggerPkg/UnitTests/LineParser/LineParserTestApp.inf
AdvLoggerPkg/UnitTests/AdvancedLoggerWrapper/AdvancedLoggerWrapperTestApp.inf

[BuildOptions]
#force deprecated interfaces off
Expand Down
52 changes: 38 additions & 14 deletions AdvLoggerPkg/Library/AdvancedLoggerLib/AdvancedLoggerCommon.c
Original file line number Diff line number Diff line change
Expand Up @@ -69,20 +69,44 @@ AdvancedLoggerMemoryLoggerWrite (
if ((UsedSize >= LoggerInfo->LogBufferSize) ||
((LoggerInfo->LogBufferSize - UsedSize) < EntrySize))
{
//
// Update the number of bytes of log that have not been captured
//
do {
CurrentSize = LoggerInfo->DiscardedSize;
NewSize = CurrentSize + (UINT32)NumberOfBytes;
OldSize = InterlockedCompareExchange32 (
(UINT32 *)&LoggerInfo->DiscardedSize,
(UINT32)CurrentSize,
(UINT32)NewSize
);
} while (OldSize != CurrentSize);

return LoggerInfo;
if (FeaturePcdGet (PcdAdvancedLoggerAutoWrapEnable) && (LoggerInfo->AtRuntime)) {
//
// Wrap around the current cursor when auto wrap is enabled on buffer full during runtime.
//
NewBuffer = LoggerInfo->LogBuffer;
OldValue = InterlockedCompareExchange64 (
os-d marked this conversation as resolved.
Show resolved Hide resolved
(UINT64 *)&LoggerInfo->LogCurrent,
(UINT64)CurrentBuffer,
(UINT64)NewBuffer
);
if (OldValue != CurrentBuffer) {
//
// Another thread has updated the buffer, we should retry the logging.
//
continue;
}

// Now that we have a buffer that starts from the beginning, proceed to log the current message, from the beginning.
// Note that in this case, if there are other threads in the middle of logging a message, they will continue to write
// to the end of the buffer as it fits.
// If there is another clearing attempt on the other thread, i.e. another thread also try to fill up the buffer, the
// first clear will take effect and the other log entries will fail to update and proceed with a normal retry.
} else {
//
// Update the number of bytes of log that have not been captured
//
do {
CurrentSize = LoggerInfo->DiscardedSize;
NewSize = CurrentSize + (UINT32)NumberOfBytes;
OldSize = InterlockedCompareExchange32 (
(UINT32 *)&LoggerInfo->DiscardedSize,
(UINT32)CurrentSize,
(UINT32)NewSize
);
} while (OldSize != CurrentSize);

return LoggerInfo;
}
}

NewBuffer = PA_FROM_PTR ((CHAR8_FROM_PA (CurrentBuffer) + EntrySize));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,5 +40,8 @@
gAdvLoggerPkgTokenSpaceGuid.PcdAdvancedLoggerBase ## CONSUMES
gAdvLoggerPkgTokenSpaceGuid.PcdAdvancedLoggerHdwPortDebugPrintErrorLevel ## SOMETIMES_CONSUMES

[FeaturePcd]
gAdvLoggerPkgTokenSpaceGuid.PcdAdvancedLoggerAutoWrapEnable

[Depex]
TRUE
Original file line number Diff line number Diff line change
Expand Up @@ -61,3 +61,4 @@
[FeaturePcd]
gAdvLoggerPkgTokenSpaceGuid.PcdAdvancedLoggerLocator
gAdvLoggerPkgTokenSpaceGuid.PcdAdvancedLoggerFixedInRAM
gAdvLoggerPkgTokenSpaceGuid.PcdAdvancedLoggerAutoWrapEnable
Original file line number Diff line number Diff line change
Expand Up @@ -43,5 +43,8 @@
[Pcd]
gAdvLoggerPkgTokenSpaceGuid.PcdAdvancedLoggerHdwPortDebugPrintErrorLevel ## SOMETIMES_CONSUMES

[FeaturePcd]
gAdvLoggerPkgTokenSpaceGuid.PcdAdvancedLoggerAutoWrapEnable

[Depex]
TRUE
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@

[FeaturePcd]
gAdvLoggerPkgTokenSpaceGuid.PcdAdvancedLoggerFixedInRAM
gAdvLoggerPkgTokenSpaceGuid.PcdAdvancedLoggerAutoWrapEnable

[FixedPcd]
gAdvLoggerPkgTokenSpaceGuid.PcdAdvancedLoggerBase
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,3 +40,4 @@
[Pcd]
gAdvLoggerPkgTokenSpaceGuid.PcdAdvancedLoggerBase ## CONSUMES
gAdvLoggerPkgTokenSpaceGuid.PcdAdvancedLoggerHdwPortDebugPrintErrorLevel ## SOMETIMES_CONSUMES
gAdvLoggerPkgTokenSpaceGuid.PcdAdvancedLoggerAutoWrapEnable ## SOMETIMES_CONSUMES
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@
[FeaturePcd]
gAdvLoggerPkgTokenSpaceGuid.PcdAdvancedLoggerPeiInRAM ## CONSUMES
gAdvLoggerPkgTokenSpaceGuid.PcdAdvancedLoggerFixedInRAM ## CONSUMES
gAdvLoggerPkgTokenSpaceGuid.PcdAdvancedLoggerAutoWrapEnable

[FixedPcd]
gAdvLoggerPkgTokenSpaceGuid.PcdAdvancedLoggerBase ## CONSUMES
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,3 +44,6 @@

[Pcd]
gAdvLoggerPkgTokenSpaceGuid.PcdAdvancedLoggerHdwPortDebugPrintErrorLevel ## SOMETIMES_CONSUMES

[FeaturePcd]
gAdvLoggerPkgTokenSpaceGuid.PcdAdvancedLoggerAutoWrapEnable
Original file line number Diff line number Diff line change
Expand Up @@ -47,5 +47,8 @@
gAdvLoggerPkgTokenSpaceGuid.PcdAdvancedLoggerPages ## CONSUMES
gAdvLoggerPkgTokenSpaceGuid.PcdAdvancedLoggerHdwPortDebugPrintErrorLevel ## CONSUMES

[FeaturePcd]
gAdvLoggerPkgTokenSpaceGuid.PcdAdvancedLoggerAutoWrapEnable

[BuildOptions]
*_*_*_CC_FLAGS = -D ADVANCED_LOGGER_SEC=1
Original file line number Diff line number Diff line change
Expand Up @@ -46,3 +46,6 @@

[Pcd]
gAdvLoggerPkgTokenSpaceGuid.PcdAdvancedLoggerHdwPortDebugPrintErrorLevel ## SOMETIMES_CONSUMES

[FeaturePcd]
gAdvLoggerPkgTokenSpaceGuid.PcdAdvancedLoggerAutoWrapEnable
Loading
Loading