DATA_HUB_FILTER_DRIVER *FilterEntry;\r
LIST_ENTRY *Link;\r
LIST_ENTRY *Head;\r
+ EFI_TIME LogTime;\r
\r
Private = DATA_HUB_INSTANCE_FROM_THIS (This);\r
\r
//\r
RecordSize = sizeof (EFI_DATA_RECORD_HEADER) + RawDataSize;\r
TotalSize = sizeof (EFI_DATA_ENTRY) + RecordSize;\r
+ \r
+ //\r
+ // First try to get log time at TPL level <= TPL_CALLBACK.\r
+ //\r
+ ZeroMem (&LogTime, sizeof (LogTime));\r
+ if (EfiGetCurrentTpl() <= TPL_CALLBACK) {\r
+ gRT->GetTime (&LogTime, NULL);\r
+ }\r
\r
//\r
// The Logging action is the critical section, so it is locked.\r
- // The MTC asignment & update, time, and logging must be an\r
+ // The MTC asignment & update and logging must be an\r
// atomic operation, so use the lock.\r
//\r
Status = EfiAcquireLockOrFail (&Private->DataLock);\r
//\r
Record->LogMonotonicCount = ++Private->GlobalMonotonicCount;\r
\r
- gRT->GetTime (&Record->LogTime, NULL);\r
+ CopyMem (&Record->LogTime, &LogTime, sizeof (LogTime));\r
\r
//\r
// Insert log into the internal linked list.\r
InitializeListHead (&mPrivateData.DataListHead);\r
InitializeListHead (&mPrivateData.FilterDriverListHead);\r
\r
- EfiInitializeLock (&mPrivateData.DataLock, TPL_CALLBACK);\r
+ EfiInitializeLock (&mPrivateData.DataLock, TPL_NOTIFY);\r
\r
//\r
// Make sure we get a bigger MTC number on every boot!\r