public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: "Tan, Ming" <ming.tan@intel.com>
To: "Bi, Dandan" <dandan.bi@intel.com>,
	Liming Gao <gaoliming@byosoft.com.cn>
Cc: "devel@edk2.groups.io" <devel@edk2.groups.io>
Subject: Re: [edk2-devel] [PATCH v6] MdeModulePkg/Universal/StatusCodeHandler: Fix a bug about log lost
Date: Mon, 21 Dec 2020 07:17:43 +0000	[thread overview]
Message-ID: <MWHPR11MB1983694D90EE42EF7668675B97C00@MWHPR11MB1983.namprd11.prod.outlook.com> (raw)
In-Reply-To: <1651B662B221A676.25767@groups.io>

Liming:
  I already submit a new patch for it, is there any new concern for it?

  Thank you.
  Tan Ming.

-----Original Message-----
From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Tan, Ming
Sent: Friday, December 18, 2020 12:51 PM
To: devel@edk2.groups.io
Cc: Bi, Dandan <dandan.bi@intel.com>; Liming Gao <gaoliming@byosoft.com.cn>
Subject: [edk2-devel] [PATCH v6] MdeModulePkg/Universal/StatusCodeHandler: Fix a bug about log lost

REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3126

1. If use PeiDxeDebugLibReportStatusCode as DebugLib, then some logs after ExitBootService() will be lost.
2. The root cause:
2.1 The original code will register an unregister function of gEfiEventExitBootServicesGuid, this unregister function will call EFI_RSC_HANDLER_PROTOCOL->Unregister and does not support log through serial port.
2.2 And some other drivers also register call back funtions of gEfiEventExitBootServicesGuid.
2.3 Then after the unregister function is called, other call back functions can't out log if them use RSC as DebugLib.
3. The DxeMain will report status code EFI_SW_BS_PC_EXIT_BOOT_SERVICES after notify all the call back functions of gEfiEventExitBootServicesGuid.
4. Solution: the StatusCodeHandlerRuntimeDxe.c will not register an unregister function of gEfiEventExitBootServicesGuid, but unregister it after receive the status code of EFI_SW_BS_PC_EXIT_BOOT_SERVICES.

Cc: Dandan Bi <dandan.bi@intel.com>
Cc: Liming Gao <gaoliming@byosoft.com.cn>
Signed-off-by: Ming Tan <ming.tan@intel.com>
---
V6: Change the funcname of UnregisterBootTimeHandlers to UnregisterSerialBootTimeHandlers.
V5: Fix an unused var bug and compile error using GCC.
V4: Fix a spell bug in code comment, change 'a' to 'an' before 'unregister'.
V3: Fix a spell bug in commit message, change 'a' to 'an' before 'unregister'.
V2: Add the REF link in commit message.

 .../RuntimeDxe/SerialStatusCodeWorker.c       | 10 ++++++++++
 .../RuntimeDxe/StatusCodeHandlerRuntimeDxe.c  | 19 ++-----------------  .../RuntimeDxe/StatusCodeHandlerRuntimeDxe.h  | 11 +++++++++++
 3 files changed, 23 insertions(+), 17 deletions(-)

diff --git a/MdeModulePkg/Universal/StatusCodeHandler/RuntimeDxe/SerialStatusCodeWorker.c b/MdeModulePkg/Universal/StatusCodeHandler/RuntimeDxe/SerialStatusCodeWorker.c
index 0b98e7ec63..348f55edba 100644
--- a/MdeModulePkg/Universal/StatusCodeHandler/RuntimeDxe/SerialStatusCodeWorker.c
+++ b/MdeModulePkg/Universal/StatusCodeHandler/RuntimeDxe/SerialStatusCo
+++ deWorker.c
@@ -151,6 +151,16 @@ SerialStatusCodeReportWorker (
   //   SerialPortWrite ((UINT8 *) Buffer, CharCount); +  //+  // If register an unregister function of gEfiEventExitBootServicesGuid,+  // then some log called in ExitBootServices() will be lost,+  // so unregister the handler after receive the value of exit boot service.+  //+  if ((CodeType & EFI_STATUS_CODE_TYPE_MASK) == EFI_PROGRESS_CODE &&+      Value == (EFI_SOFTWARE_EFI_BOOT_SERVICE | EFI_SW_BS_PC_EXIT_BOOT_SERVICES)) {+    UnregisterSerialBootTimeHandlers();+  }+   return EFI_SUCCESS; } diff --git a/MdeModulePkg/Universal/StatusCodeHandler/RuntimeDxe/StatusCodeHandlerRuntimeDxe.c b/MdeModulePkg/Universal/StatusCodeHandler/RuntimeDxe/StatusCodeHandlerRuntimeDxe.c
index a8c0fe5b71..d50335af8a 100644
--- a/MdeModulePkg/Universal/StatusCodeHandler/RuntimeDxe/StatusCodeHandlerRuntimeDxe.c
+++ b/MdeModulePkg/Universal/StatusCodeHandler/RuntimeDxe/StatusCodeHand
+++ lerRuntimeDxe.c
@@ -10,23 +10,17 @@
 #include "StatusCodeHandlerRuntimeDxe.h"  EFI_EVENT                 mVirtualAddressChangeEvent = NULL;-static EFI_EVENT          mExitBootServicesEvent     = NULL; EFI_RSC_HANDLER_PROTOCOL  *mRscHandlerProtocol       = NULL;  /**   Unregister status code callback functions only available at boot time from   report status code router when exiting boot services. -  @param  Event         Event whose notification function is being invoked.-  @param  Context       Pointer to the notification function's context, which is-                        always zero in current implementation.- **/ VOID EFIAPI-UnregisterBootTimeHandlers (-  IN EFI_EVENT        Event,-  IN VOID             *Context+UnregisterSerialBootTimeHandlers (+  VOID   ) {   if (PcdGetBool (PcdStatusCodeUseSerial)) {@@ -178,15 +172,6 @@ StatusCodeHandlerRuntimeDxeEntry (
     mRscHandlerProtocol->Register (RtMemoryStatusCodeReportWorker, TPL_HIGH_LEVEL);   } -  Status = gBS->CreateEventEx (-                  EVT_NOTIFY_SIGNAL,-                  TPL_NOTIFY,-                  UnregisterBootTimeHandlers,-                  NULL,-                  &gEfiEventExitBootServicesGuid,-                  &mExitBootServicesEvent-                  );-   Status = gBS->CreateEventEx (                   EVT_NOTIFY_SIGNAL,                   TPL_NOTIFY,diff --git a/MdeModulePkg/Universal/StatusCodeHandler/RuntimeDxe/StatusCodeHandlerRuntimeDxe.h b/MdeModulePkg/Universal/StatusCodeHandler/RuntimeDxe/StatusCodeHandlerRuntimeDxe.h
index fd4689c2d7..a2cf2ae0b7 100644
--- a/MdeModulePkg/Universal/StatusCodeHandler/RuntimeDxe/StatusCodeHandlerRuntimeDxe.h
+++ b/MdeModulePkg/Universal/StatusCodeHandler/RuntimeDxe/StatusCodeHand
+++ lerRuntimeDxe.h
@@ -118,4 +118,15 @@ RtMemoryStatusCodeReportWorker (
   IN EFI_STATUS_CODE_DATA               *Data OPTIONAL   ); +/**+  Unregister status code callback functions only available at boot time from+  report status code router when exiting boot services.++**/+VOID+EFIAPI+UnregisterSerialBootTimeHandlers (+  VOID+  );+ #endif-- 
2.24.0.windows.2



-=-=-=-=-=-=
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#69173): https://edk2.groups.io/g/devel/message/69173
Mute This Topic: https://groups.io/mt/79055338/2557430
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [ming.tan@intel.com] -=-=-=-=-=-=



       reply	other threads:[~2020-12-21  7:17 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <1651B662B221A676.25767@groups.io>
2020-12-21  7:17 ` Tan, Ming [this message]
2020-12-22  0:35   ` 回复: [edk2-devel] [PATCH v6] MdeModulePkg/Universal/StatusCodeHandler: Fix a bug about log lost gaoliming
2020-12-22  0:56     ` Tan, Ming
2020-12-22  1:26       ` Tan, Ming
2020-12-22  1:36         ` Dandan Bi
2020-12-22  3:17           ` Dandan Bi
2021-01-07 14:19             ` Laszlo Ersek
2020-12-22  1:40       ` 回复: " gaoliming

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-list from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=MWHPR11MB1983694D90EE42EF7668675B97C00@MWHPR11MB1983.namprd11.prod.outlook.com \
    --to=devel@edk2.groups.io \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox